Autor Beitrag
henny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126



BeitragVerfasst: 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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 05.07.2009 um 00:09
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 04.07.09 13:00 
Hallo,

das sollte so gehen:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 126



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 04.07.09 13:13 
Mit Grundlagen büffeln und sich den Crashkurs anschauen ! :wink:
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Sa 04.07.09 13:42 
user profile iconhenny hat folgendes geschrieben Zum zitierten Posting springen:
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?



user profile iconffgorcky hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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. :roll:
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Sa 04.07.09 16:32 
user profile iconhenny hat folgendes geschrieben Zum zitierten Posting springen:
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.


ausblenden 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