Mit dem
Handle ist nur ein Trick
Du musst mit dem
Handle nix machen. Einfach nur das
Handle verlangen und dann wegschmeissen. Denn wenn du das
Handle verlangst und das Icon ist grad neu geladen (ergo: er hat weder ein
Handle noch die richtigen Angaben zu Höhe und Breite) dann besorgt er sich ein
Handle und nebenbei schaut er noch nach, wie groß eigentlich das Icon ist. Das ist quasi von hinten durch die Brust ins Auge.
du musst also vorm ersten abfragen der Abmaße mal das
Handle verlangen. Machs doch im OnChangeereignis:
Delphi-Quellcode:
procedure TEButton.PictureChanged(Sender:Tobject);
begin
if (FPicture<>
nil)
and (FPicture.Graphic.ClassName='
TIcon')
then FPicture.Icon.handle;
//nur verlangen, du brauchst dir das Handle nicht zu merken
//stell dir einfach vor durch diese Methode verlangst du vom Objekt mal in den Icon-Header zu schauen
end;
Im Constructor:
Delphi-Quellcode:
FGradientDown:=gdTopToBottom;
FPicture:=TPicture.Create;
Fpicture.OnChange:=Picturechanged; //neue Zeile
FPictureOver:=TPicture.Create;
Das musst du wahrscheinlich auch noch für die anderen beiden TPicture machen.
Das scheint ein Fehler in der Implementierung von TPicture bzw TIcon zu sein. Man geht einfach nicht davon aus, dass jemand die Abmaße braucht bevor das Bild gezeichnet wird.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.