![]() |
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:
Frage 1:
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; 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:
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.
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; 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 |
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:
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.
if ListBox.ItemIndex > -1 then
ShellExecute(Handle,'open',PChar(ListBox.Items[ListBox.ItemsIndex]),PChar(Parameter),nil,SW_SHOW); |
Re: ListBox und Message Box Problem
Hi,
nach Deinen If-Abfragen fehlen auch die Begin und Endblöcke:
Delphi-Quellcode:
Das ist an mehreren Stellen in Deinem Code so.
if buttonSelected = mrYes then
begin ShowMessage('Programm wurde entfernt.'); Listbox1.Items.Delete(Listbox1.ItemIndex); end; 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-Quellcode:
[edit] Im ersten Code ist übrigens noch ein begin zuviel [/edit]
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; |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Delphi-Frage |
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: |
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 |
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? |
Re: ListBox und Message Box Problem
:wiejetzt: in ein Edit kannst Du alle möglichen Strings eingeben.
|
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. |
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 09:58 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