| Autor |
Beitrag |
henny
      
Beiträge: 126
|
Verfasst: Sa 04.07.09 12:45
Hallo ich habe jetzt ein Programm geschrieben bei dem wenn man auf einen button drückt ein Programm gestartet wird.
Jetzt will ich aber das der Benutzer meines Programmes per opendialog das Programm das bei einem button klick gestartet wird auswählen kann.
Wie kann ich das machen? Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 05.07.2009 um 00:09
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 04.07.09 13:00
Hallo,
das sollte so gehen:
Delphi-Quelltext 1: 2:
| if OpenDialog1.Execute then ShellExecute(Handle, 'open', PChar(OpenDialog1.FileName), Nil, Nil, sw_ShowNormal ); |
Die Unit ShellApi muss dabei natürlich in die Uses-Liste aufgenommen werden.
_________________ We are, we were and will not be.
|
|
henny 
      
Beiträge: 126
|
Verfasst: Sa 04.07.09 13:09
Ja so hab ichs auch schon probiert aber das funktioniert nicht immer!
Bei word oder so funktioniert das nicht!
Wieso?
Und wie kann ich das Problem beheben?
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 04.07.09 13:13
Was heißt "funktioniert nicht" genau? ShellExecute liefert ja auch einen Wert zurück - wie sieht der aus?
also
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var ret: Integer; if OpenDialog1.Execute then begin ret := ShellExecute(Handle, 'open', PChar(OpenDialog1.FileName), Nil, Nil, sw_ShowNormal ); ShowMessage(IntToStr(ret)); end; |
_________________ We are, we were and will not be.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 04.07.09 13:13
Mit Grundlagen büffeln und sich den Crashkurs anschauen ! 
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 04.07.09 13:28
Wenn ich das ganze jetzt gerade richtig verstehe, dann möchtest Du das in etwa so machen, dass Du einen OpenDialog aufrufst, der den Benutzer auswählen lässt, welches Programm gestartet wird - also in etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure ButtonZuStartendesProgrammAuswaehlenClick(Sender: TObject); begin OpenDialogProgrammAuswahl.Filter :='Anwendungen (*.exe)|*.EXE|Batch-Dateien (*.bat)|*.BAT' if OpenDialogProgrammAuswahl.execute then if FileExists(OpenDialogProgrammAuswahl.FileName) and (ExtractFileExt(OpenDialogProgrammAuswahl.FileName)='.exe' or ExtractFileExt(OpenDialogProgrammAuswahl.FileName)='.bat') then begin Label1.Caption:='Bei Knopfdruck zu startendes Programm:'; Label2.Caption:=OpenDialogProgrammAuswahl.FileName; end; end; procedure ButtonAusgeaehltesProgrammStartenClick(Sender: TObject); begin if not Label2.Caption='' then ShellExecute(Handle, 'open', PChar(Label2.Caption), Nil, Nil, sw_ShowNormal ) else MessageDlg('Sie sollten doch erst mal ein zu startendes Programm auswählen!',mtConfirmation,[mbOK],0); end; |
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 04.07.09 13:42
henny hat folgendes geschrieben : | Hallo ich habe jetzt ein Programm geschrieben bei dem wenn man auf einen button drückt ein Programm gestartet wird.
Jetzt will ich aber das der Benutzer meines Programmes per opendialog das Programm das bei einem button klick gestartet wird auswählen kann.
Wie kann ich das machen? |
ffgorcky hat folgendes geschrieben : | Wenn ich das ganze jetzt gerade richtig verstehe, dann möchtest Du das in etwa so machen, dass Du einen OpenDialog aufrufst, der den Benutzer auswählen lässt, welches Programm gestartet wird - also in etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure ButtonZuStartendesProgrammAuswaehlenClick(Sender: TObject); begin OpenDialogProgrammAuswahl.Filter :='Anwendungen (*.exe)|*.EXE|Batch-Dateien (*.bat)|*.BAT' if OpenDialogProgrammAuswahl.execute then if FileExists(OpenDialogProgrammAuswahl.FileName) and (ExtractFileExt(OpenDialogProgrammAuswahl.FileName)='.exe' or ExtractFileExt(OpenDialogProgrammAuswahl.FileName)='.bat') then begin Label1.Caption:='Bei Knopfdruck zu startendes Programm:'; Label2.Caption:=OpenDialogProgrammAuswahl.FileName; end; end; procedure ButtonAusgeaehltesProgrammStartenClick(Sender: TObject); begin if not Label2.Caption='' then ShellExecute(Handle, 'open', PChar(Label2.Caption), Nil, Nil, sw_ShowNormal ) else MessageDlg('Sie sollten doch erst mal ein zu startendes Programm auswählen!',mtConfirmation,[mbOK],0); end; | |
Andere haben mein Programm geschrieben, gelernt hab ich dabei nicht viel. 
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Sa 04.07.09 16:32
henny hat folgendes geschrieben : | Ja so hab ichs auch schon probiert aber das funktioniert nicht immer!
Bei word oder so funktioniert das nicht!
Wieso?
Und wie kann ich das Problem beheben? |
Als ShellExecute startet schon dein Programm. Wenn es nicht klappt, dann liegt es nicht an ShellExecute, sondern an anderen Gegebenheiten. Entweder ist das Programm nicht da, der Pfad zum Programm ist falsch oder fehlt, oder das Programm wurde nicht korrekt beendet und schwirrt noch im Hintergrund und verhindert einen erneuten Start.
Am besten du benutzt den Code von Gausi und achtest auf die Rückgabezahl.
Damit du nicht permanent Zahlen bekommst die unwichtig sind, machst du am besten eine Abfrage, denn nur Werte unter 32 sind Fehler.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Wert Bedeutung
0 Zuwenig Speicher, ausführbare Datei war zerstört, Relokationswerte waren ungültig. 2 Datei wirde nicht gefunden. 3 Verzeichnis wurde nicht gefunden. 5 Gescheiterter dynamischer Link einer Task oder Fehler beim gemeinsamen Zugriff auf eine Datei im Netz oder Fehler beim Zugriff auf eine gesperrte Datei im Netz. 6 Bibliothek forderte separate Datensegmente für jede Task an. 8 Zuwenig Speicher, um die Anwendung zu starten. 10 Falsche Windows-Version. 11 Ungültige ausführbare Datei. Entweder keine Windows-Anwendung oder Fehler in der EXE-Datei. 12 Anwendung für ein anderes Betriebssystem. 13 Anwendung für MS-DOS 4.0. 14 Typ der ausführbaren Datei unbekannt.
15 Versuch, eine Real-Mode-Anwendung (für eine frühere Windows-Version) zu laden. 16 Versuch, eine zweite Instanz einer ausführbaren Datei mit mehreren Datensegmenten, die nicht als nur lesbar gekennzeichnet waren, zu laden. 19 Versuch, eine komprimierte ausführbare Datei zu laden. Die Datei muß dekomprimiert werden, bevor sie geladen werden kann. 20 Ungültige dynamische Linkbibliothek (DLL). Eine der DLLs, die benötigt wurde, um die Anwendung auszuführen, war beschädigt. 21 Anwendung benötigt Windows-32-Bit-Erweiterungen. 31 Dateinamenserweiterung unbekannt |
_________________ Popov
|
|
|