![]() |
Re: Probleme mit Listbox Einträgen
Moment, die Items sind doch schon in der Listbox enthalten, oder? Dann ist die ganze Passage
Zitat:
Zitat:
|
Re: Probleme mit Listbox Einträgen
Hi,
hab die fehler beseitigt und den richtigen code hier: Irgendwie komm ich heute auf keinen grünen zweig. Lauter Fehler die man eigentlich sofort sehen sollte.. :roll: das ist der befehl, die Datei aus dem array zu starten - es passiert jedoch nichts, keine fehlermeldung, rein gar nichts.
Delphi-Quellcode:
begin
if Err = 0 then ShellExecute (Form2.Handle, 'open', Pchar('MeinArray[lIndex].RealFileName'), NIL, NIL, SW_SHOWNORMAL); das ist die prozedur die datei aus dem Opendialog in die Listbox zu laden:(überarbeitet)
Delphi-Quellcode:
wie gesagt,sobald ein eintrag in der Listbox drin ist, und gestartet werden soll, passiert nichts, aber auch rein gar nichts.
procedure TForm4.Button1Click(Sender: TObject);
var IconIndex : Integer; h : hIcon; S : String; Icon : TIcon; Bitmap : TBitmap; OpenDialog : TOpenDialog; lIndex: Integer; begin lIndex := Length(MeinArray); SetLength(MeinArray, lIndex + 1); MeinArray[lIndex].RealFileName := Form2.OpenDialog1.FileName; MeinArray[lIndex].DisplayName := Form4.Edit1.Text; Form2.ListBox1.Items.Add(MeinArray[lIndex].DisplayName); Form2.ListBox1.MultiSelect :=False; Form2.ListBox1.Sorted :=True; Form2.Label2.Caption := OpenDialog.FileName; 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 Form4.Close; Edit1.Clear; end; finally FreeAndNil(Icon); end; end; EDIT: Habs schon mit Application.Handle und SW_NORMAL versucht, ohne erfolg. |
Re: Probleme mit Listbox Einträgen
Schonmal den Rückgabewert von ShellExecute anzeigen lassen?
|
Re: Probleme mit Listbox Einträgen
Wie wäre es denn so?
Delphi-Quellcode:
[edit] :wall: Nimm mal die Hochkommata im 3. Parameter raus:
Err := ShellExecute(Form2.Handle,
'open', Pchar('MeinArray[lIndex].RealFileName'), NIL, NIL, SW_SHOWNORMAL); if Err < 33 then Showmessage(ShellExecuteErrMessage(Err));
Delphi-Quellcode:
[/edit]
Pchar('MeinArray[lIndex].RealFileName')
--> Pchar(MeinArray[lIndex].RealFileName) |
Re: Probleme mit Listbox Einträgen
Zitat:
Der fehler wird bei
Delphi-Quellcode:
angezeigt.
Err := ShellExecute(Form2.Handle,
|
Re: Probleme mit Listbox Einträgen
Siehe Deddys Edit. Hätte ich auch drauf kommen können :wall:
|
Re: Probleme mit Listbox Einträgen
Hab ich ganz vergessen zu erwähnen, das hab ich schon ausprobiert. Es passiert nichts. :|
EDIT: wenn ich shellexecute so umschreibe, bekomme ich wieder "Fehler bei der Bereichsprüfung":
Delphi-Quellcode:
mach ich es jedoch mit Hochkomma, wird der aktuelle Projektordner im Explorer geöffnet, schonmal etwas....aber wieso gerade der Projektordner?
begin
Err:= ShellExecute (0, NIL, NIL, 'open', PChar(MeinArray[lIndex].RealFileName), SW_SHOWNORMAL); ich verstehe nicht woran es liegen könnte..... |
Re: Probleme mit Listbox Einträgen
Dann lass Dir MeinArray[lIndex].RealFileName doch mal mit ShowMessage ausgeben, irgendwas in Richtung falscher Eintrag wird es ja vermutlich sein.
|
Re: Probleme mit Listbox Einträgen
also, wenn ich ShellExecute so aufrufe, mit einem Absoluten Pfad, funktionert es.
Delphi-Quellcode:
if Err = 0 then
ShellExecute (Form2.Handle, 'open', Pchar('C:\Windows\Notepad.exe'), //zB. Nil, Nil, SW_NORMAL); Hat das vielleicht damit zutun, das ich 2 Formulare nutze, und in beiden sind die variablen für das Array definiert? Weil ich muss ja die daten aus dem 2ten Formular (Edit) ins 1te Formular einfügen (Listbox) In beiden Formularen sind die Typen deklariert:
Delphi-Quellcode:
in Form2 siehts so aus, um den Namen aus dem Editfeld in die Listbox in Formular 1 einzufügen:
type
TFilenameInfos = record RealFileName: String; DisplayName: String; end;
Delphi-Quellcode:
das ist dann der ablauf von Shellexecute, um einen Eintrag der Listbox in Formular 1 zu starten:
procedure TForm4.Button1Click(Sender: TObject);
var IconIndex : Integer; h : hIcon; S : String; Icon : TIcon; Bitmap : TBitmap; OpenDialog : TOpenDialog; lIndex: Integer; begin if (Edit1.Text = '') then begin ShowMessage('Bitte geben sie einen Namen ein.'); exit; end else Form2.ImageList1.GetIcon(0, Icon); Form2.Image1.Canvas.Draw(0, 0, Icon); lIndex := Length(MeinArray); SetLength(MeinArray, lIndex + 1); MeinArray[lIndex].RealFileName := Form2.OpenDialog1.FileName; MeinArray[lIndex].DisplayName := Form4.Edit1.Text; Form2.ListBox1.Items.Add(MeinArray[lIndex].DisplayName); Form2.ListBox1.MultiSelect :=False; Form2.ListBox1.Sorted :=True; Form2.Label2.Caption := Form4.Edit1.Text; Icon := TIcon.Create; IconIndex := 0; S := OpenDialog.FileName; h := IconFromFile(OpenDialog.FileName,0); Form2.ImageList1.AddIcon (Icon); with Form2.Image1.Canvas Do DrawIconEx(Handle, 0, 0,h, 32, 32, 0, Brush.Handle, di_Normal); begin Form4.Close; Edit1.Clear; FreeAndNil(Icon); end; end;
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; begin if Err = 0 then ShellExecute (Form2.Handle, 'open', Pchar('MeinArray[lIndex].RealFileName'), // absoluter Pfad funktioniert, nur ein Eintrag aus dem Array nicht.... Nil, Nil, SW_NORMAL); if Err <= 32 then Showmessage(ShellExecuteErrMessage(Err)); end; Aber wieso wird nicht
Delphi-Quellcode:
geladen wenn ich das da einfüge?
MeinArray[lIndex].RealFileName
Ich weiß nicht wo ich nach dem fehler suchen soll.... :pale: |
Re: Probleme mit Listbox Einträgen
Hast Du denn mal gemacht, was ich Dir geraten habe?
Delphi-Quellcode:
ist Quatsch, die Hochkommata müssen da raus. Und lass Dir mal den Eintrag ausgeben (ShowMessage), dann siehst Du sofort, ob das passt. Außerdem würde ich für Typen, die ich in mehreren Formularen brauche, eine eigene Unit anlegen und in allen Formularunits einbinden, die diese Typen verwenden.
Pchar('MeinArray[lIndex].RealFileName')
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 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