Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SpeedButton - kein Bild? (https://www.delphipraxis.net/76069-speedbutton-kein-bild.html)

Martin K 31. Aug 2006 14:15

Re: SpeedButton - kein Bild?
 
Auch hierfür gibt es eine Lösung:
Das Bitmap verwendet das untere linke Pixel als transparente Farbe.
Bei einer Verknüpfung ist dieses Pixel schwarz, somit wird der schwarze Verknüpfungs-Pfeil transparent.
Durch die Zeile
Delphi-Quellcode:
SpeedButton1.Glyph.TransparentColor := clNone;
sollte das Problem allerdings behoben sein.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ICO: TIcon;
  IconIndex: Word;
  buf: array[0..max_path] of Char;
begin
  ICO := TIcon.Create;
  try
    StrPCopy(buf, Edit1.Text);
    IconIndex := 0;
    ICO.Handle := ExtractAssociatedIcon(hInstance, buf, IconIndex);
    SpeedButton1.Glyph.Width := ICO.Width;
    SpeedButton1.Glyph.Height := ICO.Height;
    SpeedButton1.Glyph.TransparentColor := clNone;
    SpeedButton1.Glyph.Canvas.Brush.Color := Color;
    SpeedButton1.Glyph.Canvas.FillRect(Rect(0, 0, SpeedButton1.Glyph.Width, SpeedButton1.Glyph.Height));
    SpeedButton1.Glyph.Canvas.Draw(0, 0, ICO);
  finally
    ICO.Free;
  end;
end;

MarLe 31. Aug 2006 14:31

Re: SpeedButton - kein Bild?
 
... ja, so funktioniert's - Danke.
Der SpeedButton muss aber mindestens 36*36 Pixel haben um das Icon
unterzubringen.
Ich werde dennoch auch noch versuchen das gleiche mit SHGetFileInfo
abbilden zu können, dann könnte man alternativ auch die kleineren Icons
verwenden. Vielleicht hat's auch schon jemand umgesetzt.

Martin K 31. Aug 2006 14:45

Re: SpeedButton - kein Bild?
 
Zitat:

Zitat von MarLe
Ich werde dennoch auch noch versuchen das gleiche mit SHGetFileInfo
abbilden zu können, dann könnte man alternativ auch die kleineren Icons
verwenden. Vielleicht hat's auch schon jemand umgesetzt.

Ja, ich:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ICO: TIcon;
  SHFileInfo: TSHFileInfo;
begin
  ICO := TIcon.Create;
  try
    FillChar(SHFileInfo, SizeOf(SHFileInfo), #0);
    SHGetFileInfo(PChar(Edit1.Text), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_Icon or SHGFI_SmallIcon); //SHGFI_LargeIcon für die großen Symbole
    ICO.Handle := SHFileInfo.hIcon;
    SpeedButton1.Glyph.Width := ICO.Width;
    SpeedButton1.Glyph.Height := ICO.Height;
    SpeedButton1.Glyph.TransparentColor := clNone;
    SpeedButton1.Glyph.Canvas.Brush.Color := Color;
    SpeedButton1.Glyph.Canvas.FillRect(Rect(0, 0, SpeedButton1.Glyph.Width, SpeedButton1.Glyph.Height));
    SpeedButton1.Glyph.Canvas.Draw(0, 0, ICO);
  finally
    ICO.Free;
  end;
end;

MarLe 31. Aug 2006 14:57

Re: SpeedButton - kein Bild?
 
... super, funzt auch.
Werde noch ein bisschen testen ob noch irgendwelche Macken auftauchen.

Danke - Gruss MarLe

MarLe 1. Sep 2006 12:35

Re: SpeedButton - kein Bild?
 
Wenn der SpeedButton kleiner ist als 36*36 Pixel
dann wird mit SHGFI_SmallIcon der SpeedButton total verhunzt?!?

Martin K 1. Sep 2006 14:15

Re: SpeedButton - kein Bild?
 
Jaja, das leigt denke ich mal an der Umwandlung Icon -> Bitmap.
Kann es in Deinem Fall denn nicht eine ToolBar mit ToolButtons sein?
Hier kannst Du mit einer ImageList arbeiten und das Icons kann direkt als Icons eingefügt werden.
Da dürfte so ein Problem nicht auftauchen.

Zu dem eigentlichen Problem:
Habe mir gerade mit einem Trick beholfen - nicht die sauberste Lösung, aber es funktioniert:
- Du weist dem SpeedButton schon zur Designzeit (also bevor Du kompilierst) im OI ein Bitmap zu, das die Abmessungen 16x16 Pixel hat.
- In dem Quellcode streichst Du einfach diese beiden Zeilen:
Delphi-Quellcode:
    SpeedButton1.Glyph.Width := ICO.Width;
    SpeedButton1.Glyph.Height := ICO.Height;
Dann funktioniert's !


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
Seite 3 von 3     123   

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