Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Farbe eines Buttons mit WndProc ändern (https://www.delphipraxis.net/19402-farbe-eines-buttons-mit-wndproc-aendern.html)

landsc 2. Apr 2004 12:32


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:
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;
[edit=Admin]Delphi-Tags korrigiert. Mfg, Daniel[/edit]

AlphaBug 2. Apr 2004 12:58

Re: Farbe eines Buttons mit WndProc ändern
 
Hi,

hab dieses Beispiel aus einer ComboBox:

Delphi-Quellcode:
  inherited WndProc(Message);
  if Message.Msg = WM_CTLCOLORLISTBOX then
  begin
    SetBkColor(Message.wParam, ColorToRGB(Color));
    Message.Result := CreateSolidBrush(ColorToRGB(Color));
  end;
und Dieses direkt von TCustomCombo:

Delphi-Quellcode:
  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);
Könnten funktionieren,
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!

Luckie 2. Apr 2004 13:48

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.

AlphaBug 2. Apr 2004 13:57

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.

landsc 2. Apr 2004 14:04

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