AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmsymbol aus ListBox in TImage laden?

Ein Thema von Johnny Bravo · begonnen am 15. Jun 2008 · letzter Beitrag vom 17. Jun 2008
Antwort Antwort
Seite 2 von 3     12 3      
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 14:42
Für was?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 14:46
Versuch mal testhalber mit S := OpenDialog1.FileName;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 14:47
Du solltest übrigens den OpenDialog noch freigeben.
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#14

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 14:57
@ 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?
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#15

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 18:10
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.
  Mit Zitat antworten Zitat
IceTube
(Gast)

n/a Beiträge
 
#16

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 18:39
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
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#17

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 15. Jun 2008, 18:58
Hi,
da passiert nichts. Das TImage wird nicht weiß, bzw. es wird kein icon angezeigt.
  Mit Zitat antworten Zitat
IceTube
(Gast)

n/a Beiträge
 
#18

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 16. Jun 2008, 16:58
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
  Mit Zitat antworten Zitat
Johnny Bravo

Registriert seit: 7. Jun 2008
75 Beiträge
 
#19

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 16. Jun 2008, 19:36
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
  Mit Zitat antworten Zitat
IceTube
(Gast)

n/a Beiträge
 
#20

Re: Programmsymbol aus ListBox in TImage laden?

  Alt 16. Jun 2008, 20:52
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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