![]() |
NonVCL - Hintergrundfarbe eines "Labels" ändern
Hi,
Bin gerade dabei ein bissel mit SetLayeredWindowAttributes und NonVCL zu spielen wass auch gut funktioniert, was ich gern wissen möchte ist wie man bei einem Static Text die Hintergrundfarbe ändern kann.
Delphi-Quellcode:
So will es nicht. Jemand 'ne Idee ?
SendMessage(GetDlgItem(hwnd, edt_Edit), PBM_SETBKCOLOR, 0, RGB(255,0,0) {clWindowText});
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Normalerweise schickt ein Static-Control eine WM_CTLCOLOR Meldung an das Vaterfenster. Dort musst du die abfangen und verarbeiten (dabei gibst du einen HBrush und eine Farbe zurück).
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Hm, hilft mir jetzt nicht wirklich weiter, ich wies nicht wie das zu realisieren ist.
Muss ich da jetzt die WM_PAINT des Controls abfangen/überschreiben ? |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Leider hat Flocke wohl ein veraltetes PSDK. Jedenfalls gibt es keine einheitliche Nachricht mehr, sondern vielmehr eine pro Control-Typ. Für Static lautet sie WM_CTLCOLORSTATIC. Diese mußt du abfangen und bearbeiten, wobei du aus dem Fensterhandle in lParam mit
![]() Als Rückgabewert nimmst du den Brush mit der Hintergrundfüllung. Ansonsten wParam als DC benutzen und mit ![]() ![]() ![]() |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Hm... also ungefähr so wie du es in deinem absolut veraltetem und nicht mehr zu gebrauchenden sondern eher das von Luckie zu benutzendem Tutorial mit dem/der HyperlinkWndProc gemacht hast. :zwinker:
thx euch beiden. |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Aus meiner Dialogvorlage:
Delphi-Quellcode:
whitebrush : HBRUSH = 0;
WhiteLB : TLogBrush = ( lbStyle: BS_SOLID; lbColor: $00FFFFFF; lbHatch: 0 );
Delphi-Quellcode:
WM_CTLCOLORSTATIC:
begin case GetDlgCtrlId(lParam) of IDC_STC_BANNER: { color the banner white } begin whitebrush := CreateBrushIndirect(WhiteLB); SetBkColor(wParam, WhiteLB.lbColor); result := BOOL(whitebrush); end; else Result := False; end; end; |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
Sorry dafür (aber eine Suche nach WM_CTLCOLOR hätte ihm Aufklärung gebracht). Zitat:
Zitat:
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Er hätte auch einen System-Brush verwenden können (z.B.: GetStockObject(NULL_BRUSH)).
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
@Nico: Der Brush ist aber nicht weiß. Aber der ist es: WHITE_BRUSH. Gute Idee, wieder Ressourcen gespart. ;) |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Ja hatte ich auch erst, aber am Ende ist es sowieso für den Popo. So bald der Prozess beendet wird, zerstört Windows auch den Speicherbereich und von dem Prozess ist nichts mehr im Speicher.
Jetzt sieht das bei mir so aus:
Delphi-Quellcode:
WM_CTLCOLORSTATIC:
begin case GetDlgCtrlId(lParam) of IDC_STC_BANNER: { color the banner white } begin result := BOOL(GetStockObject(WHITE_BRUSH)); end; else Result := False; end; end; |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Der Richter sagt dazu nichts explizit, deswegen bin ich davon ausgegenagen, dass dies auch für GDI Handles gilt.
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Liste der Anhänge anzeigen (Anzahl: 1)
:gruebel: Was hab ich da nur wieder für ein Thema angesprochen ? :zwinker:
Was spricht gegen:
Delphi-Quellcode:
...und wie kann man die Farbe zB. clBtnFace setzen (Ähm... ohne die Unit Graphics die Systemfarben setzen)
WM_CTLCOLORSTATIC:
begin case GetDlgCtrlId(lParam) of Edit5ID_RandomText: { Farbe des Editfeldes aendern } begin SetTextColor(wParam, clBlue); SetBkColor(wParam, clWhite); end; else Result := False; end; end; Zitat:
|
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
![]() |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
:gruebel: Äh...
Zitat:
Was mich nun noch interesiert ist, wie man auf die Systemfarben ala clHighlight oder so zugreifen kann. Die Systemfarben sind ja in der Unit Graphics def.
Delphi-Quellcode:
const
clRed = $000000FF; clGreen = $0000FF00; clBtnFace = ? clHighlight = ? |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
Zitat:
@turbo: Wenn du ein readonly-EDIT hast, dann mußt du übrigens auch diese Nachricht verwenden (also WM_CTLCOLORSTATIC), wenn es read/write ist, nimmste die entsprechende (also WM_CTLCOLOREDIT). |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
![]() ![]() |
Re: NonVCL - Hintergrundfarbe eines "Labels" ände
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 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