AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SpeedButton - kein Bild?

Ein Thema von MarLe · begonnen am 29. Aug 2006 · letzter Beitrag vom 1. Sep 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: SpeedButton - kein Bild?

  Alt 31. Aug 2006, 14:15
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
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;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#22

Re: SpeedButton - kein Bild?

  Alt 31. Aug 2006, 14:31
... 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.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: SpeedButton - kein Bild?

  Alt 31. Aug 2006, 14:45
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;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#24

Re: SpeedButton - kein Bild?

  Alt 31. Aug 2006, 14:57
... super, funzt auch.
Werde noch ein bisschen testen ob noch irgendwelche Macken auftauchen.

Danke - Gruss MarLe
  Mit Zitat antworten Zitat
MarLe

Registriert seit: 13. Jan 2005
83 Beiträge
 
Delphi XE2 Professional
 
#25

Re: SpeedButton - kein Bild?

  Alt 1. Sep 2006, 12:35
Wenn der SpeedButton kleiner ist als 36*36 Pixel
dann wird mit SHGFI_SmallIcon der SpeedButton total verhunzt?!?
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: SpeedButton - kein Bild?

  Alt 1. Sep 2006, 14:15
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 !
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz