![]() |
nonVCL TabControl Hintergrundfarbe ändern
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe ein TabConntrol nonVCL erstellt und bekomme einfach den Hintergrund nicht angepasst. Probiere nun schon ewig rum und bin am verzweifeln :( Bei mir bleibt der Hintergrund immer weiß, dieser soll aber die Farbe des Dialoghintergrundes haben. Damit Ihr wisst was ich meine hab ich das mal als Screener an gehangen. Habe das TabControl gesubclassed und auf WM_ERASEBKGRND reagiert. Das hat leider nicht geholfen. Oder habs falsch gemacht.:roll: Auch der Versuch die Dialog Messages WM_CTLCOLOR.. Messages zu-verarbeiten schlug fehl. Und Google gibt auch nicht wirklich was her. Das Einzige was ich dazu finden konnte, aus dem ich aber nicht wirklich schlau werde, befindet sich ![]() |
AW: nonVCL TabControl Hintergrundfarbe ändern
Die Frage ist welches System verwendest du?
In Win7 wirst du wohl über UxTheme für dein TabControl die Themes deaktivieren müssen. Ich hatte zumindest das gleiche problem mit meinen Menüs ohne deaktivieren der Theme ging es auch nicht. gruss |
AW: nonVCL TabControl Hintergrundfarbe ändern
Zitat:
|
AW: nonVCL TabControl Hintergrundfarbe ändern
Also,läuft auf nem Windows Vista System.
Das Tab Control wird nur per Quelltext erstellt. Sowie es ![]() Ich hab ja bei der Erstellung kein Problem, eher beim zeichnen. Das kann doch nicht sein das ich das nun nur wegen dem Hintergrund selber zeichnen muss?? Normalerweise hat doch jedes Control eine WM_CTLCOLOR message auf die es reagiert, oder nicht? Kann für das TabControl nur keine ausmachen. so hatte ich mit ERASEBKGND es versucht.
Delphi-Quellcode:
function EraseBkGnd(hWindow: HWND;Clr:COLORREF;DC: HDC):LRESULT;
var hBr: hBrush; r: TRect; begin hBr := CreateSolidBrush(Clr); GetClientRect(hWindow,r); FillRect(DC,r,hBr); DeleteObject(hBr); result := 1; end; function TabWndProc(hTab, uMsg, wParam, lParam:DWORD): DWORD; stdcall; var ps : TPAINTSTRUCT; pen : HPEN; brush: HBRUSH; dc : HDC; rect : TRect; OldObjct: DWORD; begin Result := 0; case uMsg of WM_ERASEBKGND: result:=EraseBkGnd(hTab,RGB(120,120,120),wparam); { begin; SetBkMode(wParam, TRANSPARENT); result:=GetStockObject( NULL_BRUSH ); end; } else Result := CallWindowProc(OldWndProc, hTab, uMsg, wParam, lParam); end; end; hwnd_Tabcontrol := CreateWindow(WC_TABCONTROL, '', WS_CHILD or WS_CLIPSIBLINGS or WS_VISIBLE or TCS_TOOLTIPS, TabRect.Left, TabRect.Top, TabRect.Right, TabRect.Bottom, wnd, 0, HInstance, nil ); OldWndProc := Pointer(SetWindowLong(hwnd_Tabcontrol, GWL_WNDPROC, Integer(@TabWndProc))); |
AW: nonVCL TabControl Hintergrundfarbe ändern
Zitat:
Zitat:
Ich denke das du dann eine andere Farbe für den TabHintergrund hast. Dann ist es so wie ich sage die Theme ignoriert das setzen deiner Farbe. gruss |
AW: nonVCL TabControl Hintergrundfarbe ändern
Ich bezog mich auf seine Frage, ob er was falsch machen würde ohne irgendwelchen Quellcode zu zeigen. ;)
|
AW: nonVCL TabControl Hintergrundfarbe ändern
Also wenn ich das Design von Vista auf Klassisch stelle, dann sind die Tabs gleichfarbig! Aber dann sehen die auch altbacken aus.
Zitat:
|
AW: nonVCL TabControl Hintergrundfarbe ändern
Zitat:
Ohne Manifest funktioniert das Tab so wie es soll mit der übergebenen Farbe. Ich weiss nicht wie dein Programm aussieht ob du themes verwendest oder nicht. Wenn ja dann versuch das hier. Binde die Unit UxTheme ein. Initialisiere sie.
Delphi-Quellcode:
InitThemeLibrary;
und deaktiviere die theme wie folgt.
Delphi-Quellcode:
gruss
S_OK := SetWindowTheme(Handle vom Tab, '' , '');
if S_OK = 0 then begin ... // Farbe setzen end; |
AW: nonVCL TabControl Hintergrundfarbe ändern
Habe das Programm auch so nochmal getestet. Der weiße Hintergrund kommt erst nach dem Einfügen eines XP-Manifestes. Das kann man durch die Unit UxThemes unterbinden? Kenne mich mit der Unit leider gar nicht aus.
|
AW: nonVCL TabControl Hintergrundfarbe ändern
Zitat:
So wie im Code gezeigt. Da muss man sich nicht auskennen. Initialisieren und das bißchen Code einfügen an der stelle wo du beim erstellen des Tabs die Farbe übergibst. Nicht in der WinProc. Hier mein Sample der Tooltips da hatte ich das gleiche Problem. Dann kannst sehen wie ich das meine. :)
Delphi-Quellcode:
gruss
function CreateToolTip(hObj: HWND; Text: PChar): Integer;
var hTooltip: HWND; hParent: HWND; ti: TToolInfo; S_OK: HResult; begin with SkinEngine do begin hParent := GetParent(hObj); hTooltip := ToolTipData(0, 0); ZeroMemory(@ti, SizeOf(TToolInfo)); if hTooltip = 0 then begin InitComControls; StyleEx := 0; hTooltip := CreateWindowEx(StyleEx, TOOLTIPS_CLASS, nil, WS_POPUP or TTS_ALWAYSTIP, integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), hParent, 0, skInstance, nil); if hTooltip <> 0 then begin // Ohne dem lassen sich die Farben der Tooltips // bei aktivierter Theme mit Manifest nicht verändern. S_OK := SetWindowTheme(hTooltip, '' , ''); // <<< Theme auschalten .. nur gültig für das übergebene Handle if S_OK = 0 then begin ToolTipData(hTooltip, 1); SplitColorARGB(SK_ACTIVECAPTION, Alpha, Red, Green, Blue); // <<< Neue Farbe SendMessage(hTooltip, TTM_SETTIPTEXTCOLOR, RGB(Red, Green, Blue), 0); SplitColorARGB(SK_INACTIVECAPTION, Alpha, Red, Green, Blue); // <<< Neue Farbe SendMessage(hTooltip, TTM_SETTIPBKCOLOR, RGB(Red, Green, Blue), 0); SendMessage(hTooltip, TTM_SETMAXTIPWIDTH, 0, 400); end; end; end; // Addiere den ToolTipText if hTooltip <> 0 then begin ti.cbSize := sizeof(ti); ti.hinst := skInstance; ti.uFlags := TTF_IDISHWND or TTF_SUBCLASS; ti.hWnd := hParent; ti.uId := hObj; SendMessage(hTooltip, TTM_ADDTOOL, 0, LParam(@ti)); SetToolTipText(hObj, Text) end; end; Result := hTooltip; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz