Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programmsymbol aus ListBox in TImage laden? (https://www.delphipraxis.net/115621-programmsymbol-aus-listbox-timage-laden.html)

mkinzler 15. Jun 2008 13:42

Re: Programmsymbol aus ListBox in TImage laden?
 
Für was?

DeddyH 15. Jun 2008 13:46

Re: Programmsymbol aus ListBox in TImage laden?
 
Versuch mal testhalber mit
Delphi-Quellcode:
S := OpenDialog1.FileName;

Die Muhkuh 15. Jun 2008 13:47

Re: Programmsymbol aus ListBox in TImage laden?
 
Du solltest übrigens den OpenDialog noch freigeben.

Johnny Bravo 15. Jun 2008 13:57

Re: Programmsymbol aus ListBox in TImage laden?
 
@ DeddyH
klappt leider auch nicht. Wird zwar auch kompiliert, aber ein Icon bekomme ich trotzdem nicht angezeigt.

@DieMuhkuh
stimmt, hab ich gerade noch ergänzt.

EDIT:
muss im OI noch was bestimmtes für Image1 eingestellt sein? Normalerweise nicht, oder?

Johnny Bravo 15. Jun 2008 17:10

Re: Programmsymbol aus ListBox in TImage laden?
 
so, ich habe rausgefunden das sich das TImage weiß färbt, wenn folgender code ausgeführt wird:
Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);
var IconIndex : Integer;
    h : hIcon;
    S : String;
    Icon : TIcon;
    Bitmap : TBitmap;
begin
     openDialog := TOpenDialog.Create(self);                
     openDialog.InitialDir := GetCurrentDir;                
     openDialog.Options := [ofFileMustExist];                
     openDialog.Filter := 'Anwendungen|*.exe;*.com';        
     openDialog.FilterIndex := 0;


  if openDialog.Execute then
   begin
     Icon := TIcon.Create;
     IconIndex := 0;
     S := OpenDialog1.FileName;
     h := ExtractIcon(0,PAnsiChar(S),IconIndex);
     Icon.Handle := h;
     ImageList1.AddIcon (Icon);
   try
    ImageList1.GetIcon(0, Icon);
    Image1.Canvas.Draw(0, 0, Icon);
  finally
    FreeAndNil(Icon);
    OpenDialog1.Free;
    Form4.Show;                                          
  end;
wieso wird das Image nur weiß, aber es wird nicht das Programmsymbol angezeigt?

Danke schonmal für eure antworten.

IceTube 15. Jun 2008 17:39

Re: Programmsymbol aus ListBox in TImage laden?
 
Hallo!

Und was ist wenn du folgendes machst?

Delphi-Quellcode:
 try
  //Icon[0] ins Image1 übergebem
  ImageList1.GetIcon(0,Image1.Picture.Icon);
  finally
    FreeAndNil(Icon);
    OpenDialog1.Free;
    Form4.Show;                                          
  end;
lg

Johnny Bravo 15. Jun 2008 17:58

Re: Programmsymbol aus ListBox in TImage laden?
 
Hi,
da passiert nichts. Das TImage wird nicht weiß, bzw. es wird kein icon angezeigt. :cry:

IceTube 16. Jun 2008 15:58

Re: Programmsymbol aus ListBox in TImage laden?
 
Aber so funktioniert es:

Delphi-Quellcode:
uses ShellApi;

function IconFromFile(const Filename: String; IconNr: Word): HICON;
var
  buffer: array[0..2*MAX_PATH]of Char;
begin
  StrPCopy(buffer, Filename);
  Result := ExtractAssociatedIcon(HInstance, buffer, IconNr);
end;

procedure TForm1.Button1Click(Sender: TObject);
var IconIndex : Integer;
    h : hIcon;
    S : String;
    Icon : TIcon;
    Bitmap : TBitmap;
    OpenDialog : TOpenDialog;
begin
     openDialog := TOpenDialog.Create(self);
     openDialog.InitialDir := GetCurrentDir;                
     openDialog.Options := [ofFileMustExist];
     openDialog.Filter := 'Anwendungen|*.exe;*.com';
     openDialog.FilterIndex := 0;


  if openDialog.Execute then
   begin
     Icon := TIcon.Create;
     IconIndex := 0;
     S := OpenDialog.FileName;
     h := IconFromFile(OpenDialog.FileName,1);
     Icon.Handle := h;
     ImageList1.AddIcon (Icon);
   try
    ImageList1.GetIcon(0, Icon);
    Image1.Canvas.Draw(0, 0, Icon);
  finally
    FreeAndNil(Icon);
    OpenDialog.Free;

  end;
