Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi verhalten von TSaveDialog... (https://www.delphipraxis.net/10225-verhalten-von-tsavedialog.html)

FriFra 14. Okt 2003 11:36


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:

citybreaker 14. Okt 2003 11:47

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:

Christian Seehase 14. Okt 2003 12:02

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.

Luckie 14. Okt 2003 12:36

Re: verhalten von TSaveDialog...
 
Gerade eben festgestellt. OpenOffice macht das auch nicht.

FriFra 14. Okt 2003 12:45

Re: verhalten von TSaveDialog...
 
Zitat:

Zitat von citybreaker
Das kann man im OI ändern.
Du musst bei DefaultEx einen Punkt hinmachen.

Das verändert doch das Verhalten des Dialoges nicht in der gewünschten Form! Es legt doch lediglich die Standardextension fest...
Es soll aber die Extension des angezeigten Dateinamens automatisch angepasst werden, wenn ein neuer Filter gewählt wird.


Zitat:

Zitat von Christian Seehase
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.

Bei einem Savedialog macht es aber wenig bzw. überhaupt keinen Sinn, mehrere Extensions zum Speichern zu wählen ;)


Ich habe auch mal folgendes versucht:
Delphi-Quellcode:
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;
Der Code arbeitet korrekt und überschreibt auch den FileName, aber dieser neue FileName wird dann nicht angezeigt...

citybreaker 14. Okt 2003 12:56

Re: verhalten von TSaveDialog...
 
Sry. Dann hab ich deine Frage wohl falsch verstanden. :cry:

Christian Seehase 14. Okt 2003 13:29

Re: verhalten von TSaveDialog...
 
Moin FriFra,

Zitat:

Zitat von FriFra
Bei einem Savedialog macht es aber wenig bzw. überhaupt keinen Sinn, mehrere Extensions zum Speichern zu wählen

auch wieder wahr :wall:

wie gesagt, zumindest bei D5 ist der TSaveDialog nicht darauf ausgelegt eine Hook Prozedur zu verarbeiten.
Mit GetOpenFileName könnte das aber klappen.

FriFra 14. Okt 2003 13:39

Re: verhalten von TSaveDialog...
 
Zitat:

Zitat von Christian Seehase
Mit GetOpenFileName könnte das aber klappen.

Hast Du einen Plan, wie ich diesen Befehl konkret z.B. auf "SaveDialog1" anwenden könnte? Irgendwie hab ich wohl momentan ein Brett vorm Kopf :wall: ...

Luckie 14. Okt 2003 13:51

Re: verhalten von TSaveDialog...
 
http://www.luckie-online.de/tutorial...s_dialog.shtml

FriFra 14. Okt 2003 14:04

Re: verhalten von TSaveDialog...
 
Zitat:

Zitat von Luckie
http://www.luckie-online.de/tutorials/win32apituts/os_dialog.shtml

Danke für die Infos ;)
...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 07:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz