OpenDialog Initial Directory Problem
-
Hallo
kann das was damit zutun haben
Opendialog->InitialDir = "c:\"Opendialog->InitialDir = "c:\\"Mfg
Klaus
-
Hi,
unwahrscheinlich ... wäre es so, würde er einen Syntaxfehler bekommen (Nicht abgeschlossene String- oder Zeichen-Konstante, In Anweisung fehlt ;).
Durch \" hebst du die Funktionalität des abschließenden " auf. Deswegen dann auch der Fehler. Aber sein Programm läuft ja soweit, es setzt halt nur immer auf C:\ zurück.
mfg, Micha!
-
erstmal danke für die Antworten.
hat nix mit flash oder doppel flash zu tun, wie gesagt, wenn ich InitialDir abfrage, ist es richtig ! Und wenn ich ein neues Projekt starte und benutze den gleichen Syntax, funktioniert es bei mir auch. Hatte es früher schon einmal mit einer zusätzlich installierten Komponente und dachte es war die Komponente. Habe das Gefühl, wenn man mehrere OpenDialoge benutzt und das Program recht groß ist, läuft dann beim BCB irgendwie bei bestimmten Situationen etwas falsch. keine Ahnung, werde mal noch einige Varianten durchprobieren.
-
Hi,
vielleicht fehlt auch einfach nur irgendwo ein "Form1" oder "Form2" ... bei sehr großen Projekten können solche Flüchtigkeitsfehler schonmal passieren :-)!
mfg. Micha!
-
lol, nein.
das komische ist, wenn ich gleich nach dem öffnen vom Programm auf die Form2 gehe und ändere den Pfad, dann klappt es, nur wenn ich vorher den OpenDialog schon mal geöffnet hatte, nicht mehr.
Habe nun einiges probiert auch mit Umbenennung usw., aber kein Erfolg. Bin mir fast sicher es ist ein bug.
man stelle sich vor, direkt for dem öffnen Befehl zeigt es den richtigen Pfad, aber es kommt das falsche Directory.
void __fastcall TForm1::Open1Click(TObject *Sender) { ShowMessage(OpenDialog->InitialDir); if(OpenDialog->Execute()) { // irgendein code } }
-
OldMan00 schrieb:
[...] nur wenn ich vorher den OpenDialog schon mal geöffnet hatte, nicht mehr.
Arbeitsverzeichnis geändert!?
Was gibt GetCurrentDir zurück?ShowMessage(OpenDialog->InitialDir); Caption = GetCurrentDir(); if(OpenDialog->Execute()) ...InitialDir wird nur nur beim allerersten Aufruf des Dialogs ausgewertet.
-
Jansen schrieb:
InitialDir wird nur nur beim allerersten Aufruf des Dialogs ausgewertet.
ah, dann ist es ja nur normal. Danke !
gibt es eine andere Möglichkeit dies zu ändern ?Jansen schrieb:
Arbeitsverzeichnis geändert!?
natürlich, deswegen ist es ja so. Hatte aber auch probiert das Arbeitsverzeichnis und den InitialDir gleichermaßen zu ändern. Welche Möglichkeit habe ich dann dieses Problem zu lösen ?
-
Ich verstehe nicht wirklich, was dein Problem eigentlich ist.
Wenn du bei jedem Aufruf des Dialog im selben Verzeichnis starten willst dann musst du vorher das Arbeitsverzeichnis entsprechend setzen. Oder du erstellst den OpenDialog bei jedem Aufruf dynamisch zur Laufzeit neu (und löschst ihn anschliessend gleich wieder), dann sollte jedesmal das InitialDir gelten.Allerdings widerspricht der Ansatz m.E. etablierten GUI-Richtlinien; der Anwender erwartet üblicherweise, dass ein Datei-Dialog sich beim wiederholten Aufruf das letzte Verzeichnis "merkt".
-
Jansen schrieb:
Ich verstehe nicht wirklich, was dein Problem eigentlich ist.
Das Problem besteht darin, daß ich durch eine Option (Schalter) zwischen zwei verschiedenen Verzeichnissen hin und her schalten möchte und nicht immer per Hand zwei vielleicht weit auseinanderliegende Verzeichnisse suchen muß. (kann sehr nervig sein) und ich dachte das mit InitialDir verwirklichen zu können. (ohne mehrere OpenDiologe auf die Form zu setzen.) Es muß doch irgendwie ne Möglichkeit geben OpenDialog zur Laufzeit anzuweisen in einem bestimmten Pfad zu öffnen und später dann auch zu wechseln.
-
Hallo
Genau das macht doch InitialDir. Du must eben nach jedem Execute wie schon gezeigt den letzten Pfad auslesen und beim nächsten Open wieder InitialDir zuweisen. Wenn du dann zwei verschiedene methodenübergreifende Zwischenspeicher für je einen logischen OpenDialog nimmst, kannst du jeden logischen OpenDialog auch immer ein eigenes InitialDir zuweisen.
bis bald
akari
-
Ich weiß jetzt zwar nicht, ob wir aneinander vorbei reden, aber deshalb frage ich ja, da ich auch dachte InitialDir macht das. Es macht es aber nicht, auch nicht wenn ich vornweg mit SetCurrentDir(xxx) und InitialDir das Verzeichnis setze.
-
akari schrieb:
Du must eben nach jedem Execute wie schon gezeigt den letzten Pfad auslesen und beim nächsten Open wieder InitialDir zuweisen.
Wie schon gesagt, meinen Tests zufolge wird InitialDir im Programmverlauf nur ein einziges Mal ausgewertet, eben beim ersten Aufruf des Dialogs. Anschliessend kommt nur noch das CurrentDir zum Zug.
Ich habe gerade noch mit TOpenDialog::Options::ofNoChange herumprobiert, aber das scheint keine Wirkung zu haben.
Edit:
Hmmm, SetCurrentDir wird tatsächlich auch ignoriert. Und der zuletzt gewählte Pfad bleibt auch über einen Neustart des Programmes erhalten, also wird der wohl automatisch irgendwo in der Registry abgelegt werden.
-
Lösung: die FileName-Property zurücksetzen, dann wird auch das neue gesetzte InitialDir ausgewertet.
-
Jansen schrieb:
Lösung: die FileName-Property zurücksetzen, dann wird auch das neue gesetzte InitialDir ausgewertet.
ok danke, hab es jetzt zwar noch nicht probiert, aber ich gehe davon aus, daß es funktionier.
-
funktioniert!!
wieder etwas gelernt 
danke nochmals
-
OldMan00 schrieb:
wieder etwas gelernt

Ich auch.

-
Hallo,
Man muß doch nur InitialDir vor Execute setzen (und das jedesmal, wenn sich das Verzeichnis ändern soll) und dann geht's :
OpenDialog1->InitialDir = "C:\\"; if (OpenDialog1->Execute()) { }Nash
-
Nash schrieb:
[...] dann geht's
Eben nicht. Wenn FileName einen Wert enthält, dann wird InitialDir ignoriert.
-
Hallo,
Oops... Tatsache...
Das kommt davon, wenn man mal so nebenbei antwortet.
Da ich FileName meistens gesetzt hatte (auf die gewünschte Datei), ist mir das nicht aufgefallen.Nash