Autor Beitrag
Lui
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

Win XP, Win 2000, Linux
D7
BeitragVerfasst: Fr 17.01.03 20:10 
Hallo,

sorry wenn ich mich hier in die falsche Sparte poste.

Hab ein kleines Problem.

Hab unter Delphi6 ein progg gemacht was Standartproggz wie Browser, Suchen, "tolle Spiele",usw. über ShellExecute ausführt.

Jetzt unter Delphi7 werden die proggz beim anklicken des entsprechenden buttons doppelt ausgeführt. Es sollte sich aber nur einmal öffnen, wieso macht es das denn auf einmal nicht mehr?

Über eine Antwort wäre ich sehr dankbar!

Hier noch ein "code-Stück":

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.Action15Execute(Sender: TObject);
begin
 ShellExecute(Application.Handle, 'open' ,PChar('explorer.exe'), nil, PChar('C:\WINNT'), sw_ShowNormal);
end;

_________________
Während der C Progga sich fragt wie er es machen soll, fragt der Delphi Progga sich was soll ich machen...
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 18.01.03 01:10 
müsste eigentlich funktionieren...

mach mal das "Pchar" immer weg...

könntest auch folgende Prozedur verwenden:
ausblenden Quelltext
1:
WinExec('C:\MeinPfad\MeinProgramm.exe', 0);					


Fiji-Fighter
Lui Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

Win XP, Win 2000, Linux
D7
BeitragVerfasst: Sa 18.01.03 01:43 
Titel: Trotz WinExec werden die proggs doppelt ausgeführt
Danke für den Tip, so geht's auch...

Nur die Proggz werden trotzdem doppelt ausgeführt.
Woran kann das liegen?

Ich hab keine Ahnung, vielleicht weis ja einer von euch bescheid.

MfG

Lui

_________________
Während der C Progga sich fragt wie er es machen soll, fragt der Delphi Progga sich was soll ich machen...
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 18.01.03 01:44 
dann wird die prozedur wahrscheinlich zweimal aufgerufen...

Fiji-Fighter
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 18.01.03 01:47 
mach mal zum testen nen ganz simples Programm

wo nur einmal bem start oder so einmal winexec/shellexecute aufgerufen wird und guck ob dann auch zwaimal geöffnet wird...

mach mal nen haltepunkt, an der stelle wo das andere Programm ausgeführt wird und schau wie oft der "abgegangen" wird

Fiji-Fighter
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 18.01.03 06:30 
Fiji-Fighter hat folgendes geschrieben:
könntest auch folgende Prozedur verwenden:
ausblenden Quelltext
1:
WinExec('C:\MeinPfad\MeinProgramm.exe', 0);					


Bitte nicht. Diese Funktion wurde von Microsoft als obsolet gekennzeichnet und sollte nicht mehr verwendet werden. Sie existiert nur noch aus Kompatibilitätsgründen und wird in zukünftigen Versionen von Windows wohl nicht mehr unterstützt!
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 18.01.03 11:10 
@ Luckie Danke für die information :wink:

fand ich aber eigentlich schöner diese prozedur, und einfacher zu merken...

naja man kann ja nicht alles haben...

was war denn an der so schlecht, dass sie in zukunft nicht mehr unterstützt wird???

Fiji-Fighter
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Sa 18.01.03 11:29 
Fiji-Fighter hat folgendes geschrieben:
was war denn an der so schlecht, dass sie in zukunft nicht mehr unterstützt wird???

Die Funktion hat einfach ausgedient. Nicht mehr genügend Einstellungsmöglichkeiten... und und und!

Gruß
TINO
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 18.01.03 14:05 
Das sind einfach noch Überbleibsel von Win3.11 Zeiten. Und es wird wohl langsam Zeit, diese mal über Bord zu werfen.
Lui Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

Win XP, Win 2000, Linux
D7
BeitragVerfasst: So 19.01.03 16:20 
Titel: Danke, also mach ich mit ShellExecute weiter...
Ok dann lasse ich das mit dem WinExec mal, aber wieso werden die Programme denn doppelt aufgerufen?

Kann sich das von euch denn keiner erklären?

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.Action15Execute(Sender: TObject);
begin
ShellExecute(Application.Handle, 'open' ,PChar('explorer.exe'), nil, PChar('C:\WINDOWS'), sw_ShowNormal);
end;

_________________
Während der C Progga sich fragt wie er es machen soll, fragt der Delphi Progga sich was soll ich machen...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.01.03 16:28 
An dem von dir geposteten Code liegt es nicht, so wie ich das sehe. Der Code wird bestimmt an anderer Stelle noch mal ausgeführt, da bin ich mir fast zu 100% sicher.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.01.03 18:46 
Titel: Re: Danke, also mach ich mit ShellExecute weiter...
Das denke ich auch, Luckie. Da ist irgendwo der Wurm drin, denn für sich allein wird die Funktion nicht doppelt aufgerufen!

Im übrigen reicht ein einfaches
ausblenden Quelltext
1:
2:
ShellExecute(Application.Handle,'open','c:\windows',
  nil,nil,SW_SHOWNORMAL);

schon aus.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 19.01.03 18:50 
Ach wo wir schon dabei sind, wegen dem richtig machen: "c:\windows" würde bei mir nicht gehen. :roll: Den Ordner gibt es bei mir nämlich nicht.
Lui Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84

Win XP, Win 2000, Linux
D7
BeitragVerfasst: So 19.01.03 19:00 
Titel: Stimmt aber wieso?
Vielen Dank für die Tips und Anregungen!

Zitat:

Im übrigen reicht ein einfaches
Code:
ShellExecute(Application.Handle,'open','c:\windows',
nil,nil,SW_SHOWNORMAL);

schon aus.


Stimmt! Damit öffnet er nur den 'windows' Ordner mit Hilfe des Explorers.

Nur wenn ich eine '*.exe' aufrufe wird der OnExecute Befehl zweimal ausgeführt.

Zitat:

Der Code wird bestimmt an anderer Stelle noch mal ausgeführt, da bin ich mir fast zu 100% sicher.


Stimmt und zwar OnMouse Down und OnMouseUp, habs mal versucht mit gedrückter Maus den button zu verlassen und erst außerhalb loszulassen.
Und schon wurde das Programm nur einmal ausgeführt.

D.h. er führt den OnExecute Befehl tatsächlich zwei mal aus.

Aber wieso erkennt er beide "Mauszustände" (MouseDown und MouseUp) als OnExecute an?

Ich blick da nicht ganz durch...

:(

_________________
Während der C Progga sich fragt wie er es machen soll, fragt der Delphi Progga sich was soll ich machen...