![]() |
Probleme mit Listbox Einträgen
Hi,
Per Button öffne ich einen OpenDialog, in dem man *.exe auswählen kann. Wenn man dann auf Ok klickt, öffnet sich ein 2tes Formular, in dem man einen Namen für die *.exe eingeben kann. Dieser Name wird dann in die ListBox eingefügt. Wenn ich dann das Item in der Listbox per ShellExecute starten will, gehts Logischerweise nicht, da Shellexecute versucht den Dateinamen aus dem OpenDialog als Pfad nimmt. Nun meine Frage: Wie kann ich unter der weiterverwendung von dem 2ten Formular, in dem man einen "Ersatznamen" für die *.exe eingibt das ausgewählte ListBox Item starten? Also, das der "Ersatznamen" in der Listbox dann angezeigt wird, aber dazugehörige Pfad unsichtbar gespeichert wird. Hinterher möchte ich die Kompletten ListBox Items und der jeweils dazugehörige Pfad in einer Datei speichern - das speichern der Items klappt bis jetzt. Ich hoffe ihr versteht wie ich das meine, und ich hoffe ihr könnt mir ein bißchen helfen. :wink: |
Re: Probleme mit Listbox Einträgen
Die ListItems verfügen auch über eine Eigenschaft Objects. Da könntest Du den Originalnamen ablegen.
|
Re: Probleme mit Listbox Einträgen
entweder packst du in die Listbox beide Namen hintereinander und sorgst selber für das Zeichnen der Listbox so das nur der eine Name dann auch gemalt wird oder:
Zitat:
Zudem ist es üblich die Daten komplett im nicht sichtbaren Bereich zu halten und diese nur für die Anzeige in das entsprechende Anzeigeelement zu übertragen. In deinem Fall also komplettenPfad und Ersatzname in einer Liste oder einem Array ablegen und dann den Ersatznamen in die Listbox einfügen. |
Re: Probleme mit Listbox Einträgen
Danke schonmal für die Antworten,
mit folgendem Code würde ich das Programm aus der ListBox laden:
Delphi-Quellcode:
procedure TForm2.Button2Click(Sender: TObject);
function ShellExecuteErrMessage(int_Code: INTEGER): String; begin case int_code of 0: result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig'; 2: result := 'Datei wurde nicht gefunden.'; 3: result := 'Verzeichnis wurde nicht gefunden.'; 5: result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.'; 6: result := 'Bibliothek forderte separate Datensegmente für jede Task an.'; 8: result := 'Zuwenig Speicher, um die Anwendung zu starten.'; 10: result := 'Falsche Windows-Version.'; 11: result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.'; 12: result := 'Anwendung für ein anderes Betriebssystem.'; 13: result := 'Anwendung für MS-DOS 4.0.'; 14: result := 'Typ der ausführbaren Datei unbekannt.'; 15: result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.'; 16: result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.'; 19: result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.'; 20: result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.'; else result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(int_code) + ')'; end; end; var Err: Integer; begin if ListBox1.ItemIndex > -1 then Err:= ShellExecute(0, Nil, PChar(ListBox1.Items[ListBox1.ItemIndex]), Pchar(Edit1.Text), SW_NORMAL); if Err <= 32 then Showmessage(ShellExecuteErrMessage(Err)); end; nach dem eine Datei ausgewählt wurde, öffnet sich folgendes Formular:
Delphi-Quellcode:
Könntet ihr mir ein Beispiel mit den ListItem.Objects oder dem Array geben?
procedure TForm4.Button1Click(Sender: TObject);
var IconIndex : Integer; h : hIcon; S : String; Icon : TIcon; Bitmap : TBitmap; OpenDialog : TOpenDialog; begin Form2.ListBox1.MultiSelect :=False; Form2.ListBox1.Sorted :=True; Form2.Label2.Caption := OpenDialog.FileName; begin Icon := TIcon.Create; IconIndex := 0; S := OpenDialog.FileName; h := IconFromFile(OpenDialog.FileName,0); Form2.ImageList1.AddIcon (Icon); try Form2.ImageList1.GetIcon(0, Icon); Form2.Image1.Canvas.Draw(0, 0, Icon); with Form2.Image1.Canvas Do DrawIconEx(Handle, 0, 0,h, 32, 32, 0, Brush.Handle, di_Normal); begin Form2.ListBox1.Items.Add (Edit1.Text); // der inhalt aus edit1 wird in die listbox geladen, also der "Ersatzname" Form4.Close; Edit1.Clear; end; finally FreeAndNil(Icon); end; end; end; Hab gerade schwierigkeiten das umzusetzen und zu realisieren.... :gruebel: |
Re: Probleme mit Listbox Einträgen
Delphi-Quellcode:
type
TFilenameInfos = record RealFileName: String; DisplayName: String; end; [...] private MeinArray: Array of TFilenameInfos; [...] var lIndex: Integer; begin if OpenDialog1.Execute() then begin lIndex := Length(MeinArray); //Zeige Form für alternativen Dateinamen SetLength(MeinArray, lIndex + 1); MeinArray[lIndex].RealFileName := OpenDialog1.FileName; MeinArray[lIndex].DisplayName := NameAusForm2; ListBox1.Items.Add(MeinArray[lIndex].DisplayName); end; |
Re: Probleme mit Listbox Einträgen
Hi, hab deinen Code meinem entsprechend angepasst. Es wird zwar kompiliert, doch wenn ich das Programm starten will (das aus der Listbox) gibts eine Zugriffsverletzung...
Delphi-Quellcode:
was hab ich falsch gemacht?
procedure TForm2.Button2Click(Sender: TObject);
function ShellExecuteErrMessage(int_Code: INTEGER): String; begin case int_code of 0: result := 'Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig'; 2: result := 'Datei wurde nicht gefunden.'; 3: result := 'Verzeichnis wurde nicht gefunden.'; 5: result := 'Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz.'; 6: result := 'Bibliothek forderte separate Datensegmente für jede Task an.'; 8: result := 'Zuwenig Speicher, um die Anwendung zu starten.'; 10: result := 'Falsche Windows-Version.'; 11: result := 'Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei.'; 12: result := 'Anwendung für ein anderes Betriebssystem.'; 13: result := 'Anwendung für MS-DOS 4.0.'; 14: result := 'Typ der ausführbaren Datei unbekannt.'; 15: result := 'Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden.'; 16: result := 'Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten die nicht als nur lesbar gekennzeichnet waren, zu laden.'; 19: result := 'Versuch, eine komprimierte ausführbare Datei zu laden.' + #13 + 'Die Datei muß dekomprimiert werden, bevor sie geladen werden kann.'; 20: result := 'Ungültige dynamische Linkbibliothek (DLL).' + #13 + 'Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt.'; else result := 'Ein Unbekannter Fehler ist aufgetreten. (' + IntToStr(int_code) + ')'; end; end; var Err: Integer; lIndex: Integer; begin if OpenDialog1.Execute() then begin lIndex := Length(MeinArray); SetLength(MeinArray, lIndex + 1); MeinArray[lIndex].RealFileName := OpenDialog1.FileName; MeinArray[lIndex].DisplayName := Form4.Edit1.Text; ListBox1.Items.Add(MeinArray[lIndex].DisplayName); end; if Err <= 32 then Showmessage(ShellExecuteErrMessage(Err)); if FileExists (OpenDialog2.FileName) then begin if CheckBox2.Checked then Application.Minimize; end; end; |
Re: Probleme mit Listbox Einträgen
Könntest du bitte die vollständige Fehlermeldung posten und angeben bei welcher Anweisung diese kommt?
|
Re: Probleme mit Listbox Einträgen
natürlich.
Zitat:
Delphi-Quellcode:
auf.
if OpenDialog1.Execute() then
|
Re: Probleme mit Listbox Einträgen
Existiert den eine Instanz des Dialogs?
|
Re: Probleme mit Listbox Einträgen
habs so mal versucht:
Delphi-Quellcode:
da bekomme ich in der selben zeile den selben fehler bei adresse 0048BEE1.....
var
Err: Integer; lIndex: Integer; begin openDialog := TOpenDialog.Create(self); openDialog.InitialDir := GetCurrentDir; openDialog.Options := [ofFileMustExist]; openDialog.Filter := 'Anwendungen|*.exe'; openDialog.FilterIndex := 0; begin if OpenDialog1.Execute then begin lIndex := Length(MeinArray); SetLength(MeinArray, lIndex + 1); MeinArray[lIndex].RealFileName := OpenDialog1.FileName; MeinArray[lIndex].DisplayName := Form4.Edit1.Text; ListBox1.Items.Add(MeinArray[lIndex].DisplayName); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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