Einzelnen Beitrag anzeigen

Johnny Bravo

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

Re: Probleme mit Listbox Einträgen

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