Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Initial Dir bei mehreren Dialogen (https://www.delphipraxis.net/108229-initial-dir-bei-mehreren-dialogen.html)

gnui 9. Feb 2008 10:36


Initial Dir bei mehreren Dialogen
 
Hi, also ich habe 2 open Dialoge. Einen normalen und einen openpicture dialog. Beide haben unterschiedliche initialdirs welche jeweils unterordner vom Hauptprogramm sind. Angegeben habe ich diese zunächst im Objektinspektor mit '.\pfad'. Außerdem habe ich es probiert mit dem Code:

openpicturedialog1.InitialDir := ExtractFilePath(Application.Exename) + '\bilder\';


Mein Problem ist nun aber, wenn ich den einen Dialog öffne ist er im richtigen Verzeichnes, öffne ich den 2. Dialog ist er aber nicht im von mir festgelegten initialdir sondern im Verzeichnis in dem er beim 1. Dialog schon war. Was mach ich denn falsch?

danke schonmal

DeddyH 9. Feb 2008 10:38

Re: Initial Dir bei mehreren Dialogen
 
Gibst Du bei beiden das InitialDir zur Laufzeit an?

Mackhack 9. Feb 2008 10:40

Re: Initial Dir bei mehreren Dialogen
 
Zitat:

Zitat von gnui
Mein Problem ist nun aber, wenn ich den einen Dialog öffne ist er im richtigen Verzeichnes, öffne ich den 2. Dialog ist er aber nicht im von mir festgelegten initialdir sondern im Verzeichnis in dem er beim 1. Dialog schon war. Was mach ich denn falsch?

Gute Frage,

gleiches Problem ich auch immer und wuesste auch gerne warum das so ist! Speicher Windows das wo ab und nutzt dann fuer ein und das Selbe Programm/gleichen OpenDialog immer den zuletzt gewaehlten Folder?

gnui 9. Feb 2008 10:43

Re: Initial Dir bei mehreren Dialogen
 
Zitat:

Zitat von DeddyH
Gibst Du bei beiden das InitialDir zur Laufzeit an?

was meinst du damit? wie gesagt hab ich es im objektinspektor versucht anzugeben und dann nochmal im quellcode selber

DeddyH 9. Feb 2008 10:50

Re: Initial Dir bei mehreren Dialogen
 
Das hier funktioniert bei mir:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
begin
  dlgOpen1.InitialDir := ExtractFilePath(ParamStr(0));
  dlgOpen1.Execute;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
  dlgOpenPic1.InitialDir := 'C:\Windows';
  dlgOpenPic1.Execute;
end;

Mackhack 9. Feb 2008 10:51

Re: Initial Dir bei mehreren Dialogen
 
@DeddyH:

Tut es auch wenn du beide innerhalb eines Buttons aufrufst hintereinander?

DeddyH 9. Feb 2008 10:53

Re: Initial Dir bei mehreren Dialogen
 
Meinst Du so?
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
begin
  dlgOpen1.InitialDir := ExtractFilePath(ParamStr(0));
  dlgOpen1.Execute;
  dlgOpenPic1.InitialDir := 'C:\Windows';
  dlgOpenPic1.Execute;
end;
Funktioniert.

Mackhack 9. Feb 2008 10:56

Re: Initial Dir bei mehreren Dialogen
 
Ok,

aber wenn du das ganze nicht per Code zuweist hast du im 2. OpenDialog den Pfad vom ersten drin. Nun schliesst du das Programm, oeffnest es wieder und dann hast du im ersten OD den Pfad vom 2. OD drin nachdem du den ja zuvor ausgewaehlt und bestaetigt hast!

DeddyH 9. Feb 2008 10:57

Re: Initial Dir bei mehreren Dialogen
 
Das weiß ich, deshalb meine Frage in meinem ersten Post.

Mackhack 9. Feb 2008 11:00

Re: Initial Dir bei mehreren Dialogen
 
Zitat:

Zitat von DeddyH
Das weiß ich, [...]

Und gibts dafuer
1) eine Erklaerung
2) eine Gegenloesung dass das nicht immer vorkommt?

DeddyH 9. Feb 2008 11:03

Re: Initial Dir bei mehreren Dialogen
 
1) Das scheint ein Verhalten von Windows zu sein, kann ich aber nicht belegen
2) Zur Laufzeit setzen, mehr fällt mir nicht ein

gnui 9. Feb 2008 12:01

Re: Initial Dir bei mehreren Dialogen
 
also damit klappt es immernoch nicht. ich habe 2 button für 2 dialoge und immernoch das problem von oben.

gnui 9. Feb 2008 12:05

Re: Initial Dir bei mehreren Dialogen
 
ah alles klar klappt doch, das + '\bilder' war falsch da der \ so doppelt war, also nur + 'bilder'

vielen dank :-D

DeddyH 9. Feb 2008 12:31

Re: Initial Dir bei mehreren Dialogen
 
Tipp für' s nächste Mal:
Delphi-Quellcode:
openpicturedialog1.InitialDir := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'bilder';
So brauchst Du Dir keine Gedanken machen, ob da noch ein Backslash dranhängt, denn der ist immer da ;)

himitsu 9. Feb 2008 16:47

Re: Initial Dir bei mehreren Dialogen
 
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 :zwinker:


Lösung(en):
- .InitialDir setzen
- und/oder ein Verzeichnis per .FileName mitgeben

- und beim verwenden von relativen Pfaden aufpassen


@DaddyH:
Delphi-Referenz durchsuchenExtractFilePath enthält immer den Backslash ;) (wenn mindestens einer im String ist ... ansonsten ist der ResultString eh leer)
Delphi-Referenz durchsuchenExtractFileDir enthält keinen

DeddyH 9. Feb 2008 18:01

Re: Initial Dir bei mehreren Dialogen
 
Zitat:

Zitat von himitsu
ExtractFilePath enthält immer den Backslash Wink (wenn mindestens einer im String ist ... ansonsten ist der ResultString eh leer)
ExtractFileDir enthält keinen

Und damit man sich das nicht merken muss, habe ich den Tipp gegeben ;)

Garfield 17. Feb 2008 16:57

Re: Initial Dir bei mehreren Dialogen
 
Zitat:

Zitat von DeddyH
1) Das scheint ein Verhalten von Windows zu sein, kann ich aber nicht belegen

Unter XP: HKCU\Software\Microsoft\Windows\CurrentVersion\Exp lorer\ComDlg32\OpenSaveMRU

Im Unterverzeichnis \* stehen alle Dateien und dann gibt es weitere Unterverzeichnisse für einzelne Dateierweiterungen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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