TSaveDialog Dateinamenerweiterung

Für Fragen von Einsteigern und Programmieranfängern...

TSaveDialog Dateinamenerweiterung

Beitragvon wennerer » 21. Aug 2018, 17:34 TSaveDialog Dateinamenerweiterung

Hallo an Alle,
ich benutze in einem kleinem Programm TSaveDialog zum Speichern. Da ich in verschiedenen Formaten (*.bmp,*.jpg,*.ico) speichern möchte muss ich im Dialog eine Auswahl treffen. Als Standard habe ich *.png definiert und als Filename "Unbenannt.png" eingetragen. Dies funktioniert auch alles einwandfrei, ich kann auch in den verschiedenen Formaten speichern. Was ich nicht hin bekommen (und ich google schon länger) ist das beim Filename der im Editfeld steht die Dateinamenerweiterung angezeigt wird. Also wenn ich z.Bsp. *.bmp anwähle soll Unbenannt.bmp im Editfeld stehen. Hab auch schon mit OnTypChange herum probiert, komme ich aber nicht weiter. Mein System Lazarus 1.6 und Ubuntu 16.04LTS.
Bin für jeden Tipp dankbar.
Viele Grüße!

Code: Alles auswählen
 
  SaveDialog1                  := TSaveDialog.Create(self);
  SaveDialog1.Title           := 'Datei Speichern Unter';
  SaveDialog1.Options      := [ofoverwriteprompt,ofpathmustexist];
  SaveDialog1.FileName   := 'Unbenannt.png';
  SaveDialog1.DefaultExt  := '.png';
  SaveDialog1.Filter          := 'PNG- Dateien (*.png)|*.png|Bitmap- Dateien (*.bmp)|*.bmp|Bild- Datei (*.jpg)|*.jpg|Icons (*.ico)|*.ico';
  SaveDialog1.OnTypeChange := @TypChange;
 
wennerer
 
Beiträge: 22
Registriert: 19. Mai 2015, 19:05
OS, Lazarus, FPC: Ubuntu 16.04, Lazarus 1.6, FPC 3.0.0 | 
CPU-Target: xxBit
Nach oben

Beitragvon Warf » 21. Aug 2018, 18:37 Re: TSaveDialog Dateinamenerweiterung

Denk nicht so kompliziert ;)
Die Option ofExtensionDifferent übernimmt das für dich, denn ungeachtet des Namens, der für mich das gegenteil bedeutet, enforced diese Option die ausgewählte Dateierweiterung
Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon wennerer » 21. Aug 2018, 19:40 Re: TSaveDialog Dateinamenerweiterung

Hi Warf,
danke für deine Antwort. Habe die Option gleich mal probiert. Die Anzeige im Eingabefeld ändert sich aber leider nicht. Vielleicht denke ich aber wirklich zu kompliziert. Ich habe mir eben mal in verschiedenen Programmen wie z. Bsp. LibreOffice den Speichern Unter Dialog angesehen. Dort steht als Vorgabe nur Unbenannt in der Eingabezeile (ohne .odt) und bei Auswahl einer anderen Erweiterung wird auch nichts dazu geschrieben.
Viele Grüße!
wennerer
 
Beiträge: 22
Registriert: 19. Mai 2015, 19:05
OS, Lazarus, FPC: Ubuntu 16.04, Lazarus 1.6, FPC 3.0.0 | 
CPU-Target: xxBit
Nach oben

Beitragvon Warf » 21. Aug 2018, 19:47 Re: TSaveDialog Dateinamenerweiterung

Soweit ich weiß, wenn keine Erweiterung angegeben hast wird sie nicht visuell hinzugefügt, aber wenn im FileName wird bei Klick auf OK die Erweiterung hinzugefügt
Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon Timm Thaler » 22. Aug 2018, 06:40 Re: TSaveDialog Dateinamenerweiterung

Das ist doch normales Verhalten. Wenn ich in anderen Programmen einen Dateinamen eingebe und den Dateityp wechsle, steht die Extension auch nicht unbedingt hinter dem Namen, wird aber beim Bestätigen mit Ok mit übergeben.

Also lass es einfach so.
Timm Thaler
 
Beiträge: 730
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon wp_xyz » 22. Aug 2018, 08:00 Re: TSaveDialog Dateinamenerweiterung

Ist es realistisch überhaupt möglich, dass Dateinamen ohne Endung in die Eingabezeile gelangen? Durch Klicken in der Dateiliste nicht, denn dort stehen sie ja mit Endung und werden genauso in die Eingabezeile übernommen. Durch Eintippen eines Dateinamens? Im Prinzip ja, aber nach dem Eintippen des Dateinamens folgt ENTER bzw Klick auf OK, um den Dialog zu beenden, und da bleibt kein Bedarf mehr, die Endung anzuhängen, weil sich der Dialog sofort schließt.
wp_xyz
 
Beiträge: 2697
Registriert: 8. Apr 2011, 08:01

Beitragvon Warf » 22. Aug 2018, 19:20 Re: TSaveDialog Dateinamenerweiterung

wp_xyz hat geschrieben:Ist es realistisch überhaupt möglich, dass Dateinamen ohne Endung in die Eingabezeile gelangen? Durch Klicken in der Dateiliste nicht, denn dort stehen sie ja mit Endung und werden genauso in die Eingabezeile übernommen. Durch Eintippen eines Dateinamens? Im Prinzip ja, aber nach dem Eintippen des Dateinamens folgt ENTER bzw Klick auf OK, um den Dialog zu beenden, und da bleibt kein Bedarf mehr, die Endung anzuhängen, weil sich der Dialog sofort schließt.


Wie gesagt mit der Option ExtensionDifferent kümmert sich der OpenDialog intern. Wenn keine dateiendung angegeben wurde, wird sie intern hinzugefügt und ist in der FileName property enthalten
Warf
 
Beiträge: 985
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon wennerer » 22. Aug 2018, 20:27 Re: TSaveDialog Dateinamenerweiterung

Vielen Dank allen nochmal für eure Antworten.
Ich habe jetzt nochmal in mehreren Programmen den SpeichernUnter Dialog angesehen und es funktioniert eigentlich überall so wie bei mir jetzt. Ich schreibe ins Editfeld den Dateinamen ohne Endung und kann dann ohne Probleme die neue passende Endung auswählen.
Um zu verstehen wie ich überhaupt darauf gekommen bin muss ich noch kurz erklären was ich machen will. Ich öffne zum Beispiel eine Bitmap-Datei und möchte diese im jpg-Format speichern. Wenn ich jetzt bei der Bitmap-Datei speichern unter mache und im Editfeld des Dialogs steht der Dateiname mit .bmp kann ich nicht als jpg speichern. Ich mus dann erst im Editfeld die Erweiterung handisch löschen und dann geht das Speichern im neuen Format. Wie schon gesagt das ist aber offensichtlich in anderen Programmen (zumindest in Ubuntu) genau so.
Meine Lösung ist jetzt eben wie schon gesagt das ich vor dem Aufruf von SaveDialog die Erweiterung wegnehme und Filename setze.
Code: Alles auswählen
 
 SaveDialog1.FileName:= ChangeFileExt(ExtractFileName(MeinPfad),'');
 SaveDialog1.Execute;
 

Viele Grüße
Bernd
wennerer
 
Beiträge: 22
Registriert: 19. Mai 2015, 19:05
OS, Lazarus, FPC: Ubuntu 16.04, Lazarus 1.6, FPC 3.0.0 | 
CPU-Target: xxBit
Nach oben

Beitragvon MacWomble » 22. Aug 2018, 20:40 Re: TSaveDialog Dateinamenerweiterung

Es gibt doch:

ExtractFileNameWithoutExt(const AFilename: string): string;
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 610
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19 Cinnamon / CodeTyphon Generation V Plan 6.60 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon cle » 25. Aug 2018, 15:52 Re: TSaveDialog Dateinamenerweiterung

Ich habe das vor einigen Jahren mit Delphi unter Win98 so gelöst

Code: Alles auswählen
 
procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
  whandle : HWND;
  flname : String;
begin
  whandle := GetParent(SaveDialog1.Handle);
  flname := ExtractFilename(SaveDialog1.FileName);
  case SaveDialog1.FilterIndex of
     1 : flname := ChangeFileExt(flname, '.bla');
     2 : flname := ChangeFileExt(flname, '.blabla');   
  end;
  SendMessage(whandle, CDM_SETCONTROLTEXT, 1152, lParam(PChar(flname)));
end;
 


Keine Ahnung, ob das mit neueren Win-Versionen noch funktioniert, ist aber vielleicht ein Ansatz für die Suche.
Gruß
Alex
cle
 
Beiträge: 16
Registriert: 31. Jan 2018, 11:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3.0.0) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wennerer » 25. Aug 2018, 16:40 Re: TSaveDialog Dateinamenerweiterung

Hallo Alex,
ja genau so was hätte ich mir vorgestellt. Hab auch schon in die Richtung rumprobiert. Habe aber leider keine Ahnung wie so was in Ubuntu aussehen könnte oder ob sendmessage in Linux überhaupt funktioniert. Trotzdem vielen Dank.
Viele Grüße
Bernd
wennerer
 
Beiträge: 22
Registriert: 19. Mai 2015, 19:05
OS, Lazarus, FPC: Ubuntu 16.04, Lazarus 1.6, FPC 3.0.0 | 
CPU-Target: xxBit
Nach oben

Beitragvon cle » 25. Aug 2018, 17:18 Re: TSaveDialog Dateinamenerweiterung

Ja, habe zu spät gesehen, dass du es für Linux brauchst (das Alter, du weißt ;) )
Im Zweifelsfall kann man sich natürlich auch einen eigenen Dialog schreiben. Das habe ich gerade beim Double Commander (ein Freepascal Projekt) beim Erstellen eines gepackten Archives gesehen. Dort wird die Dateiendung je nach Auswahl von Zip, Rar etc. automagisch geändert.
cle
 
Beiträge: 16
Registriert: 31. Jan 2018, 11:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3.0.0) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 25. Aug 2018, 18:12 Re: TSaveDialog Dateinamenerweiterung

cle hat geschrieben:Dort wird die Dateiendung je nach Auswahl von Zip, Rar etc. automagisch geändert.

Es ist ja gut zu sehen, dass ähnlich wie ich auch andere Leute die Posts nicht genau genug lesen, aber bevor das hier wieder ausufert: die Lösung von Warf gaaaanz oben im 2. Post macht genau das.
wp_xyz
 
Beiträge: 2697
Registriert: 8. Apr 2011, 08:01

Beitragvon cle » 25. Aug 2018, 18:52 Re: TSaveDialog Dateinamenerweiterung

Nein, die Option ändert die Dateiendung vielleicht beim Speichern automatisch, aber die Anzeige im Dialog bleibt gleich. Und genau diese Änderung will Bernd ja.
cle
 
Beiträge: 16
Registriert: 31. Jan 2018, 11:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3.0.0) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 8 Gäste

porpoises-institution
accuracy-worried