Delphi-PRAXiS

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/)
-   -   Dateiname beim geöffnetem TSaveDialog ändern (https://www.delphipraxis.net/172365-dateiname-beim-geoeffnetem-tsavedialog-aendern.html)

Popov 28. Dez 2012 21:04

Dateiname beim geöffnetem TSaveDialog ändern
 
Wie kann man das Feld Dateiname beim geöffneten TSaveDialog ändern. Damit meine ich TSaveDialog bei/nach Execute. Änderungen an FileName bewirken nichts.

Entweder es gibt einen Schalter für Aktualisierungen den ich übersehen habe oder ich mache etwas falsch.

Alternativ würde es mich interessieren wie man nach Dateityp Änderung dem Dateinamen eine neue Erweiterung geben kann.

bernerbaer 28. Dez 2012 21:50

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
vielleicht hilft Stackoverflow weiter

Popov 29. Dez 2012 09:38

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
War genau das was ich gesucht habe. Danke.

Delphi-Quellcode:
procedure TFormX.SaveDialogTypeChange(Sender: TObject);
const
  WM_USER = $0400;
  CDM_FIRST = WM_USER + 100;
  CDM_SETCONTROLTEXT = CDM_FIRST + $0004;
var
  FName, Ext: string;
begin
  if Sender is TSaveDialog then
    with TSaveDialog(Sender) do
    begin
      if DirectoryExists(FileName) then
        Exit;

      case FilterIndex of
      1: Ext := '.abc';
      2: Ext := '.def';
      else
        Ext := ExtractFileExt(FileName);
      end;

      FName := ExtractFileName(ChangeFileExt(FileName, Ext));
      SendMessage(Windows.GetParent(Handle), CDM_SETCONTROLTEXT, 1152, LongInt(PChar(FName)));
    end;
end;
Nur informationeller, falls es einer weiß - kann mir einer sagen wieso das hier nicht funktioniert?

Delphi-Quellcode:
...
      FileName:= ChangeFileExt(FileName, Ext);
...
      SendMessage...;
    end;
end;
Hier ist keine Änderung an FileName möglich.

terence14 29. Dez 2012 10:13

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
...
SaveDialog1.FileName:= ChangeFileExt(SaveDialog1.FileName, Ext);
...

MfG,
terence

Popov 29. Dez 2012 10:24

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
Daran liegt es nicht, das ist schon mit
Delphi-Quellcode:
with TSaveDialog(Sender) do
abgedeckt. Außerdem habe ich es auch schon so wie du es gemacht hast vorher getestet.

thomasschaf 29. Dez 2012 10:48

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
Delphi-Quellcode:
 SaveDialog1.FileName:= ChangeFileExt(SaveDialog1.FileName, Ext);
Das geht nur wenn der Dialog noch nicht offen ist, also vor dem "Execute"
In dieser Zeile hält das Programm auch an!

if
SaveDlalog1.Execute // in dieser Zeile hält das Programm an und wartet auf eine Aktion des Nutzers
then ShowMessage(SaveDialog.Filename) else Showmessage(Abbruch´'); // Auswertung

Zum Ändern wenn der Dialog offen ist muss man halt wie es der Code, den du gepostet hast, zeigt mit dem OngTypeChange abfangen und dann üver das Handle das Textfeld ermitteln und ändern. Diese Events werden auch ausgelöst wenn der Code eigentlich angehalten ist, wie Auch TTimer.OnTimer

Hoffe das erklärt es :)

Uwe Raabe 29. Dez 2012 10:55

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
Zitat:

Zitat von Popov (Beitrag 1197037)
Nur informationeller, falls es einer weiß - kann mir einer sagen wieso das hier nicht funktioniert?

Delphi-Quellcode:
...
      FileName:= ChangeFileExt(FileName, Ext);
...
      SendMessage...;
    end;
end;
Hier ist keine Änderung an FileName möglich.

Während der Dialog aktiv ist, arbeiten GetFileName und SetFileName nicht konsistent. Beim Lesen wird das aktuelle Handle bemüht, während beim Schreiben die Feld-Variable verwendet wird. Die Änderung wird also in der Feld-Variablen korrekt gespeichert, ein nachfolgendes Lesen holt sich den Wert aber wieder über das Handle. Damit kann die Änderung nicht mehr ausgelesen werden. Das lässt sich also nur mit einer lokalen Variablen lösen.

Popov 29. Dez 2012 13:28

AW: Dateiname beim geöffnetem TSaveDialog ändern
 
Danke. So grob habe ich mir das in die Richtung gedacht, war mir aber nicht sicher.

Zitat:

Zitat von Popov (Beitrag 1197037)
Nur informationeller, ...

Blöde Autokorrektur. Sollte "informationshalber" heißen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.

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