![]() |
verhalten von TSaveDialog...
Was mich am SaveDialog schon lange (eigentlich seit Delphi 1.0 ;)) nervt ist, dass bei Auswahl eines neuen Filters zur Laufzeit, die angezeigte Extension des eingegebenen/ausgewählten Dateinamens unverändert bleibt.
In nahezu allen anderen Windows-Programmen ist es quasi Standard, dass bei Auswahl einer neuen Extension, diese auch automatisch an den dateinamen angehängt, bzw. der Dateiname entspr. angepasst wird. :evil: Mache ich eventuell nur etwas falsch, oder hab ich da etwas übersehen? :wall: |
Re: verhalten von TSaveDialog...
Das kann man im OI ändern.
Du musst bei DefaultEx einen Punkt hinmachen. --- Edit --- Kann sein das es nicht klappt, hab überlesen das du das zur laufzeit machst. :oops: |
Re: verhalten von TSaveDialog...
Moin FriFra,
ich kann mich so nur daran erinnern, dass Office Programme das so machen. Ausserdem funktioniert das natürlich nur, wenn wenn der Filter genau eine Extension enthält. Sind es mehrere, oder nicht einfach eine Extension müsste man die neue Extension selber verwalten. Schau Dir doch mal die API GetOpenFilename an, mit speziellem Augenmerk auf das Feld lpfnHook in der OPENFILENAME Struktur. Mit der müsste sich das nachrüsten lassen. |
Re: verhalten von TSaveDialog...
Gerade eben festgestellt. OpenOffice macht das auch nicht.
|
Re: verhalten von TSaveDialog...
Zitat:
Es soll aber die Extension des angezeigten Dateinamens automatisch angepasst werden, wenn ein neuer Filter gewählt wird. Zitat:
Ich habe auch mal folgendes versucht:
Delphi-Quellcode:
Der Code arbeitet korrekt und überschreibt auch den FileName, aber dieser neue FileName wird dann nicht angezeigt...
procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var Tmp, Tmp2: string; n: integer; TmpExt: TStringList; begin if pos('.', SaveDialog1.FileName) > 0 then begin TmpExt := TStringList.Create; Tmp := '|' + Savedialog1.Filter + '||'; n := 0; while pos('|', Tmp) > 0 do begin if n = 2 then n := 0; if n = 0 then begin Tmp2 := copy(Tmp, pos('|', Tmp) + 1, Length(Tmp)); while (Tmp2 <> '') and (copy(Tmp2, 1, 1) <> '|') do Tmp2 := copy(Tmp2, 2, Length(Tmp2)); Tmp := copy(Tmp, 1, pos('|', Tmp) - 1) + Tmp2; end else begin if copy(Tmp, 1, pos('|', Tmp) - 1) <> '' then TmpExt.Add(copy(Tmp, 1, pos('|', Tmp) - 1)); Tmp := copy(Tmp, pos('|', Tmp) + 1, Length(Tmp)); end; n := n + 1; end; Tmp := SaveDialog1.FileName; Tmp2 := ''; while pos('.', Tmp) > 0 do begin Tmp2 := Tmp2 + copy(Tmp, 1, pos('.', Tmp)); Tmp := copy(Tmp, pos('.', Tmp) + 1, Length(Tmp)); end; Tmp := TmpExt[SaveDialog1.FilterIndex - 1]; Tmp := copy(Tmp, pos('.', Tmp) + 1, Length(Tmp)); SaveDialog1.FileName := Tmp2 + Tmp; end; end; |
Re: verhalten von TSaveDialog...
Sry. Dann hab ich deine Frage wohl falsch verstanden. :cry:
|
Re: verhalten von TSaveDialog...
Moin FriFra,
Zitat:
wie gesagt, zumindest bei D5 ist der TSaveDialog nicht darauf ausgelegt eine Hook Prozedur zu verarbeiten. Mit GetOpenFileName könnte das aber klappen. |
Re: verhalten von TSaveDialog...
Zitat:
|
Re: verhalten von TSaveDialog...
|
Re: verhalten von TSaveDialog...
Zitat:
...aber ich weiss immer noch nicht so recht, wie ich das gewünschte Verhalten hinbekomme :(. Mein Versuch den angezeigten Dateinamen zu manipulieren klappt ja nicht... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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