![]() |
ShellExecute funxt nach OpenDialog nicht
seid gegrüßt!
ich hab eine applikation und eine hilfe geschrieben. die hilfe liegt als chm-datei vor. über ein menüsystemeintrag starte ich die hilfdatei durch shellexecute
Delphi-Quellcode:
nachdem ich aber den opendialog im programm genutzt habe, kann ich die hilfe nicht mehr starten. der befehl wird zwar abgearbeitet, aber er startet die hilfe nicht.
procedure TForm1.Wiegeheichvor1Click(Sender: TObject);
begin ShellExecute(Handle,nil,PChar('Hilfe.chm'), nil,nil,SW_SHOW); end; woran liegt das? wie kann ichs besser machen? beste grüße PAX |
Re: ShellExecute funxt nach OpenDialog nicht
Der "OpenDialog" verändert wahrscheinlich dein Arbeitsverzeichnis.
Mache es so:
Delphi-Quellcode:
[Nachtrag]
PChar(ExtractFileDir(Application.ExeName)+'Hilfe.chm')
Wieder mal blind geschrieben, da ich mein Delphi noch nicht gestartet habe. 1. Ggf. brauchst du eine lokale Variable für den Ergebnisstring 2. Ggf. must du ExtractFilePath und nicht ExtractFileDir nehmen (bin mir nicht sicher) |
Re: ShellExecute funxt nach OpenDialog nicht
Hi,
Du kannst in den Options auch die Option ofNoChangeDir einstellen, sodass das Arbeitsverzeichnis nicht geändert wird, falls Du den Dialog aufrufst. So könntest Du Deinen ursprünglichen Code beibehalten. Ich rate Dir jedoch, den Code von Flocke zu verwenden, der genaugenommen so aussehen muss (@Flocke: ExtractFileDir gibt kein \ am Ende des Pfades zurück, also doch ExtractFilePath ;) ).
Delphi-Quellcode:
mfG
PChar(ExtractFilePath(Application.ExeName) + 'Hilfe.chm')
mirage228 |
Re: ShellExecute funxt nach OpenDialog nicht
Unds ich würde vorschlagen *auf jeden Fall* den Kompletten Pfad zu nehmen. Niemals relative Pfade verwenden! (Außer du hast vor n Russisch-Roulette-Prog zu schreiben. :mrgreen: ) Das Arbeitsverzeichnis kann nämlich auch n anderes Prog verändern und dann hast du n nicht identifizierbaren Bug.
mfg Christian |
Re: ShellExecute funxt nach OpenDialog nicht
Code:
also da gibt es auch 'ne Möglichkeit ein default-directory anzugebn. Versuche sonst mal als vorletzten Parameter dein aktuelles Verzeichnis zu nehmen...
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window LPCTSTR lpOperation, // pointer to string that specifies operation to perform LPCTSTR lpFile, // pointer to filename or folder name string LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters LPCTSTR lpDirectory, // pointer to string that specifies default directory INT nShowCmd // whether file is shown when opened ); |
Re: ShellExecute funxt nach OpenDialog nicht
Flocke und mirage228 haben schon die vollkommen korrekte Lösung gegeben. Alles weiter wäre für mich nur Frickelei.
|
Re: ShellExecute funxt nach OpenDialog nicht
ich weiß garnicht, wie ich euch danken kann... :-D
ich stand unter zeitdruck und ihr habt mir geholfen, es doch noch vernünftig fertig zu bekommen... :cheers: vielen dank, für eure kompetente hilfe. einen angenehmen tag wünsch ich euch! viva los tioz! PAX |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz