Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Shellexecute und If


stigge - Sa 06.01.07 00:25
Titel: Shellexecute und If
Also hier bin ich mal wieder^^.
Dieses Mal lautet meine Frage:

Wie kann ich es machen, das wenn in edit1.text "testwort" steht es mir das Programm C:\winrar.exe ausführt? Ich habe schon selber rumprobiert, aber es klappt noch nicht.


Delphi-Quelltext
1:
2:
3:
4:
5:
...shellapi...

edit1.onchange (so ungefähr)
if edit1.text := ´testwort´ then
shellexecute (handle, ´winrar.exe´, ´C:\´, nil, Sw_Normal)


Jemand Ahnung was falsch ist?
Und am besten wäre natürlich der funktionierende Quellcode^^.

Danke im voraus,

Stigge

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Jakob Schöttl - Sa 06.01.07 00:42

Also falsch sind auf jeden fall deine Anführungsstriche für die Strings. die gehen so: ' und nicht ´


Delphi-Quelltext
1:
if Edit1.Text = 'testwort' then shellexecute (handle, 'c:\programme\winrar\winrar.exe'nil{´C:\´}nil, Sw_Normal);                    


für was hast du denn als dritten Parameter das Laufwerk C eingegeben?

Außerdem weiß ich nicht, ob winrar.exe ausgeführt wird, wenn du bloß den Dateinamen und nicht den ganzen Pfad angibst!

Ach ja, und Edit1.OnChange brauchst du nicht aufzurufen! Das wird doch schon vom Edit1 selber aufgerufen, worauf hin deine Procedure Edit1Change(Sender: TObject) aufgerufen wird.


jaenicke - Sa 06.01.07 03:12

user profile iconJakob Schöttl hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
if Edit1.Text = 'testwort' then 
  shellexecute (handle, 'c:\programme\winrar\winrar.exe'nil{´C:\´}nil, Sw_Normal);

ShellExecute erwartet einen Parameter mehr... ;-)

Delphi-Quelltext
1:
2:
if Edit1.Text = 'testwort' then 
  shellexecute (handle, 'open''c:\programme\winrar\winrar.exe'nil{´C:\´}nil, Sw_Normal);


Und was du nicht erwähnt sondern stillschweigend korrigiert hast: Das := ist eine Zuweisung, in der if-Abfrage sollen aber die beiden Werte verglichen werden. Und das geht mit einem einfachen Gleichheitszeichen ohne den Doppelpunkt. Das wollte ich dann mal noch dazusagen...


Jakob Schöttl - Sa 06.01.07 13:36

user profile iconjaenicke hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
if Edit1.Text = 'testwort' then 
  shellexecute (handle, 'c:\programme\winrar\winrar.exe'nil{´C:\´}nil, Sw_Normal);

ShellExecute erwartet einen Parameter mehr... ;-)


Achja, naja, sowas kann man mal vergessen...

user profile iconjaenicke hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
if Edit1.Text = 'testwort' then 
  shellexecute (handle, 'open''c:\programme\winrar\winrar.exe'nil{´C:\´}nil, Sw_Normal);


Und was du nicht erwähnt sondern stillschweigend korrigiert hast: Das := ist eine Zuweisung, in der if-Abfrage sollen aber die beiden Werte verglichen werden. Und das geht mit einem einfachen Gleichheitszeichen ohne den Doppelpunkt. Das wollte ich dann mal noch dazusagen...


Das hab ich übersehen, sonst hätte ich es auch noch dazugeschrieben :)

Hoffentlich gehts jetzt bei user profile iconstigge...


aim65 - Sa 06.01.07 15:20

Ich benutze meistens auch den Errorcode, den ShellExecute zurückgibt:

Delphi-Quelltext
1:
2:
3:
if edit1.text := 'testwort' then
  if ShellExecute(Handle,'Open','...\winrar.exe',nil,nil,SW_SHOW)
     = SE_ERR_FNF then  //....Errormeldung, z.B. '...nicht gefunden'
:)


stigge - Sa 06.01.07 22:30

Also der Text war kurz von Hand eingetippt, also ich habe schon ' benutzt.
'open' habe ich auch vergessen hier einzutippen.
*mist*e.....
Aber meine eigentliche Frage war:

Wie verwendet man die shellexecute-funktion in Verbindung mit if.
Also
if edit1.text := 'testtext' then
shellexecute (handle, 'open', 'winrar.exe', 'C:\', nil, SW_NORMAL);


Warum funktioniert das nicht?
Ich versteh's nicht.


jaenicke - Sa 06.01.07 22:34

Das hat nix mit dem Befehl ShellExecute zu tun... Das habe ich doch aber bereits gesagt!!
user profile iconjaenicke hat folgendes geschrieben:
Das := ist eine Zuweisung, in der if-Abfrage sollen aber die beiden Werte verglichen werden. Und das geht mit einem einfachen Gleichheitszeichen ohne den Doppelpunkt. Das wollte ich dann mal noch dazusagen...


Du willst etwas vergleichen und nicht etwas zuweisen! Also nicht := sondern =

Delphi-Quelltext
1:
if edit1.text = 'testtext' then                    


stigge - So 07.01.07 12:47

Also mein momentaner Quelltext ist:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1Change (Sender: TObject);
begin
if edit1.text = ´123456´ then
shellexecute (handle, ´open´, ´winrar.exe´, ´C:\´, nil, SW_SHOWNORMAL);
end;


Also ich habe im original Quelltext schon die richtigen ´ benutzt. Finde das Zeichen auf meinem PPC aber nicht und ich kann momentan nur damit ins Netz.(so nebenbei)
Das Programm lässt sich auch starten aber wenn ich dann 123456 eingegeben habe passiert nichts. Warum?
Ich habe das ganze shellexecute-zeug schon durch close ersetzt und damit gehts. Shellapi ist auch eingebunden!

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt


aim65 - So 07.01.07 12:51

Sieh Dir doch mal das Beispiel von Jaenicke genau an - speziell den Pfad zur Datei.
Wieso hast Du denn immer noch das "C:\" zusätzlich hinter dem Dateinamen?


MarkusBauer - So 07.01.07 15:24

Versuchs mal so:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1Change (Sender: TObject);
begin
if edit1.text = '123456' then
shellexecute (Application.handle, 'open''C:\winrar.exe''C:\'''SW_NORMAL);
end;


stigge - Mo 08.01.07 14:06

Jo klappt jetzt, danke für die Hilfe.
Bis demnächst,

Stigge