![]() |
Icon aus Ordner laden und anzeigen nur wie?
Hallo Leute,
ich hab da folgendes Problem und zwar im nachfolgenden Code würde ich gerne das TestIco aus einem Ordner laden und anzeigen lassen, leider hab ich keine Ahnung wie ich das anstellen muss und brächte etwas Hilfe.
Delphi-Quellcode:
Ich weiß zwar das das ich es so laden kann:
procedure TQipPlugin.DrawSpecContact(PlugMsg: TPluginMessage);
var ContactId : DWord; wStr : WideString; // Data : Pointer; Cnv : TCanvas; R : PRect; R1 : TRect; TestIcon : HICON; // TestIcon : TICON; begin if not Assigned(FfrmMain) then Exit; ContactId := PlugMsg.WParam; if (ContactId <> FfrmMain.UniqContactId) then Exit; //Data not used here in this example because plugin added only one contact //Data := Pointer(PlugMsg.LParam); Cnv := TCanvas.Create; try Cnv.Handle := PlugMsg.NParam; R := PRect(PlugMsg.Result); SetBkMode(Cnv.Handle, TRANSPARENT); TestIcon := LoadImage(0, IDI_INFORMATION, IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR or LR_SHARED or LR_LOADTRANSPARENT); DrawIconEx(Cnv.Handle, 8, 2, TestIcon, 16, 16, 0, 0, DI_NORMAL); DestroyIcon(TestIcon); wStr := 'Text'; Cnv.Font.Name := 'Tahoma'; Cnv.Font.Color := clNavy; Cnv.Font.Size := 8; Cnv.Font.Style := [fsBold]; R1 := Rect(R^.Left + 26 + FSpecLeft, R^.Top + 1 + FSpecTop, R^.Right, R^.Bottom); DrawTextW(Cnv.Handle, PWideChar(wStr), Length(wStr), R1, DT_LEFT); finally Cnv.Free; end; end;
Delphi-Quellcode:
aber nicht wie ich es anstellen muss, das es nachher angezeigt wird.
var TestIcon : TICON;
[...] TestIcon := TIcon.Create; TestIcon.LoadFromFile(ExtractFilePath(FDllPath)+'Test.ico'); [...] Danke schon mal für eure Hilfe. Mfg Dog [edit=Luckie]Tippfehler im Titel korrigiert. Mfg, Luckie[/edit] |
Re: Ico aus Ordner laden und anzeigen nur wie?
Wo ist das Problem:
Delphi-Quellcode:
Allerdings habe ich es mit DrwaIconEx nicht transparent bekommen, auch wenn ich die Eigenchaft von TIcon Transparent auf true gesetzt habe. Mit DrawIcon wurde es automatisch transparent dargestellt. Nur kann man da keine Größe angeben. Da müsstest du dann ein Passendes Icon benutzen. Umd mit dem LR_SHARED musst du vorsichtig sein. Lies dazu mal was im Windows SDK steht.
procedure TForm1.Button1Click(Sender: TObject);
var Icon: TIcon; Path: String; begin Path := ExtractFilePath(ParamStr(0)) + 'Moebius.ico'; Icon := TIcon.Create; try Icon.LoadFromFile(Path); //DrawIcon(Self.Canvas.Handle, 0, 0, Icon.Handle); DrawIconEx(Self.Canvas.Handle, 0, 0, Icon.Handle, 16, 16, 0, 0, DI_IMAGE); finally Icon.Free; end; end; |
Re: Icon aus Ordner laden und anzeigen nur wie?
Cool funktioniert super.
Eine Frage hab ich da aber noch und zwar mein Ico hat einen Transparenten Hintergrund und wenn es nachher angezeigt wird ist das was Tranzparent ist schwarz. Wie schaffe ich es das der Hintergrund weiß angezeigt wird? Ps: Habs auch mit TestIcon.Transparent := True; versucht der Hintergrund bleibt leider schwarz. |
Re: Icon aus Ordner laden und anzeigen nur wie?
Wie gesagt mit DrawIcon wird es transparent. Warum es mit DrawIconEx nicht transparent wird, weiß ich im Moment auch nicht.
PS: Die Dinger heißen Icon und nicht Ico. |
Re: Icon aus Ordner laden und anzeigen nur wie?
hm... ok ist nicht schlimm dann pass ich es dem Hintergrund an.
Ist es auch möglich das Icon nicht aus einem Ordner zu laden sondern von der Form zu nehmen? (Image1) Ps: Sorry hatte mich bei ico verschrieben sollte Icon heißen. |
Re: Icon aus Ordner laden und anzeigen nur wie?
Ich glaube TIcon hat auch eine Methode LoadFromResource.
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Es gibt leider nur:
LoadFromClipboardFormat LoadFromStream LoadFromFile gibts vll noch eine Möglichkeit? |
Re: Icon aus Ordner laden und anzeigen nur wie?
Lade das Icon mit einem TResourcenStream und von da mit LoadFromResource.
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Zitat:
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Also so schwer kann das doch nicht sein:
Delphi-Quellcode:
Bt. mein BDS2006 kennt für TIcon auch die Methoden LoadFromResourceName und LoadFromResourceID.
procedure TForm4.Button1Click(Sender: TObject);
var ResourceStream: TResourceStream; Icon: TIcon; begin ResourceStream := TResourceStream.CreateFromID(HInstance, <Deine Icon ID>, 'Icon'); try Icon := TIcon.Create; try Icon.LoadFromStream(ResourceStream); DrawIcon(Self.Canvas.Handle, 0, 0, Icon.Handle); finally Icon.Free; end; finally ResourceStream.Free; end; end; |
Re: Icon aus Ordner laden und anzeigen nur wie?
Bekomme folgenden Fehler:
Code:
was muß ich unter uses dafür einbinden?
[Fehler] u_qip_plugin.pas(258): Undefinierter Bezeichner: 'TResourceStream'
|
Re: Icon aus Ordner laden und anzeigen nur wie?
So wird das nicht funktionieren, das Format ist in der Ressource anders als im normalen Stream. Zumindest in Delphi 2006 hat TIcon eine Methode LoadFromResourceName.
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Zitat:
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Ich glaube nicht, dass das geht. Der Typ dient beim TResourceStream ausschließlich zur Identifizierung, ändert aber letztlich nichts am Datenformat - man erhält immer noch die Rohdaten. Und diese Rohdaten sind eben anders als in einer *.ico-Datei. Du kannst es ja mal ausprobieren.
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Zitat:
DI_NORMAL behinhaltet DI_MASK, so das der transparente Bereich frei bleibt.
Delphi-Quellcode:
DrawIconEx(Self.Canvas.Handle, 0, 0, Icon.Handle, 16, 16, 0, 0, DI_NORMAL);
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Geht es nicht irgewnd wie das icon in die dll zu bekommen so das es von da geladen wird als Resource oder so? Nur ich hab ja das Problem das es LoadFromResource oder so nicht gibt.
|
Re: Icon aus Ordner laden und anzeigen nur wie?
Liest du eigentlich unsere Antworten durch? Wir haben doch gerade festgetsellt, dass TIcon Icons aus Ressourcen laden kann. Als Hinstance gibst du dann eben das handle der geladenen DLL an, welches du mit
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
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