Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Icon aus Ordner laden und anzeigen nur wie? (https://www.delphipraxis.net/130897-icon-aus-ordner-laden-und-anzeigen-nur-wie.html)

DiamondDog 15. Mär 2009 10:39


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:
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;
Ich weiß zwar das das ich es so laden kann:
Delphi-Quellcode:
var TestIcon : TICON;
[...]
    TestIcon := TIcon.Create;
    TestIcon.LoadFromFile(ExtractFilePath(FDllPath)+'Test.ico');
[...]
aber nicht wie ich es anstellen muss, das es nachher angezeigt wird.

Danke schon mal für eure Hilfe.

Mfg Dog

[edit=Luckie]Tippfehler im Titel korrigiert. Mfg, Luckie[/edit]

Luckie 15. Mär 2009 10:56

Re: Ico aus Ordner laden und anzeigen nur wie?
 
Wo ist das Problem:
Delphi-Quellcode:
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;
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.

DiamondDog 15. Mär 2009 11:50

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.

Luckie 15. Mär 2009 11:53

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.

DiamondDog 15. Mär 2009 12:14

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.

Luckie 15. Mär 2009 19:35

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Ich glaube TIcon hat auch eine Methode LoadFromResource.

DiamondDog 15. Mär 2009 21:45

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Es gibt leider nur:
LoadFromClipboardFormat
LoadFromStream
LoadFromFile

gibts vll noch eine Möglichkeit?

Luckie 15. Mär 2009 21:50

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Lade das Icon mit einem TResourcenStream und von da mit LoadFromResource.

DiamondDog 16. Mär 2009 08:19

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Zitat:

Zitat von Luckie
Lade das Icon mit einem TResourcenStream und von da mit LoadFromResource.

Das bekomme ich irgend wie nicht hin. Versteh nicht ganz wie das gehen soll. Das TResourcenStream ist klarr nur wie krieg ich es vorher in LoadFromResource bzw als was?

Luckie 16. Mär 2009 18:51

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Also so schwer kann das doch nicht sein:
Delphi-Quellcode:
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;
Bt. mein BDS2006 kennt für TIcon auch die Methoden LoadFromResourceName und LoadFromResourceID.

DiamondDog 16. Mär 2009 21:05

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Bekomme folgenden Fehler:
Code:
[Fehler] u_qip_plugin.pas(258): Undefinierter Bezeichner: 'TResourceStream'
was muß ich unter uses dafür einbinden?

Apollonius 16. Mär 2009 21:10

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.

Luckie 16. Mär 2009 21:12

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Zitat:

Zitat von Apollonius
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.

Aber wenn ich als Typ ICON angebe, würde ich eigentlich erwarten, dass das Format kompatibel ist.

Apollonius 16. Mär 2009 21:18

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.

Sunlight7 17. Mär 2009 08:06

Re: Icon aus Ordner laden und anzeigen nur wie?
 
Zitat:

Zitat von Luckie
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.

Der letzte Parameter gibt an, wie es gezeichnet werden soll, DI_IMAGE zeichnet dann eben nur das Image.
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);

DiamondDog 18. Mär 2009 11:00

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.

Luckie 18. Mär 2009 11:06

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 MSDN-Library durchsuchenLoadLibrary bekommst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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