Autor Beitrag
stigge
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Sa 06.01.07 00:25 
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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Sa 06.01.07 00:42 
Also falsch sind auf jeden fall deine Anführungsstriche für die Strings. die gehen so: ' und nicht ´

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19316
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 06.01.07 03:12 
user profile iconJakob Schöttl hat folgendes geschrieben:
ausblenden 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... ;-)
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 929
Erhaltene Danke: 1


Delphi 7 Professional
BeitragVerfasst: Sa 06.01.07 13:36 
user profile iconjaenicke hat folgendes geschrieben:
user profile iconJakob Schöttl hat folgendes geschrieben:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: Sa 06.01.07 15:20 
Ich benutze meistens auch den Errorcode, den ShellExecute zurückgibt:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19316
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 =
ausblenden Delphi-Quelltext
1:
if edit1.text = 'testtext' then					
stigge Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: So 07.01.07 12:47 
Also mein momentaner Quelltext ist:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 70

Win XP Pro
Delphi 7 PE+Indy
BeitragVerfasst: So 07.01.07 15:24 
Versuchs mal so:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 426

WinXP
Delphi 2007
BeitragVerfasst: Mo 08.01.07 14:06 
Jo klappt jetzt, danke für die Hilfe.
Bis demnächst,

Stigge