![]() |
Programmsymbol aus ListBox in TImage laden?
Hi,
hab folgendes Problem. ich lade ein Programm in eine Listbox, und per klick auf einen Button wird es gestartet via ShellExecute. Ich habe auf dem Formular ein TImage platziert, das das entsprechende Programmsymbol anzeigen soll, welches ausgewählt ist. Wie bekomme ich das hin? Danke schonmal im vorraus. |
Re: Programmsymbol aus ListBox in TImage laden?
Hallo,
![]() |
Re: Programmsymbol aus ListBox in TImage laden?
danke, klappt leider nicht. bekomme die fehlermeldung das die Variable 'Icon' zwar deklariert würde aber nie benutzt in ShellExecuteMessage....?
Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);
var TempIcon: HICON; Icon:TIcon; begin openDialog := TOpenDialog.Create(self); openDialog.InitialDir := GetCurrentDir; openDialog.Options := [ofFileMustExist]; openDialog.Filter := 'Anwendungen|*.exe;*.com'; openDialog.FilterIndex := 0; if openDialog.Execute then begin TempIcon := IconFromFile(OpenDialog1.FileName,0); if (TempIcon <> 0) then begin Icon:=TIcon.Create; Try Icon.Handle := TempIcon; Icon.SaveToFile('c:\Merke.ico'); With Image1.Canvas Do DrawIconEx(Handle, 0, 0,TempIcon, 16, 16, 0, Brush.Handle, di_Normal); Finally Icon.Free; End; end; Form4.Show; end; end; |
Re: Programmsymbol aus ListBox in TImage laden?
Das sollte aber nur ein Hinweis und kein Fehler sein. Sonst Zeichne Icon statt TempIcon
|
Re: Programmsymbol aus ListBox in TImage laden?
Habs mal mit folgendem code versucht, welcher leider nicht funktionert - compiliert wird das programm trotzdem fehlerfrei. Aber ein Icon bekomme ich bei TImage nicht angezeigt.
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 := ExtractFileName(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); end; end; Form4.Show; end; |
Re: Programmsymbol aus ListBox in TImage laden?
Könnte das an der Zeile
Delphi-Quellcode:
liegen?
S := ExtractFileName(OpenDialog1.FileName);
|
Re: Programmsymbol aus ListBox in TImage laden?
sorry, ich steh gerade auf dem schlauch. Inwiefern meinst du das?
Normalerweise müsste der doch das symbol aus der *.exe holen,das ich mit dem Öffnen Dialog einlese, oder nicht? |
Re: Programmsymbol aus ListBox in TImage laden?
Ja aber warum entfernst du den Pfad?
|
Re: Programmsymbol aus ListBox in TImage laden?
Aber mit ExtractFileName löschst Du den Pfad ja raus.
|
Re: Programmsymbol aus ListBox in TImage laden?
Hm....stimmt. Wie lautet denn dann die richtige Bezeichnung?
|
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 |
Re: Programmsymbol aus ListBox in TImage laden?
Zitat:
ich öffne per klick auf einen button den OpenDialog. wenn man dann eine datei anklickt und öffnet, erscheint normalerweise das 2.te Formular, in der man einen Namen für die Datei eingeben kann, welches dann in die ListBox eingefügt wird. Ich musste das öffnen des 2ten Formulars (in meinem code Unit4) herausnehmen, weil es sonst eine Zugriffsverletzung gibt. werde deinen code ausprobieren, trotzdem danke für deine hilfe, ich melde mich gleich. :thumb: EDIT: So, habs nun hinbekommen, halbwegs. der Grund für die Zugriffsverletzung war OpenDialog1.Free, im 2ten Formular - das war aber schon im ersten Formular deklariert. Was eine Geburt den fehler zu finden. :freak: Es wird jetzt ein Icon geladen, und zwar das Windowsstandardsymbol für Unbekannte Dateitypen - stimmt also noch nicht 100%. Woran liegt das? Wie kann ich das Icon auf die Imagegröße von 32x32 skalieren? danke für eure mühe, ihr habt mir schon sehr geholfen :spin2: |
Re: Programmsymbol aus ListBox in TImage laden?
Die "IconNr" sind die verschiedenen Größen also 16x16,24x24,etc.
Für das andere Problem, weiß ich es jetzt nicht genau. Such eine andere Methode die Icons zu extrahieren... lg |
Re: Programmsymbol aus ListBox in TImage laden?
so, die Icon Größe hab ich mit
Delphi-Quellcode:
gelöst.
with Form2.Image1.Canvas Do
DrawIconEx(Handle, 0, 0,h, 32, 32, 0, Brush.Handle, di_Normal); Darüber bin ich schonmal froh. Doch wieso lädt der ein Falsches Symbol aus der Exe? mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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