Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecute und OpenDialog -> Problem (https://www.delphipraxis.net/95230-shellexecute-und-opendialog-problem.html)

Mazel 3. Jul 2007 16:49


ShellExecute und OpenDialog -> Problem
 
Hallo,

mir ist dieses Problem nicht aufgefallen, aber heute wurde es von einen DP User gefunden. Folgendes: In einem Menü (MainMenu) kann man in die readme.txt einsichten. Doch wenn vorher das OpenDialog geöffnet und eine Datei angenommen wurde, dann kann ich die readme.txt, die ich über ShellExecute öffnen, nicht mehr öffnen.
Delphi-Quellcode:
{--[MMuReadClick]--------------------------------------------------------------} 

procedure TMain.MMuReadClick(Sender: TObject);
begin
if Sender = MMuRead then
  begin
   if OpenDia.Execute then
    begin
      ...
    end;
  end
else if Sender = MMuCopy then
  begin
    ...
  end
else if Sender = MMuExit then Close
else if Sender = MMuInfo then Info.ShowModal
// else ShellExecute(Application.Handle, 'OPEN', 'readme.txt', nil, nil, SW_NORMAL);
else ShellExecute(Application.Handle, nil, 'readme.txt', '', '', SW_NORMAL);
end;
Beide Varianten funktionen zunächst ohne Probleme, doch wie schon erwähnt, geht das nicht mehr wenn das OpenDialog geöffnet ist und eine Datei ausgewählt wurde. Ich nehme an das ShellExecute irgend ein Fehler erzeugt, doch welchen?

Hat jemand einen Rat?

Gruß
Mazel

fwsp 3. Jul 2007 16:53

Re: ShellExecute und OpenDialog -> Problem
 
shellexecute ist doch eine fkt und liefert nen statuscode zurück, werte den doch mal aus. auf luckies seite müsste ein artikel zu den codes sein. und auf dsdt.info auch.

//Edit
http://www.dsdt.info/tipps/?id=422

Bernhard Geyer 3. Jul 2007 16:58

Re: ShellExecute und OpenDialog -> Problem
 
Der Opendialog ändert das aktuelle Directory der Anwedung. Und da du "readme.txt" ohne Pfadangabe aufrufst ist es nicht 100%ig gesagt das die Datei gefunden werden kann.

Mazel 3. Jul 2007 17:00

Re: ShellExecute und OpenDialog -> Problem
 
Ok, Fehlermeldung ist: Datei nicht gefunden.
Nun aber warum ändert das OpenDialog den Pfad der Anwendung? Wenn man das weis ist das ja jetzt kein großes Problem mehr. Trotzdem ist das verwirrend.

Danke euch beiden.

Gruß
Mazel

Matze 3. Jul 2007 17:03

Re: ShellExecute und OpenDialog -> Problem
 
Zitat:

Zitat von Mazel
Nun aber warum ändert das OpenDialog den Pfad der Anwendung?

Das macht er natürlich so nicht direkt. Er ändert lediglich den Arbeitspfad. Beim Nutzen von relativen Pfaden wird nicht aufs Anwendungsverzeichnis, sondern aufs Arbeitsverzeichnis zugegriffen, daher kann die Datei nicht gefunden werden.

Heißt das überhaupt "Arbeitspfad"? :gruebel:

Mazel 3. Jul 2007 17:13

Re: ShellExecute und OpenDialog -> Problem
 
Danke dir Matze für die Info. In Zukunft weis ich bescheid, dass ich gleich aufpasse, wenn ich mit dem OpenDialog arbeite. :wink:

Gruß
Mazel

xZise 3. Jul 2007 18:37

Re: ShellExecute und OpenDialog -> Problem
 
Ich würde gernerell für dynamische Angaben "ExtractFilePath(ParamStr(0){oder auch Application.ExeName})" nehmen.

DeddyH 3. Jul 2007 18:38

Re: ShellExecute und OpenDialog -> Problem
 
Wobei ParamStr(0) ohne die Unit Forms auskommt ;)

Matze 3. Jul 2007 18:46

Re: ShellExecute und OpenDialog -> Problem
 
Zitat:

Zitat von xZise
Ich würde gernerell für relative Angaben "ExtractFilePath(ParamStr(0){oder auch Application.ExeName})" nehmen.

Für absolute Pfade meinst du wohl. Denn relativ ist das nicht mehr. ;)

DeddyH 3. Jul 2007 19:11

Re: ShellExecute und OpenDialog -> Problem
 
Ich denke, er meinte das als Basis für einen relativen Pfad :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr.
Seite 1 von 2  1 2      

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