Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Schöne Buttons mit MouseOver (https://www.delphipraxis.net/1490-schoene-buttons-mit-mouseover.html)

Kuckuckskind 2. Dez 2002 13:52


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:

Sebastian Nintemann 2. Dez 2002 14:06

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:
Panel1.Color := clRed;
und beim und OnMouseMove des Forms, bzw des Controls auf dem das Panel liegt machst dus wieder rückgängig:
Code:
Panel1.Color := clAqua; //ein wunderschöner Hovereffekt
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!).

Gruß, Sebastian

Christian Seehase 2. Dez 2002 14:17

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;

foxy 2. Dez 2002 14:24

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 hier
:coder:

Sebastian Nintemann 2. Dez 2002 15:08

@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

Christian Seehase 2. Dez 2002 15:17

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.

Kuckuckskind 4. Dez 2002 17:36

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