Frame3D Gadgets Farbe ändern?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gerdra
Beiträge: 18
Registriert: 30.12.2006 02:00
Wohnort: Zedtwitz
Kontaktdaten:

Frame3D Gadgets Farbe ändern?

Beitrag von gerdra »

Hallo,
eigentlich kam ich nur durch zufall drauf, bei meinem XP wurden beim selbstgeschriebenen PB Programm die Schriftfarben der Frame3D Gadgetschrift immer in Blau dargestellt. Irgendwann, vielleicht haben die Kinder bei den Windowseinstellungen was verändert, waren die Schriftfarben bei den Frame3D Gadgets auf einmal schwarz.
Frage: Kann man die Schriftfarbe bei den Frame3D Gadget schon beim Programmieren einstellen ?
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Ja ich hab da mal was gesehen mit dem man sowas machen kann auf www.purearea.net war glaub ich mal ne Userlib muss nochmal schauen wie die geheißen hat

[EDIT]
ich hab den Namen PBOSL_SkinWin
hab aber noch keinen Link gefunden Stell sie aber auf meiner Page ich hoffe ich hab alles schau mal in den nächsten 5min auf meiner Page da kannst du sie downloaden.

[EDIT]
kannst Downloaden
http://harry555.ha.funpic.de/index.php?site=files&cat=1

[EDIT]

Help musste mal Googeln da findet mal immer was ^^
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
gerdra
Beiträge: 18
Registriert: 30.12.2006 02:00
Wohnort: Zedtwitz
Kontaktdaten:

Beitrag von gerdra »

Hallo unix,
danke für die Antwort, muß aber erst mal sehen, ob ich mit deiner lib umgehen kann,hihi. Ja, aber komisch ist, ich weiß jetzt, daß die Veränderungen im Quelltext selbst (wahrscheinlich unwissentlich) vorgenommen wurden, denn nach dem Start eines anderen PB Programmes sind die Frame3D Überschriften noch BLAU. Sehr komisch.
Also vielen Dank, ich versuche mal, mit dieser Lib zurechtzukommen
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=973&highlight=
; Author: Feri
; Date: 11. May 2003

;****************************************************************************** 
;* Beispiel zum Einfärben von Gadgets                                         * 
;****************************************************************************** 
; 
Global HintergrundFarbe1 
Global HintergrundFarbe2 
HintergrundFarbe1=CreateSolidBrush_(RGB(0,0,0))         ; schwarz 
HintergrundFarbe2=CreateSolidBrush_(RGB(255,255,255))   ; weiß 
; 
Procedure COL_STRINGGADGET(WindowID,Message,wParam,lParam) 
;:::::FÄRBT STRINGGADGET UM::::: 
Result=#PB_ProcessPureBasicEvents 
Select Message 
  Case #WM_CTLCOLOREDIT 