end;
lg

Johnny Bravo 16. Jun 2008 18:36

Re: Programmsymbol aus ListBox in TImage laden?
 
Hi,
leider auch nicht.
wird kompiliert, es gibt aber sobald ich eine Datei in die Listbox Laden will eine Zugriffsverletzung.
Wenn ich auf Ok drücke, wird ein Icon angezeigt, aber leider nur das von der kopmilierten Anwendung... :?:

Wie krieg ich die Fehlermeldung weg, und wieso wird das symbol vom programm selber geladen?

ich bin nicht mehr weit entfernt vom ziel, ein icon wird wenigstens angezeigt :)

EDIT:
so hab einen Fehler gefunden:
Delphi-Quellcode:
  finally
    FreeAndNil(Icon);
    OpenDialog.Free;
    Form4.Show;
  end;
end;
die Zugriffsverletzung ist nur vorhanden, wenn Form4.Show im Code ist.

Hab das dementsprechend, jetz in Form4 geschrieben:

Delphi-Quellcode:
function IconFromFile(const Filename: String; IconNr: Word): HICON;
var
  buffer: array[0..2*MAX_PATH]of Char;
begin
  StrPCopy(buffer, Filename);
  Result := ExtractAssociatedIcon(HInstance, buffer, IconNr);
end;

procedure TForm4.Button1Click(Sender: TObject);
 var IconIndex : Integer;
    h : hIcon;
    S : String;
    Icon : TIcon;
    Bitmap : TBitmap;
    OpenDialog : TOpenDialog;
 begin
     Icon := TIcon.Create;
     IconIndex := 0;
     S := OpenDialog.FileName;
     h := IconFromFile(OpenDialog.FileName,1);
     Icon.Handle := h;
     Form2.ImageList1.AddIcon (Icon);
 try
    Form2.ImageList1.GetIcon(0, Icon);
    Form2.Image1.Canvas.Draw(0, 0, Icon);

 begin
    Form2.ListBox1.Items.Add (Form4.Edit1.Text);        //Fügt die ausgewählte Datei in die Listbox ein
    Form2.Label2.Caption := OpenDialog.FileName;
    Form2.ListBox1.MultiSelect :=False;            //Mehrfach Auswahl ist nich möglich
    Form2.ListBox1.Sorted :=True;
    end;                 //Sortiert die Einträge
  finally
    FreeAndNil(Icon);
    OpenDialog.Free;
end;
end;
jetzt bekomme ich aber kein Icon Angezeigt, der sagt mir jetzt "Bild kann nur geändert werden, wenn es ein Bitmap enthält"
Aber wenn ich das normal auf Form2 anwende, funktionierts halbwegs.

PS:
Der TOpenDialog ist auf Form2.

EDIT:
Ich bekomme anstatt dem Icon einen 16x16 Ordner angezeigt :roll:

IceTube 16. Jun 2008 19:52

Re: Programmsymbol aus ListBox in TImage laden?
 
Delphi-Quellcode:
procedure LoadImg(Image:TImage;FileName:string);
function IconFromFile(const Filename: String; IconNr: Word): HICON;
var
  buffer: array[0..2*MAX_PATH]of Char;
begin
  StrPCopy(buffer, Filename);
  Result := ExtractAssociatedIcon(HInstance, buffer, IconNr);
end;
var ImageList : TImageList;
    Icon : TIcon;
    h : HIcon;
begin
//Icon
Icon := TIcon.Create;

//Erstelle ImageList
ImageList := TImageList.Create(nil);

//
H := IconFromFile(FileName,1);

//
Icon.Handle := H;

//
ImageList.AddIcon(Icon);

//
ImageList.GetIcon(0,Image.Picture.Icon);
end;
Aufruf:

Delphi-Quellcode:
procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin
LoadImg(Image1,OpenDialog1.FileName);
end;
Wieso eigentlich "Programmsymbol aus ListBox in TImage laden?", du willst ja aus dem OpenDialog(der geöffneten Datei) das Icon in ein Image laden oder nicht=

Vielleicht gehts mit dem Code oben ?!?

lg


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Seite 2 von 3     12 3      

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