AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern
Thema durchsuchen
Ansicht
Themen-Optionen

TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern

Ein Thema von hoika · begonnen am 29. Jul 2009 · letzter Beitrag vom 29. Jul 2009
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern

  Alt 29. Jul 2009, 11:46
Hallo #,

folgender Code wird dem OnTypeChanged eines TSaveDialog zugewiesen,

Delphi-Quellcode:
{ filter type changed }
procedure TForm1.DoCommonExportToXLS_TypeChange(Sender: TObject);
var
  sFileName : String;
  sFileExt : String;
begin
  try
    Assert(ExcelFileDialog<>NIL, 'ExcelFileDialog=NIL');
    if ExcelFileDialog=NIL then Exit;

   // xlsx
    if ExcelFileDialog.FilterIndex=2 then
    begin
      sFileName := ExcelFileDialog.FileName;
      sFileExt := ExtractFileExt(sFileName);
      if sFileExt<>'.xlsxthen
      begin
        sFileName:= ChangeFileExt(sFileName, '.xlsx');
        ExcelFileDialog.FileName:= sFileName; // klappt nicht
      end;
    end;
  except
  end;
end; { TForm1.DoCommonExportToXLS_TypeChange }
In der Hlfe steht es auch schön drin
Zitat:
Programmbedingte Änderungen von FileName haben keine Auswirkungen auf aktive Dialogfelder.
Wozu soll dann das OnTypeChanged überhaupt gut sein ?
Wie kann ich denn nun den Namen doch noch ändern,
ohne gleich gross mit Hooks (?) rumzubasteln
oder wie bei "CheckBox zu TSaveDialog" hinzufügen rumzufummeln.

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern

  Alt 29. Jul 2009, 11:48
Du könntest doch direkt den Text des Eingabefeldes ändern, wenn du das möchtest.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern

  Alt 29. Jul 2009, 11:56
Hallo,

will ich ja

CDM_GETFILEPATH wird zum Ermitteln benutzt,
CDM_SETFILEPATH gibt es aber nicht.

Nun ja, sooo wichtig ist das nun doch nicht.


Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern

  Alt 29. Jul 2009, 13:42
Hallo,

Zitat:
Du könntest doch direkt den Text des Eingabefeldes ändern, wenn du das möchtest
Hm, wie mache ich das, oder anders gesagt:
Kann man davon ausgehen, dass die Handles (Ids) in allen Windows-Versionen gleich sind ?


Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: TSaveDialog, OnTypeChange, FileName zur Laufzeit ändern

  Alt 29. Jul 2009, 14:21
Hallo,

wer lange sucht.

Delphi-Quellcode:
function GetWndText(Ctrl:HWnd): String;
var
  i : Integer;
begin
  Result:= '';

  try
    i:=SendMessage(Ctrl,WM_GETTEXTLENGTH,0,0);
    SetLength(Result,i);
    SendMessage(Ctrl,WM_GETTEXT,i+1,DWord(Result));
  except
  end;
end; { GetWndText }  


procedure TEditGrid.DoCommonExportToXLS_TypeChange(Sender: TObject);
var
  Ctrl : HWnd;
  Item : Longint;
  sFileName : String;
  sFileExt : String;
begin
 { portion from [url]http://newsgroups.derkeiler.com/Archive/De/de.comp.lang.delphi.misc/2007-05/msg00169.html[/url] }
  try
    Item := $47C;

    with (Sender as TSaveDialog) do
    begin
      if FilterIndex=2 then
      begin
       // filter is ".xlsx"

        // Set a new default extension
        // The control with ID=$480 is the Filename edit field
        // Man muss $47C nehmen !!!!!!!!!!!!
        Ctrl:= GetDlgItem(Handle, Item);
        // The following block is necessary due to a bug in Delphi:
        // TSaveDialog.Handle is not always the Handle of the dialog
        if Ctrl=0 then Ctrl:=GetDlgItem(GetParent(Handle), Item);
        if Ctrl=0 then exit;

      // Get its text, change the extension, and write back
        sFileName:= GetWndText(Ctrl);
        sFileExt:= ExtractFileExt(sFileExt);
        if sFileExt<>'.xlsxthen
        begin
          sFileName:= ChangeFileExt(sFileName, '.xlsx');

          SendMessage(Ctrl,WM_SETTEXT,0,DWord(sFileName));
        end;
      end;
    end; { with (Sender as TSaveDialog) do }
  except
  end;
end; { TEditGrid.DoCommonExportToXLS_TypeChange }

      ExcelFileDialog.OnTypeChange:= DoCommonExportToXLS_TypeChange;
Original-Link im Quellcode


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:41 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