Open Dialog erlaubt kein Laden von Pfadangaben
-
Vermutlich bist du im falschen Pfad - gerade bei Windows-Programmen ist es mitunter vorgekommen, daß das Arbeitsverzeichnis ganz woanders liegt als dein Programm.
(Als Lösung könntest du ja mal den absoluten Pfad (d.h. von C:\... an) angeben)
-
Mhh- das hab ich leider auch schon probiert- langsam werd ich mit dem Problem echt verrückt, weil sowas hab ich noch nie erlebt^^
Edit:
Nein- es geht doch, wenn man den kompletten Pfad angibt!!! Doch leider bringt mich das nicht sehr weit, denn das Programm soll später überall laufen
-
Hallo
irgendwie verstehe ich eurer Problem nicht. Warum verwendet ihr nicht einfach
if(open->Execute()) grahintergrund->LoadFromFile(open->FileName);bis bald
akari
-
Wozu rufst du den OpenDialog auf, wenn du dessen Resultat anschliessend nicht nutzt?
if (open->Execute()) grahintergrund->LoadFromFile(open->FileName);Wenn es dir nur um den Verzeichnisnamen geht dann benutze SelectFolder (siehe FAQ unter Dialoge).
-
Hallo
@ Jansen : gut zu wissen das noch jemand anders diesen Thread komisch findet

bis bald
akari
-
Also ich bin bestimmt nicht so gut wie 'akari' oder 'Jansen', aber was ich genau so wenig verstehe ist, warum benutze ich einen Open-Dialog, wenn ich das Resultat dann doch nicht nutze. Den exakten Pfad (mit oder ohne Deateinamen)gibt doch der Dialog zurück.

-
Das ist selbstverständlich nur ein Beispiel- mein Programm benutzt das Resultat auf jeden Fall.
Ich möchte nur, dass nach dem OpenDialogereignis noch andere Programmabläufe passieren (die nichts mehr mit dem Open Dialog zutun haben).
Aber selbst wenn ich diese Ereignisse hinter die geschweifte Klammer schreibe findet er die Datei nur mit kompletter Pfadangabe- genau das ist ja mein Problem.
Das ich Pfadangaben innerhalb des Ereignisblocks komplett ausschreiben muss sobald ich OpenDialog ebenfalls in dem selben Ereignisblock executiere.
-
Hallo
Natürlich liefert TOpenDialog den Dateinamen mitsamt Pfad, anders wäre es Unsinn.
Was du mit dem Ergebnis machst, ist aber die überlassen.
Du must dich schon entscheiden, ob du mit relativen oder absoluten Dateipfaden umgehen willst. Ich seh jedenfalls kein Problem die absoluten zu verwenden.Das ich Pfadangaben innerhalb des Ereignisblocks komplett ausschreiben muss sobald ich OpenDialog ebenfalls in dem selben Ereignisblock executiere.
Warum? Wozu brauchst du den den absoluten Dateipfad, wenn nicht um die Datei zu öffne/bearbeiten/kopieren?
bis bald
akari
-
Ich seh jedenfalls kein Problem die absoluten zu verwenden.
Da seh ich schon ein großes Problem, weil das Programm dann auf einem anderen PC als meinem Fehler bringen wird.
Warum? Wozu brauchst du den den absoluten Dateipfad, wenn nicht um die Datei zu öffne/bearbeiten/kopieren?
Das Laden der Pfadangaben hat nichts mit dem OpenDialog zutun- das einzige, was es mit ihm zutun hat ist, dass sich das executieren des OpenDialoges im selben geschweiften Klammerpaar befindet, wie das laden des Pfades in eine Bitmap.
Meine Ursprungsproblem ist ja einfach, dass ich genau das nicht machen kann.
Ich möchte in meinem eigentlichen Programm im selben Buttonereignis erst eine Datei mit Hilfe des OpenDialoges laden und wenn das gemacht ist später aus einem Pfad ein Bild laden.
Dort muss ich dann absolute Pfadangaben verwenden, was mich stört.
Was vllt das Programm beheben könnte wäre einfach indem ich den absoluten Pfad ermittle und dann in einem String speicher.
Den schreibe ich dann vor die realtive Pfadangabe.
cya
David
-
sorry, aber man kann es auch komplizierter machen als es ist.
Beim Start Deines Programmes bist Du im Programmverzeichnis, sobald Du mit open-dialog etwas öffnest ist der pfad natürlich nicht mehr der selbe.
gefixter absoluter Pfad ist sh... wenn Du das Programm weitergibst.
Ich würde die Bild Datei in den Programm Pfad packen (bzw. Unterordner) den Programm Pfad ermitteln und schon gibt es keine Probleme mehr -> egal wo das Programm steht (Installationsprogramm verwenden) oder das Bild in das Programm compilieren (resource)
-
Ich hab soeben probiert, was du gesagt hast.
Mit der Funktion getCurrentDir() kann ich den momentanen Pfad ermitteln- das tue ich dann bevor ich OpenDialog aufrufe.
Ich speichere diesen Pfad in einem String, den ich dann später als Pfad benutze.
Mein einziges Problem ist jetzt nur noch, dass getCurrentDir() die Pfadangaben falsch zurückgibt.
Es gibt statt "/"-Slashs die "\"-Backslashs zwischen den Verzeichnissen an.
Aus diesem Grund kann ich auch diese Lösung nicht nehmen.
Gibt es keinen geschicken Befehl, dass der Compiler wieder mit relativen Angaben rechnet?
cya
David
-
Wo befindet sich denn die Bild Datei ? Irgendwo im Progammverzeichnis ?
-
Hallo 777
Ich hab das Problem so verstanden das der Opendialog
eine Verzeichnisseigenschaft ändert.Die Eigenschaft TOpenDialog::Options ofNoChangeDir könnte helfen.Eleganter finde ich aber den nächsten Ansatz.
Mit : String Exepfad = ExtractFilePath(Application->ExeName); bekommst Du den Pfad vom Wurzelverzeichniss zu deinem Exeverzeichniss. Da kannst Du noch den relativen Pfad der Bilddatei dranhängen.MfG Schlumpi
-
777 schrieb:
Es gibt statt "/"-Slashs die "\"-Backslashs zwischen den Verzeichnissen an.
Richtig, weil dass die korrekten Pfadangaben unter Windows sind. Abgesehen davon kommt es aber mit beiden zurecht, und zwar sogar gemischt.
-
Richtig, weil dass die korrekten Pfadangaben unter Windows sind. Abgesehen davon
kommt es aber mit beiden zurecht, und zwar sogar gemischt.
Hö? Bei mir geht das aber nicht

Mit :
String Exepfad = ExtractFilePath(Application->ExeName);bekommst Du den Pfad vom Wurzelverzeichniss zu deinem Exeverzeichniss.
Da kannst Du noch den relativen Pfad der Bilddatei dranhängen.Perfekt!
Das löst mein Problem!!!
-
lol
Perfekt!
Das löst mein ProblemDeshalb die Frage wo die Datei ist.Wie schon gesagt, man kann es auch komplizierter machen als es ist. Ich hab da eigentlich nie ein Problem gesehen. Aber vielleicht das nächste Mal direkt etwas genauer das Problem beschreiben und nicht von hinter beginnen.