![]() |
Re: Programmsymbol aus ListBox in TImage laden?
Für was?
|
Re: Programmsymbol aus ListBox in TImage laden?
Versuch mal testhalber mit
Delphi-Quellcode:
S := OpenDialog1.FileName;
|
Re: Programmsymbol aus ListBox in TImage laden?
Du solltest übrigens den OpenDialog noch freigeben.
|
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? |
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:
wieso wird das Image nur weiß, aber es wird nicht das Programmsymbol angezeigt?
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; Danke schonmal für eure antworten. |
Re: Programmsymbol aus ListBox in TImage laden?
Hallo!
Und was ist wenn du folgendes machst?
Delphi-Quellcode:
lg
try
//Icon[0] ins Image1 übergebem ImageList1.GetIcon(0,Image1.Picture.Icon); finally FreeAndNil(Icon); OpenDialog1.Free; Form4.Show; end; |
Re: Programmsymbol aus ListBox in TImage laden?
Hi,
da passiert nichts. Das TImage wird nicht weiß, bzw. es wird kein icon angezeigt. :cry: |
Re: Programmsymbol aus ListBox in TImage laden?
Aber so funktioniert es:
Delphi-Quellcode:
lg
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; |
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:
die Zugriffsverletzung ist nur vorhanden, wenn Form4.Show im Code ist.
finally
FreeAndNil(Icon); OpenDialog.Free; Form4.Show; end; end; Hab das dementsprechend, jetz in Form4 geschrieben:
Delphi-Quellcode:
jetzt bekomme ich aber kein Icon Angezeigt, der sagt mir jetzt "Bild kann nur geändert werden, wenn es ein Bitmap enthält"
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; 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: |
Re: Programmsymbol aus ListBox in TImage laden?
Delphi-Quellcode:
Aufruf:
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;
Delphi-Quellcode:
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=
procedure TForm1.OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
begin LoadImg(Image1,OpenDialog1.FileName); end; Vielleicht gehts mit dem Code oben ?!? lg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 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