Hey .chicken, warum machst du das nich einfach folgendermaßen:
Delphi-Quellcode:
procedure Tmainform.button_layerMouseEnter(Sender: TObject);
begin
button.Visible:=false;
button_hover.Visible:=true;
end;
procedure Tmainform.button_layerMouseLeave(Sender: TObject);
begin
if(button_hover.Visible)
then button_hover.Visible:=false
else button_down.Visible:=false;
button.Visible:=true;
end;
procedure Tmainform.button_layerMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
button_down.Visible:=false;
button_hover.Visible:=true;
end;
procedure Tmainform.FormCreate(Sender: TObject);
begin
with button_layer.Picture.Bitmap do
begin
TransparentColor := Canvas.Pixels[1,1];
TransparentMode := tmFixed;
end;
end;
procedure Tmainform.button_layerMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
button_hover.Visible:=false;
button_down.Visible:=true;
end;
Erklärung:
button = Grafik des Buttons
button_hover = Grafik des Buttons, wenn Maus drüber ist (onMouseEnter)
button_down = Grafik des Buttons, wenn Maus geklickt ist (onMouseDown)
button_layer = Unsichtbare Grafik, die Events (onmouseenter,...) regelt
Funktionsprinzip:
Es liegen 4 Grafiken übereinander in selber größe:
- 1 für die normale Ansicht mit dem Wert visible:=true;
- 2 weitere für hover und click effekt mit visible:=false;
- ganz oben die Transparente, also nicht Sichtbare Grafik
Die Transparente Grafik regelt mit ihren Events, welche Button-Grafik unter ihr angezeigt werden soll.
Das kannst du mit einem openPictureDlg verbinden und du hast, was du willst.
Der einzige Nachteil ist, dass für jeden Effekt des Buttons eine eigene Grafik existieren muss!
gruß ZeMi