Thema: Delphi canvas probleme, oder so

Einzelnen Beitrag anzeigen

Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

canvas probleme, oder so

  Alt 24. Aug 2007, 09:55
hi

ich habe ein kleines Problem mit meiner Komponente...
und zwar habe ich folgenden bug entdeckt, und weiss nicht an was es liegt, vielleicht könnt ihr mir weiterhelfen.
Die ganze Komponente findet ihr in unsererOpen Source Library.

Das Problem:

Wenn ich ein Icon in mein Button zeichne soll er in die mitte kommen. In den meisten Konstellationen funktioniert das auch einwandfrei, habe ich aber ein icon 16*16 auf einer Canvas 22*22, ist das Bild, gerade nachdem ich mein Programm starte nicht in der mitte. Sobald ich dann mit der Maus darüberfahre, geht es in die mitte und wird von diesem Moment an immer korrekt angezeigt. Bis ich das Programm wieder neu starte... mit Bildern und Icons ab 32*32 habe ich dieses Problem nie!

hier die Routinen die das Bild zeichnen, vielleicht fällt euch ja etwas auf, PS: ich verwende nur ein Bild, also
PictureUseOnlyOne := true!

Delphi-Quellcode:
procedure TEButton.DrawPicture;
begin
 if (FPicture <> nil) then
   Canvas.Draw((Width - FPicture.Graphic.Width) div 2,(Height - FPicture.Graphic.Height) div 2 ,FPicture.Graphic);
end;

procedure TEButton.DrawPictureOver;
begin
 if (FPictureUseOnlyOne) then
 begin
  if (FPicture <> nil) then
   Canvas.Draw((Width - FPicture.Graphic.Width) div 2,(Height - FPicture.Graphic.Height) div 2 ,FPicture.Graphic);
 end
 else
 begin
  if (FPictureOver <> nil) then
  Canvas.Draw((Width - FPictureOver.Graphic.Width) div 2,(Height - FPictureOver.Graphic.Height) div 2 ,FPictureOver.Graphic);
 end;
end;

procedure TEButton.DrawPictureDown;
begin
 if (FPictureUseOnlyOne) then
 begin
  if (FPicture <> nil) then
   Canvas.Draw((Width - FPicture.Graphic.Width) div 2,(Height - FPicture.Graphic.Height) div 2 ,FPicture.Graphic);
 end
 else
 begin
  if (FPictureDown <> nil) then
   Canvas.Draw((Width - FPictureDown.Graphic.Width) div 2,(Height - FPictureDown.Graphic.Height) div 2 ,FPictureDown.Graphic);
 end;
end;
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat