Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Bei Savedialog - andere Extension wählen Overwriteproblem
GiO - Mi 02.10.02 11:59
Titel: Bei Savedialog - andere Extension wählen Overwriteproblem
Ich verwende unter Delphi 4 einen Savedialog, den ich jetzt um die Möglichkeit erweitern möchte, andere Dateitypen auszuwählen - die Overwrite-Routine wird mittels ofOverwritePrompt vom Dialogfeld selbst gehandelt. Jetzt kommt das Problem - wenn ich nur die Dateierweiterung - nicht aber den Dateinamen ändere (z.B. von *.txt auf *.rtf) , dann erscheint die Meldung
Datei Blabla.txt existiert bereits - möchten sie überschreiben?
.. obwohl ich beabsichtigt hatte den Dateinamen einfach mit der neu gewählten Extension zu versehen. Versuche in SaveDialogTypeChange den Savedialog.Filename zu überschreiben brachten nichts - nur wenn ich explizit hergehe und den Dateinamen nochmal eingebe, übernimmt Filename den "neuen" Namen ...
Wäre für jede Hilfe sehr dankbar ...
mfg Georg
tommie-lie - Mi 02.10.02 14:10
Das Problem tritt bei mir auch auf.
Hmmm. Vermutlich versucht er intern die Datei zu überschreiben. Das ist aber ein ungewöhnliches Verhalten. Ich würde nämlich die Datei opieren und die alte entfernen....
Tritt übrigens auch beim OpenDialog auf, wo es totaler Schwachsinn ist.
Versuch mal das Propeerty "ofNoReadOnlyReturn" auf True zu setzen. Das klappt bei mir. Allerdings weiß ich dnn nicht, was er macht, wenn man dann versucht in eine wirklich schreibgeschützte Datei zu schreiben...
Das müsste man ausprobieren. Aber auf jeden Fall fragt er dann nciht mehr, ob er die Datei überschreiben will, wenn man nur den Namen ändert.
Tschüß
Thomas
GiO - Mi 02.10.02 14:47
.. vielen Dank für die Antwort - aber es löst leider leider mein Problem nicht - wenn ich probehalber mal ofOldStyleDialog auf True setze, dann sieht man besser wo der Hund begraben ist - der ausgewählte Dateiname ändert sich nicht, wenn man die Extension ändert.
Wenn ich nur wüsste, wie man den ausgwhählten Dateinamen ändert, wäre ich aus dem Schneider :-(
waldmeister - Mi 02.10.02 15:02
Ich weiß nicht ob dir das hilft, aber ich kann dir sage wie du ne datei unter anderem namen wieder speicherst, so als würdest du en backup erstellen. die neue dateiendung kannst du frei wählen.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button2Click(Sender: TObject); var FileName,ende: string; begin FileName := 'D:\test.ini'; { set the file name } ende:='.bak'; //Das is das neue dateiende with Memo2.Lines do begin savetofile({ChangeFileExt}(FileName{, ende})); SaveToFile(FileName); { save into backup file } end; end; |
GiO - Mi 02.10.02 15:16
Hmm - waldmeister das hilft mir nicht - ich möchte ja keine laufenden Backups erstellen, sondern einem Benutzer die Wahlmöglichkeit bieten, die Datei unter anderem Dateiformat abzuspeichern, aber ruhig bei gleichbleibendem Namen - genau da tritt das Problem auf, das der im Savedialogausgewählte Name sich nicht ändert, wenn die Extension geändert wird - erst wenn der Name neu eingegeben wird, was natürlich Blödsinn ist den selben Namen nocheinmal hinzuschreiben - dadurch denkt der Savedialog man wolle die alte Datei überschreiben macht die Sicherheitsabfrage und meldet nach Execute den alten Namen.
tommie-lie - Mi 02.10.02 15:27
:idea:
Jetzt weiß ich was du willst. Moment, ich probier' mal ein bisschen rum...
Ich dachte du wolltest einen Namen ändern, wenn du etwas abspeicherst. Man kann ja dann auf einen bereits vorhandenen Dateinamen klicken und diesen dann editieren (zumindest in Windows). Aber jetzt wird mir erst klar, was du wirklich willst... :roll:
GiO - Mi 02.10.02 16:33
... hört sich eigentlich ganz trivial an aber bislang komme ich da echt nicht weiter - kennt jemand den API-Befelhl um in dem Dialog den Dateinamen zu ändern, dann könnte ich mir behelfen, aber da ich schon seit 2 Tagen daran herumhexe werde ich das Ding wohl oder übel selbst basteln um zum Ziel zu kommen - was nützt es denn 5 Tage rumzuprobieren, wenn es aussichtslos ist :-(
Sven - Mi 02.10.02 17:41
Ich habe dieses Prob auch gehabt. Ich habe dann für mich folgende Lösung gefunden.
:idea: Ich habe die Filterliste selber erstellt. Wenn ich jetzt ein anderes Dateiformat Auswähle frage ich anschließend über FilterIndex ab, welcher Dateityp gewählt wurde, und ändere entsprechend die Dateiendung ab.
tommie-lie - Mi 02.10.02 19:41
Hey, ich glaube, ich habe die Lösung:
Der Dialog hat ein Event namns OnTypeChange. Dieses tritt auf, sobald der User den Dateityp aus der Liste ändert.
So. Jezzt braucht man nur noch eine Möglichkeit zu finden, den Dateinamen vom Programm aus zu ändern. Das geht aber nicht mit dem normalen Property FileName, zumindest nicht, wenn das Ding schon geöffnet ist.
Also muss man den Dialog irgendwie künstlich beenden, das Property ändern und dann wieder laden. Das ganze sollte nicht zuviel Zeit auf sich nehmen, damit das schließen und wieder-öffnen des Dialoges nicht auffällt (ggbf ein kleines Flackern).
Wie dieses schließen geht, weiß ich nicht. Hier müssten vielleicht die API-Spezis ran (CodeGuru? LCS? Lucki?) und sagen, wie man ein beliebiges Fenster schließt, ohne die Einstellungen dafür zu verlieren.
Das folgende öffnen kann man dann ja mit SaveDialog.Execute machen.
So würde ich das auf jeden Fall machen. Ist bestimmt einfacher als sich einen ganzen Dialog neu zu basteln...
Tschüß
Thomas
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!