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:
type
TFilenameInfos = record
RealFileName: String;
DisplayName: String;
end;
in Form2 siehts so aus, um den Namen aus dem Editfeld in die Listbox in Formular 1 einzufügen:
Delphi-Quellcode:
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;
das ist dann der ablauf von Shellexecute, um einen Eintrag der Listbox in Formular 1 zu starten:
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
MeinArray[lIndex].RealFileName
geladen wenn ich das da einfüge?
Ich weiß nicht wo ich nach dem fehler suchen soll....