; ::: #WM_CTLCOLOREDIT funktioniert für alle SkinGadget und StringGadget ::: 
    Select lParam 
      Case GadgetID(1)                      ; hier die Gadget-Nummer angegeben 
        SetBkMode_(wParam,#TRANSPARENT) 
        SetTextColor_(wParam,RGB(0,255,0))   ; Schriftfarbe (grün) 
        Result=HintergrundFarbe1             ; Hintergrundfarbe (schwarz) 
    EndSelect 
  Case #WM_CTLCOLORSTATIC 
; ::: #WM_CTLCOLORSTATIC funktionert für alle Frame3DGadget, OptionGadget,  ::: 
; ::: TextGadget und TrackBarGadget ::: 
    Select lParam 
      Case GadgetID(2)                      ; das ist die GadgetID für das TextGadget(2,...) 
        SetBkMode_(wParam,#TRANSPARENT) 
        SetTextColor_(wParam,RGB(0,0,0))     ; Schriftfarbe (schwarz) 
        Result=HintergrundFarbe2             ; Hintergrundfarbe (weiß) 
      Case GadgetID(3)                      ; das ist die GadgetID für das TextGadget(3,...) 
        SetBkMode_(wParam,#TRANSPARENT)
        ;SetTextColor_(wParam,RGB(0,255,0))   ; Schriftfarbe (grün) 
        Result=CreateSolidBrush_($FF)        ; Hintergrundfarbe (schwarz) 
    EndSelect 
; Case #WM_CTLCOLORLISTBOX 
; ::: #WM_CTLCOLORLISTBOX funktioniert für alle ListBoxGadget ::: 
EndSelect 
ProcedureReturn Result 
EndProcedure 
; 
OpenWindow(0,100,300,400,200,"Testfenster",#PB_Window_SystemMenu) 
SetWindowCallback(@COL_STRINGGADGET()) 
; 
CreateGadgetList(WindowID(0)) 
StringGadget(1,10,10,90,20,"StringGadget") 
TextGadget(2,10,40,300,100,"TextGadget 2",#PB_Text_Border) 
Frame3DGadget(3,10,160,300,30,"TextGadget 3") 
; 
Repeat 
Until WaitWindowEvent() = #PB_Event_CloseWindow 
DeleteObject_(HintergrundFarbe1) 
DeleteObject_(HintergrundFarbe2) 
End
; ExecutableFormat=Windows
; EOF
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Einfach in den Compiler-Einstellungen den XP-Style wieder aktivieren, dann wirds BLAU :mrgreen:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

#PB_Frame3D_Flat macht's schwarz, egal welcher Skin;
#PB_Frame3D_Borderless macht's sogar UNSICHTBAR!!!! :o :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

@CSprengel: Dieser code ist nicht Windows XP kompatibel. Egal was man verändert, der Text wird immer wieder mit der voreingestellten Theme Farbe ausgegeben.
Benutzeravatar
gerdra
Beiträge: 18
Registriert: 30.12.2006 02:00
Wohnort: Zedtwitz
Kontaktdaten:

Beitrag von gerdra »

Hi danke Euch allen,
ts-soft hats erkannt, es lag tatsächlich an der fehlenden XP-Skin Aktivierung, dass es auf einmal schwarz war, wenn man XP-Skin aktiviert hat vor dem compilieren, ists wieder blau. Interessant aber ist das CODE Beispiel von CSprengel. Das werde ich ausprobieren.

Danke an alle!!
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Probier mal das hier gerdra. Funktioniert auch mit XP Themes:

Code: Alles auswählen

; Title:    Ownerdraw Frame3D Control
; Author:   Fluid Byte
; Date:     December 31, 2006
; Compiler: PureBasic v4.02

Structure FRAME3DEX
	lpPrevFunc.l
	clrText.l
	bThemeXP.b
EndStructure

Procedure Frame3DExProc(hWnd.l,uMsg.l,wParam.l,lParam.l)
	Protected hDC.l,ps.PAINTSTRUCT,*frmex.FRAME3DEX,Title.s,fts.SIZE,wrc.RECT,lpBuffer.l,hThemeButton.l
	
	*frmex = GetWindowLong_(hwnd,#GWL_USERDATA)
	
    Select uMsg
    	Case #WM_DESTROY
    	*frmex\lpPrevFunc = -1
    	
    	ProcedureReturn 0
    	
        Case #WM_PAINT		
		hdc = BeginPaint_(hwnd,ps)
		
		SelectObject_(hdc,SendMessage_(hwnd,#WM_GETFONT,0,0))	
		
		Title = GetGadgetText(GetDlgCtrlID_(hwnd))	
		GetTextExtentPoint32_(hdc,Title,Len(Title),fts)	
		GetClientRect_(hWnd,wrc)		
		SetRect_(wrc,wrc\left,wrc\top+fts\cy/2,wrc\right,wrc\bottom)			
		
		If OSVersion() = #PB_OS_Windows_XP And IsThemeActive_() And IsAppThemed_() And *frmex\bThemeXP 
			lpBuffer = AllocateMemory(13) : PokeS(lpBuffer,"Button",-1,1)		
			
			hThemeButton = OpenThemeData_(WindowID(0),lpBuffer)			
			DrawThemeBackground_(hThemeButton,hdc,4,1,wrc,0)
			CloseThemeData_(hThemeButton)
			
			FreeMemory(lpBuffer)			
		Else
			DrawEdge_(hdc,wrc,#EDGE_ETCHED,#BF_RECT)
		EndIf
	
		SetBkColor_(hdc,GetSysColor_(#COLOR_3DFACE))
		SetTextColor_(hdc,*frmex\clrText)
		TextOut_(hdc,9,0,Title,Len(Title))	

		EndPaint_(hwnd,ps)

		ProcedureReturn 0

		Default
		If *frmex\lpPrevFunc = -1 : FreeMemory(*frmex) : Else
			ProcedureReturn CallWindowProc_(*frmex\lpPrevFunc,hWnd,uMsg,wParam,lParam)			
		EndIf
    EndSelect
EndProcedure

Procedure Frame3DGadgetEx(GadgetID.w,X.w,Y.w,Width.w,Height.w,Text.s,Color.l=0)		
	Frame3DGadget(GadgetID,X,Y,Width,Height,Text)
	
	Protected *frmex.FRAME3DEX,Filename.s,HINSTANCE.l
	
	*frmex.FRAME3DEX = AllocateMemory(SizeOf(FRAME3DEX))
	*frmex\lpPrevFunc = SetWindowLong_(GadgetID(GadgetID),#GWL_WNDPROC,@Frame3DExProc())
	*frmex\clrText = Color
	
	Filename = Space(#MAX_PATH) : GetModuleFileName_(0,Filename,#MAX_PATH)

	HINSTANCE = LoadLibrary_(Filename)
	*frmex\bThemeXP = FindResource_(HINSTANCE,1,24)
	FreeLibrary_(HINSTANCE)
	
	SetWindowLong_(GadgetID(GadgetID),#GWL_USERDATA,*frmex)
	
	ProcedureReturn GadgetID(GadgetID)
EndProcedure

OpenWindow(0,0,0,400,300,"Ownerdraw Frame3D Control",#WS_OVERLAPPEDWINDOW | 1)

CreateGadgetList(WindowID(0))

SetGadgetFont(#PB_Default,LoadFont(0,"Arial",9))

Frame3DGadgetEx(101,10,5,200,90,"Frame3DGadgetEx #1",#Red)
Frame3DGadgetEx(102,10,100,200,90,"Frame3DGadgetEx #2",RGB(40,180,70))
Frame3DGadgetEx(103,10,195,200,90,"Frame3DGadgetEx #3",#Blue)

While WaitWindowEvent() ! 16 : Wend
Den optionalen Style Parameter habe ich weggelassen da diese eh keinen Text darstellen. Außerdem sehen die Stile mit oder ohne XP Theme identisch aus.
Benutzeravatar
gerdra
Beiträge: 18
Registriert: 30.12.2006 02:00
Wohnort: Zedtwitz
Kontaktdaten:

Beitrag von gerdra »

OK Fluid Byte
werde ich auch probieren. Danke für die Mühe.
Antworten