Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ListBox und Message Box Problem (https://www.delphipraxis.net/115183-listbox-und-message-box-problem.html)

Johnny Bravo 7. Jun 2008 10:37


ListBox und Message Box Problem
 
Hi,
ich bin neu hier bei euch im forum, und hab direkt mehrere Fragen an die Gurus hier:

Ich habe eine anwendung geschrieben, in der sich durch drücken eines buttons, der TOpenDialog öffnet, wo dann der Pfad der ausgewählten Datei in eine ListBox geladen wird:


Delphi-Quellcode:
procedure TForm2.Button3Click(Sender: TObject);

begin
                  begin
 
  openDialog := TOpenDialog.Create(self);

 
  openDialog.InitialDir := GetCurrentDir;

 
  openDialog.Options := [ofFileMustExist];

 
  openDialog.Filter :=
    'Ausführbare Dateien|*.exe;*.com;*.bat|Batchdateien|*.bat';

 
  openDialog.FilterIndex := 1;

  if openDialog.Execute                              // Öffnet den Open Dialog
    then MessageDlg('Datei :'+openDialog.FileName, mtInformation, [mbOk], 0);

         ListBox1.MultiSelect :=False;
         ListBox1.Items.Add (openDialog.FileName);   //Fügt die aktuelle Auswahl des Programmes der ListBox hinzu.
         ListBox1.Sorted :=True;                     //ListBox1.Items.AddStrings(TStrings);
     
  openDialog.Free;
end;
Frage 1:
Wie kann ich einen einzelnen Wert aus der ListBox dann per Shellexecute starten?
Folgender Code funktioniert nur wenn ich einen physikalischen pfad zu einem programm angebe.

Delphi-Quellcode:
var
  Err: Integer;
begin
  Err:= ShellExecute(0,
               Nil,
               PChar('hier sollte der eintrag aus der listbox stehen'),
               Pchar('-Parameter'),
               Pchar('C:\StartDir'),
               SW_NORMAL);
               if Err <= 32 then
    Showmessage(ShellExecuteErrMessage(Err));
end;
Frage 2: Wenn man einen Button drückt, wird der ausgewählte eintrag der Listbox gelöscht, vorher aber noch durch ein Messag Dialog abgefragt.
Wenn man auf Ok drückt, wird der Eintrag entfernt, doch auch auf Abbrechen wird der gelöscht.
caNone funktioniert hier leider nicht, ich bekomme eine fehlermeldung das TBasic Action und TCloseAction inkompatiblen typen wären.
wenn ich den Befehl aber beim TForm.Close anwende funktioniert er jedoch.

Delphi-Quellcode:
procedure TForm2.Button4Click(Sender: TObject);
 var
  buttonSelected : Integer;
begin

     buttonSelected := MessageDlg('Soll das Programm aus der Liste entfernt werden? ', mtCustom, [mbYes,mbCancel], 0);
     if buttonSelected = mrYes    then ShowMessage('Programm wurde entfernt.');
        Listbox1.Items.Delete(Listbox1.ItemIndex);
     if buttonSelected = mrNo then Action := caNone;
       end;

ich wäre dankbar wenn ihr mir bei meinen problemen helfen könntet. :wink:
Evtl. ist der titel etwas unglücklich ausgedrückt, mir fällt im augenblick kein passender ein :roll:

mfg Johnny Bravo

DeddyH 7. Jun 2008 10:42

Re: ListBox und Message Box Problem
 
Hallo und Willkommen in der DP :dp: .
Bitte gewöhne Dir an, nur eine Frage pro Thread zu stellen. Zum 1. Problem:
Delphi-Quellcode:
if ListBox.ItemIndex > -1 then
  ShellExecute(Handle,'open',PChar(ListBox.Items[ListBox.ItemsIndex]),PChar(Parameter),nil,SW_SHOW);
Zum 2. Problem: da fehlen ein begin und end. Die kannst Du nur weglassen, wenn danach eine einzelne Anweisung folgt. Das ist bei Dir aber nicht der Fall.

Die Muhkuh 7. Jun 2008 10:43

Re: ListBox und Message Box Problem
 
Hi,

nach Deinen If-Abfragen fehlen auch die Begin und Endblöcke:

Delphi-Quellcode:
if buttonSelected = mrYes then
begin
  ShowMessage('Programm wurde entfernt.');
  Listbox1.Items.Delete(Listbox1.ItemIndex);
end;
Das ist an mehreren Stellen in Deinem Code so.

Desweiteren fehlen beim ersten Code, den Du gepostet hast, die Resourcenschutzblöcke. (try-finally).

An das aktuell ausgewählte Item der ListBox kommst Du über Delphi-Referenz durchsuchenTListBox.ItemIndex dran:

Delphi-Quellcode:
var
  Err: Integer;
begin
  if ListBox.ItemIndex > -1 then
  begin
    Err:= ShellExecute(0,
               Nil,
               PChar(ListBox.Items[ListBox.ItemIndex]),
               Pchar('-Parameter'),
               Pchar('C:\StartDir'),
               SW_NORMAL);
               if Err <= 32 then
    Showmessage(ShellExecuteErrMessage(Err));
  end;
end;
[edit] Im ersten Code ist übrigens noch ein begin zuviel [/edit]

DP-Maintenance 7. Jun 2008 10:47

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Delphi-Frage

Johnny Bravo 7. Jun 2008 11:36

Re: ListBox und Message Box Problem
 
Hi, danke für die antworten, und sorry für die vielen fragen und das falsche unterforum :stupid:

@DieMuhkuh
stimmt, hab ein begin und end zuviel gehabt, thx.

Wenn ich die Datei C:\programm.exe hinzufüge,und über einen anderen button starte, spuckt mit deinem code Shellexecute fehlermeldung 2 aus, Programm wurde nicht gefunden. :gruebel:

@Manuel Rauber

Mit dem Code bekomme ich dieselbe fehlermeldung :cry:

Dafür funktionert jetzt das klicken auf abbrechen, danke :wink:

Die Muhkuh 7. Jun 2008 11:39

Re: ListBox und Message Box Problem
 
Also schizophren bin ich (noch) nicht. Manuel Rauber und Die Muhkuh sind die gleiche Person :mrgreen:

Bist Du auch sicher, dass Du im ShellExecute die zwei Parameter PChar('-Parameter') und PChar('C:\StartDir') richtig angegeben hast?

Wenn Du diese nicht benötigst, ersetze sich mal durch nil

Johnny Bravo 7. Jun 2008 11:47

Re: ListBox und Message Box Problem
 
Lol, hab mich verlesen, sorry :P

Danke, mit nil gehts jetzt.

Mir fällt noch was ein:
wenn ich eine Datei zur listbox hinzufüge, bekomme ich den Kompletten Dateipfad angzeigt. Kann man über eine Messagebox oder ein 2tes Formular realisieren, das man aktuellen pfad der datei angezeigt bekommt, darunter in ein Edit den Namen eingeben kann, der in der Listbox angezeigt wird?

Oder ist das zu aufwendig?

DeddyH 7. Jun 2008 11:49

Re: ListBox und Message Box Problem
 
:wiejetzt: in ein Edit kannst Du alle möglichen Strings eingeben.

Die Muhkuh 7. Jun 2008 11:49

Re: ListBox und Message Box Problem
 
Natürlich geht das, bringt aber etwas mehr Programmieraufwand mit sich. Du musst Daten (bzw. Objekte) an jeden Eintrag hängen, in dem der Pfad zur Datei steht.

Da gab es erst kürzlich einen Thread dazu, den findest Du sicherlich über die Suchfunktion.

Ich würde das ganze mit einem zweiten Formular machen und nicht mit 2 MessageBoxen.

Johnny Bravo 7. Jun 2008 11:54

Re: ListBox und Message Box Problem
 
ich war nur gerade etwas perplex wegen des aufwandes.

dann werde ich mal ein 2tes formular öffnen lassen, danke schonmal.


EDIT:
so das 2te formular lässt sich öffnen problemlos.

Doch wie kann ich dann die daten aus dem Edit im 2ten formular in die Listbox im ersten Formular bekommen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.
Seite 1 von 2  1 2      

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