![]() |
Schöne Buttons mit MouseOver
Hallo allerseits,
wie kann ich meine Buttons grafisch aufbereiten? D.h. mit einem schwarzen, dünnen Rahmen, einer blauen Fläche und einem MouseOver? Ich hab schon alles mögliche ausprobiert, z.B. einfach ein Panel statt Button genommen. (Ist das nicht sowieso die beste Lösung?) Naja, das MouseOver macht mir im Moment noch am meisten zu schaffen: Mit MouseUp und MouseDown (heißt das so?) kann ich da ja nicht viel anfangen. Mit MouseMove bekomm ich`s wenigstens so weit, dass der Button (bzw. das Panel) beim Hinüberfahren die Farbe ändert. Leider geht die Farbe nicht wieder weg... tja... :nerd: |
Das einfachste :mrgreen: für einen Hover-Effekt ist wohl das OnMouseMove Event: Bei OnMouseMove über dem Panel (oder was auch sonst) schreibst du
Code:
und beim und OnMouseMove des Forms, bzw des Controls auf dem das Panel liegt machst dus wieder rückgängig:
Panel1.Color := clRed;
Code:
Ich weiß jetzt nicht wie zeitintensiv das einfärben eines Panels ist, aber da es neu gezeichnet wird beim ändern der Farbe denke ich, dass es Sinn macht eine Variable zu benutzen, mit der du den Farbstatus des Panels speicherst (boolean), so dass nicht jedesmal neu eingefärbt wird wenn das MouseMove Event auftritt (das tritt nämlich ganz schön oft auf!).
Panel1.Color := clAqua; //ein wunderschöner Hovereffekt
Gruß, Sebastian |
Moin Zusammen,
oder man rüstet ein MouseEnter/MouseLeave nach.
Delphi-Quellcode:
type
TForm1 = class(TForm) Panel1: TPanel; private { Private-Deklarationen } procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; public { Public-Deklarationen } end; var Form1: TForm1; const _clMouseEntered = clRed; _clMouseLeaved = clBlue; implementation {$R *.DFM} { TForm1 } procedure TForm1.CMMouseEnter(var Message: TMessage); var ptWork : TPoint; begin GetCursorPos(ptWork); if WindowFromPoint(ptWork) = Panel1.Handle then begin Panel1.Color := _clMouseEntered; end; end; procedure TForm1.CMMouseLeave(var Message: TMessage); var ptWork : TPoint; begin GetCursorPos(ptWork); if WindowFromPoint(ptWork) <> Panel1.Handle then begin Panel1.Color := _clMouseLeaved; end; end; |
servus @kuckuck
also ich wollte das auch machen aber da ich faul bin ;) und mir überlegt habe in welchem stil ich das ändern will hab ich mir einfach eine Unit genommen un zwar ![]() :coder: |
@Christian: Ist natürlich die schönere Methode. :mrgreen: :D Wegen der Einfachheit (insbesondere für Anfänger, ich weiß ja nicht wie weit Kuckuckskind in Sachen Messages bewandert ist) hab ich erst mal die einfachere gewählt.
Wundert mich übrigens das keiner der Buttonkomponenten (TButton, TBitButton, TSpeedButton) keine Eigenschaft Color haben. Und: Wieso sind standardmäßig keine MouseLeave/Enter Events vorgesehen? Ist das in anderen Sprachen auch so? Ich weiß nur von JavaScript zb, dass es da solche Events gibt. Gruß, Sebastian |
Moin Sebastian,
man kann natürlich auch eine neue Kompo erstellen (z.B. ein Panel von TCustomPanel abgeleitet), dass dann um die Enter/Leave Funktionen usw. ergänzt wird. Das wäre dann noch sauberer. |
Hi,
danke euch allen für eure Hilfe! Es klappt und ich bin glücklich :) Naja, meine Delphi-Kenntnisse beschräken sich auf ein absolutes Minimum was irgendwie eine weitergehende Gestaltung der Programme angeht. Tja, Schulwissen halt... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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