Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Seite 1 von 2  1 2      

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