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;