AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TOpenDialog, Datei mit gewählter Extension speichern
Thema durchsuchen
Ansicht
Themen-Optionen

TOpenDialog, Datei mit gewählter Extension speichern

Ein Thema von Thomas78 · begonnen am 4. Nov 2004 · letzter Beitrag vom 5. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
Thomas78

Registriert seit: 8. Jun 2004
Ort: Göda
9 Beiträge
 
#1

TOpenDialog, Datei mit gewählter Extension speichern

  Alt 4. Nov 2004, 07:57
Hallo Leute,

habe ein Problem mit SaveDialog. Ich möchte die ausgewählte Extension an den Dateinamen anhängen, wenn der eingegebene Dateiname keine Erweiterung hat.

z.B.: *.csv *.txt *.xlc als Auswahl
wurde jetzt der Dateiname 'test' eingegeben und in der Combobox *.txt gewählt, so soll die Datei auch als test.txt gespeichert werden. Ich bekomme aber nicht raus, was für ne Extension gewählt wurde. FilterIndex wird ja nur beim Öffnen des Dialogs ausgelesen.
Hat jemand nen Ansatz

MfG

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 4. Nov 2004, 08:26
Zitat von Thomas78:
Hat jemand nen Ansatz
Setz das Property Default-Extension. Dann hat die Datei AFAIK immer eine Extension.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 4. Nov 2004, 11:58
Wenn du als Filter immer nur eine Datei-Endung angegeben hast, dann funktioniert folgendes:
Delphi-Quellcode:
function GetExtension(const Filter: string; const Index: Integer): string;
var
  List: TStrings;
begin
  Result := '';
  List := TStringList.Create;
  try
    List.Delimiter := '|';
    List.DelimitedText := Filter;
    Result := ExtractFileExt(List[Pred(Index*2)]);
  finally
    FreeAndNil(List);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    ShowMessage(ChangeFileExt(SaveDialog1.FileName,
     GetExtension(SaveDialog1.Filter, SaveDialog1.FilterIndex)));
end;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Thomas78

Registriert seit: 8. Jun 2004
Ort: Göda
9 Beiträge
 
#4

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 08:59
Hallo Stevie

danke für deinen Tip, aber ich habe ja mehrere Dateiendungen zur Auswahl (*.csv *.txt *.xlc). Die ausgewählte Extension (z.B.: *.xlc) will ich dann erkennen. Bei einigen Anwendungen wird sogar zur Laufzeit des Dialoges sofort die Extension an den eingegebenen Dateinamen angehangen, wenn man eine Endung auswählt.

Fazit:
Die Variante mit der DefaultExt ist für meine Anwendung unbrauchbar.
Deine Lösung macht ja im Prinzip das selbe, sie gibt auch nur die 1.Extension (der auswählbaren) zurück. Ich denke jedenfalls, dass es so funktionieren soll, denn ich hab Delphi5Prof. und da musste ich die Trennung des Filter-Strings manuell vornehmen. Meine Variante von TStringList unterstützt "Delimiter" und "DelimitedText" noch nicht.

Gibts andere Lösungsvorschläge für mein Problem?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 09:08
Hallo Thomas,
Zitat von Thomas78:
Hallo Stevie

danke für deinen Tip, aber ich habe ja mehrere Dateiendungen zur Auswahl (*.csv *.txt *.xlc). Die ausgewählte Extension (z.B.: *.xlc) will ich dann erkennen. Bei einigen Anwendungen wird sogar zur Laufzeit des Dialoges sofort die Extension an den eingegebenen Dateinamen angehangen, wenn man eine Endung auswählt.
So meinte ich das nicht. Es gibt Fälle, wo für einen Filter mehrere Erweiterungen angeboten werden (z.B. *.jpg; *.jpeg) und dann würde meine Lösung nicht funzen!
Zitat:
Die Variante mit der DefaultExt ist für meine Anwendung unbrauchbar.
Deine Lösung macht ja im Prinzip das selbe, sie gibt auch nur die 1.Extension (der auswählbaren) zurück. Ich denke jedenfalls, dass es so funktionieren soll, denn ich hab Delphi5Prof. und da musste ich die Trennung des Filter-Strings manuell vornehmen. Meine Variante von TStringList unterstützt "Delimiter" und "DelimitedText" noch nicht.
Such mal in der Code-Lib nach der Funktion Explode, ich meine, die wird die beim String-Zerlegen helfen.

MfG
Stevie
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#6

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 10:28
Keine Ahnung ob ich dich richtig verstanden habe aber evtl. hilft dir Delphi-Referenz durchsuchenExtractFileExt bzw. Delphi-Referenz durchsuchenChangeFileExt weiter.
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 10:31
Zitat von TeronG:
Keine Ahnung ob ich dich richtig verstanden habe aber evtl. hilft dir Delphi-Referenz durchsuchenExtractFileExt bzw. Delphi-Referenz durchsuchenChangeFileExt weiter.
Guck mal, was im dritten Post von oben steht.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#8

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 10:37
uuppsss sorry Asche auf mein Haupt
also DOCH erst lesen dann schreiben .
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Thomas78

Registriert seit: 8. Jun 2004
Ort: Göda
9 Beiträge
 
#9

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 13:13
So Stevie

habs nochma mit deiner Variante und der Explode-Funktion probiert. Es wird bei mir definitiv immer nur die erste mögliche Extension angehangen. Ich schicke hier mal den Code, damit wir den gleichen Stand haben:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  AgOpenDialog, StdCtrls;

type
  TStringDynArray = array of string;
type
  TForm1 = class(TForm)
    Button1: TButton;
    AgSaveDialog1: TAgSaveDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function GetExtension(Filter: string; const Index: Integer): string;
    function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function TForm1.Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = 'then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;



function TForm1.GetExtension(Filter: string; const Index: Integer): string;
var
  List: TStrings;
  i:integer;
  Teile: TStringDynArray;
begin
  Result := '';
  List := TStringList.Create;
  try
    Teile:=Explode('|', Filter);
    for i:=0 to Length(Teile)-1 do
      List.Add(Teile[i]);
    Result := ExtractFileExt(List[Pred(Index*2)]);
  finally
    FreeAndNil(List);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AGSaveDialog1.Filter:='Text-Dateien (*.txt)|*.TXT|Excel-Dateien (*.xls)|*.XLS|dBase-Dateien (*.dbf)|*.DBF|Bitmap-Dateien (*.bmp)|*.BMP|Meta-Dateien (*.wmf)|*.WMF';
  if AgSaveDialog1.Execute then
    ShowMessage(ChangeFileExt(AgSaveDialog1.FileName,
     GetExtension(AgSaveDialog1.Filter, AgSaveDialog1.FilterIndex)));

end;

end.
Deine Funktion greift aber auch auf den FilterIndex zurück, welcher ja vom Dialog nicht verändert wird.

Guck mal bitte drüber... Danke.

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: TOpenDialog, Datei mit gewählter Extension speichern

  Alt 5. Nov 2004, 13:22
Bei mir klappt's, allerdings benutzte ich nicht diesen TAgSaveDialog, sondern TSaveDialog!
Das - so vermute ich - ist dein Problem...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 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