![]() |
Farbe eines Buttons mit WndProc ändern
Hallo!
Ich hab mal ne Frage. Ich weiß, das Thema wurde schon oft erläutert, nur nicht zu meiner Zufriedenheit. Ich bin schon lange auf der Suche nach einer Möglichkeit die Farbe eines Button zu ändern. Ich weiß, daß mit WndProc alles möglich ist und ich möchte auch keine eigene Komponente schreiben, ich möchte das Problem mit WndProc lösen. Ich war soweit, daß ich die Farbänderung gesehen habe, die aber gleich durch BtnFace wieder überschrieben wurde. Könnt Ihr mir bitte eine Beispiel posten, wie ich das mit WndProc lösen kann? Oder ergänzt einfach den untenstehenden Quelltext. Vielen Dank schonmal im vorraus. Gruß landsc mein Quelltext soweit:
Delphi-Quellcode:
[edit=Admin]Delphi-Tags korrigiert. Mfg, Daniel[/edit]
procedure TfrmMain.WndProc(var msg: TMessage);
begin inherited WndProc(msg); if msg.Msg = WM_CTLCOLORBTN then begin Button1.Brush.Color := clRed; msg.LParam := Button1.Handle; msg.WParam := GetDC(Button1.Handle); msg.Result := Button1.Brush.Handle; end; end; |
Re: Farbe eines Buttons mit WndProc ändern
Hi,
hab dieses Beispiel aus einer ComboBox:
Delphi-Quellcode:
und Dieses direkt von TCustomCombo:
inherited WndProc(Message);
if Message.Msg = WM_CTLCOLORLISTBOX then begin SetBkColor(Message.wParam, ColorToRGB(Color)); Message.Result := CreateSolidBrush(ColorToRGB(Color)); end;
Delphi-Quellcode:
Könnten funktionieren,
with Message do
case Msg of WM_CTLCOLORMSGBOX..WM_CTLCOLORSTATIC: begin SetTextColor(WParam, ColorToRGB(Font.Color)); SetBkColor(WParam, ColorToRGB(Brush.Color)); Result := Brush.Handle; Exit; end; end; inherited WndProc(Message); hab' sie aber nicht ausprobiert ! [edit/:] bin mir nicht sicher obs im TfrmMain.WndProc funktioniert, da das die WinProc-Methode von (vermute ich mal) TForm ist. Ansonsten muss wohl ein Abgeleteter Button her :coder: [/edit] Viel Glück! |
Re: Farbe eines Buttons mit WndProc ändern
Die Wndproc hat damit gar nichts zu tun bzw. nur am Rande. Willst du einen Button anders färben, heißt das Zauberwort Subclassing. Die nachticht WM_CTLCOLORBUTTON gibt es zwar nützt dir aber nichts. Da immer nur ein Brush zurückgegeben werden kann, ein Button aber aus mehreren Farben besteht wegen des 3D Effektes usw. Nähres dazu um MSDN oder PSDK. Zu Hause hab eich noch das beispiel für einen gesubclassed Button, weiß aber noch nicht, wann ich dadran komme.
@AlphaBug: Eine Combobox hat damit gar nichts am Hut und dein Beispiel dürfte ihm nichts nützen. |
Re: Farbe eines Buttons mit WndProc ändern
@Luckie
Ist mir schon klar, das 'ne ComboBox nichts mit 'nem Button zu tun hat :zwinker: , aber als ich 'ne ComboBox selbst zeichnen wollte, stieß ich halt im WndProc halt auf dieses Beispiel, obwohl der eigentliche Zeichenvorgang in der Paint-Methode und im DrawItem-Event lag, aber 'ne ComboBox stammt halt auch von TWinControl ab. Im übrigen war's nur 'ne flüchtige Idee. |
Re: Farbe eines Buttons mit WndProc ändern
Danke erstmal für Eure Mühe.
@Luckie Währe echt cool, wenn Du da was finden würdest und mir schicken könntest, wenn Du zeit hast. Danke schonmal. Gruß landsc[dp][df] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 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