![]() |
TFileOpenDialog ableiten mit DoOnFileOkClick
Hi,
mit Delphi 10.4.2 leite ich eine eigene TExtFileOpenDialog von ![]() ![]()
Delphi-Quellcode:
Ich bin mir gar nicht sicher ob die ursprüngliche DoOnFileOkClick nicht auch tot ist...
uses Vcl.Dialogs;
... TExtFileOpenDialog = class(TFileOpenDialog) protected function DoOnFileOkClick: Boolean; override; end; ... function TExtFileOpenDialog.DoOnFileOkClick: Boolean; begin showmessage('hier bin ich'); Result := inherited; end; Einen schönen Sonntag! |
AW: TFileOpenDialog ableiten mit DoOnFileOkClick
.. aus der
![]() so funktioniert es.
Delphi-Quellcode:
type
TExtFileOpenDialog = class(TFileOpenDialog) private protected function DoOnFileOkClick: Boolean; override; public end; procedure TForm1.Button1Click(Sender: TObject); begin fFileOpenDialog := TExtFileOpenDialog.Create(nil); try fFileOpenDialog.OnFileOkClick := onFileOkClick; // wenn hier nichts zugewiesen wird, wird doFileOnClick nicht ausgeführt. fFileOpenDialog.Execute; finally fFileOpenDialog.Free; end; end; procedure TForm1.onFileOkClick(sender: TObject; var canClose: Boolean); begin showMessage('---test---'); canClose := true; end; { TExtFileOpenDialog } Im Prinzip bräuchte man dann nicht die doOnFilOkClick Methode überschreiben, sondern nur ein entsprechendes Ereignis zuweisen. Grüße Klaus function TExtFileOpenDialog.DoOnFileOkClick: Boolean; begin showMessage('123'); end; |
AW: TFileOpenDialog ableiten mit DoOnFileOkClick
Zitat:
|
AW: TFileOpenDialog ableiten mit DoOnFileOkClick
Ah.. danke für den Hinweis. Das klärt es natürlich.
Für's Ableiten hatte ich wohl erwartet dass DoOnFileOkClick auch ausgeführt wird, wenn der Caller kein OnFileOkClick Event zugewiesen hat. Ich weise jetzt in dem Fall einen Dummy-Event zu. Untenstehend mal die ganze Implementierung, damit man sieht wofür das ganze. Es wird eine Combobox zur Auswahl eines Encodings erzeugt, und in DoOnFileOkClick wird dessen ausgewählter Eintrag ausgelesen:
Delphi-Quellcode:
constructor TExtFileOpenDialog.Create(AOwner: TComponent);
begin inherited Create(AOwner); FEncodings := TStringList.Create; FEncodingIndex := 0; end; destructor TExtFileOpenDialog.Destroy; begin FEncodings.Free; inherited; end; procedure TExtFileOpenDialog.DoOnExecute; var iCustomize: IFileDialogCustomize; i: Integer; begin // Add encodings selector if Dialog.QueryInterface(IFileDialogCustomize, iCustomize) = S_OK then begin iCustomize.StartVisualGroup(0, PChar(_('Encoding:'))); try // note other controls available: AddCheckButton, AddEditBox, AddPushButton, AddRadioButtonList... iCustomize.AddComboBox(idEncodingCombo); for i:=0 to FEncodings.Count - 1 do begin iCustomize.AddControlItem(idEncodingCombo, i, PChar(FEncodings[i])); end; iCustomize.SetSelectedControlItem(idEncodingCombo, FEncodingIndex); if not Assigned(OnFileOkClick) then OnFileOkClick := FileOkClickNoOp; finally iCustomize.EndVisualGroup; end; end; end; procedure TExtFileOpenDialog.FileOkClickNoOp(Sender: TObject; var CanClose: Boolean); begin // Dummy procedure, just makes sure parent class calls DoOnFileOkClick end; function TExtFileOpenDialog.DoOnFileOkClick: Boolean; var iCustomize: IFileDialogCustomize; begin Result := inherited; if Dialog.QueryInterface(IFileDialogCustomize, iCustomize) = S_OK then begin iCustomize.GetSelectedControlItem(idEncodingCombo, FEncodingIndex); end; end; |
AW: TFileOpenDialog ableiten mit DoOnFileOkClick
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz