Autor |
Beitrag |
Lui
      
Beiträge: 84
Win XP, Win 2000, Linux
D7
|
Verfasst: 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":
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.
      
Beiträge: 1596
VS 2013
|
Verfasst: Sa 18.01.03 01:10
müsste eigentlich funktionieren...
mach mal das "Pchar" immer weg...
könntest auch folgende Prozedur verwenden:
Quelltext 1:
| WinExec('C:\MeinPfad\MeinProgramm.exe', 0); |
Fiji-Fighter
|
|
Lui 
      
Beiträge: 84
Win XP, Win 2000, Linux
D7
|
Verfasst: 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.
      
Beiträge: 1596
VS 2013
|
Verfasst: Sa 18.01.03 01:44
dann wird die prozedur wahrscheinlich zweimal aufgerufen...
Fiji-Fighter
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: 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
|
Verfasst: Sa 18.01.03 06:30
Fiji-Fighter hat folgendes geschrieben: | könntest auch folgende Prozedur verwenden:
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.
      
Beiträge: 1596
VS 2013
|
Verfasst: Sa 18.01.03 11:10
@ Luckie Danke für die information
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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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
|
Verfasst: 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 
      
Beiträge: 84
Win XP, Win 2000, Linux
D7
|
Verfasst: 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?
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
|
Verfasst: 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
|
Verfasst: 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
Quelltext 1: 2:
| ShellExecute(Application.Handle,'open','c:\windows', nil,nil,SW_SHOWNORMAL); |
schon aus.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 19.01.03 18:50
Ach wo wir schon dabei sind, wegen dem richtig machen: "c:\windows" würde bei mir nicht gehen.  Den Ordner gibt es bei mir nämlich nicht.
|
|
Lui 
      
Beiträge: 84
Win XP, Win 2000, Linux
D7
|
Verfasst: 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...
|
|