Autor |
Beitrag |
GiO
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 02.10.02 11:59
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
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
GiO 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 136
Win XP
D7 Enterp
|
Verfasst: 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; |
_________________ der wald....der meister....der meister des waldes....der waldmeister
|
|
GiO 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Mi 02.10.02 15:27
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... 
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
GiO 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: Mi 02.10.02 17:41
Ich habe dieses Prob auch gehabt. Ich habe dann für mich folgende Lösung gefunden.
 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.
_________________ MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|