Das ist ein normales Verhalten von Windows:
siehe lpstrInitialDir
http://msdn2.microsoft.com/en-us/library/ms646839(VS.85).aspx
Wenn nichts angegeben ist, dann wird das aktuelle Verzeichis verwendet.
jetzt das Problem/die Ursache:
allerdings hat Windows da ein globales aktuelles Verzeichnis, welches für alle Programme gilt.
tja und nun nimmt der Dialog nicht zuerst das aktuelle verzeichnis des Programmes, sondern das globale.
und hier noch ein Problem:
gesetzt wird allerdings auch das lokale aktuelle Verzeichnis:
Delphi-Quellcode:
Memo1.Lines.Add(GetCurrentDir);
OpenDialog1.Execute;
Memo1.Lines.Add(GetCurrentDir);
also für alle die gern mit relativen Pfaden (relativ zum aktuellem Verzeichnis) arbeiten ... hier gibt's nette Nebenwirkungen
Lösung(en):
- .InitialDir setzen
- und/oder ein Verzeichnis per .FileName mitgeben
- und beim verwenden von relativen Pfaden aufpassen
@DaddyH:
ExtractFilePath enthält immer den Backslash
(wenn mindestens einer im String ist ... ansonsten ist der ResultString eh leer)
ExtractFileDir enthält keinen