{%MainUnit ../dialogs.pp} { TTaskDialogButtonsEnumerator } constructor TTaskDialogButtonsEnumerator.Create(ACollection: TTaskDialogButtons ); begin FCollection := ACollection; FIndex := -1; end; function TTaskDialogButtonsEnumerator.GetCurrent: TTaskDialogBaseButtonItem; begin Result := FCollection[FIndex]; end; function TTaskDialogButtonsEnumerator.MoveNext: Boolean; begin Result := FIndex < FCollection.Count - 1; if Result then Inc(FIndex); end; { TTaskDialogButtons } function TTaskDialogButtons.Add: TTaskDialogBaseButtonItem; begin Result := TTaskDialogBaseButtonItem(inherited Add); end; function TTaskDialogButtons.FindButton(AModalResult: TModalResult ): TTaskDialogBaseButtonItem; begin for Result in Self do if Result.ModalResult = AModalResult then Exit; Result := nil; end; function TTaskDialogButtons.GetEnumerator: TTaskDialogButtonsEnumerator; begin Result := TTaskDialogButtonsEnumerator.Create(Self); end; function TTaskDialogButtons.GetItem(Index: Integer): TTaskDialogBaseButtonItem; begin Result := TTaskDialogBaseButtonItem(inherited GetItem(Index)); end; procedure TTaskDialogButtons.SetDefaultButton( const Value: TTaskDialogBaseButtonItem); begin if Value <> FDefaultButton then FDefaultButton := Value; end; procedure TTaskDialogButtons.SetItem(Index: Integer; const Value: TTaskDialogBaseButtonItem); begin inherited SetItem(Index, Value); end; { TTaskDialogRadioButtonItem } constructor TTaskDialogRadioButtonItem.Create(ACollection: TCollection); begin inherited Create(ACollection); Caption := 'RadioButton'+IntToStr(ID+1); end; { TTaskDialogButtonItem } constructor TTaskDialogButtonItem.Create(ACollection: TCollection); begin inherited Create(ACollection); Caption := 'Button'+IntToStr(ID+1); end; { TCustomTaskDialog } constructor TCustomTaskDialog.Create(AOwner: TComponent); begin inherited Create(AOwner); FButtons := TTaskDialogButtons.Create(Self, TTaskDialogButtonItem); FRadioButtons := TTaskDialogButtons.Create(Self, TTaskDialogRadioButtonItem); FCommonButtons := [tcbOk, tcbCancel]; FDefaultButton := tcbOk; FFlags := [tfAllowDialogCancellation]; FFooterIcon := tdiNone; FMainIcon := tdiInformation; end; function TCustomTaskDialog.ButtonIDToModalResult(const AButtonID: Integer ): TModalResult; begin if AButtonID<100 then Result := AButtonID else if (AButtonID-100 nil then DefRB := RadioButtons.DefaultButton.ModalResult else DefRB := 0; if Buttons.DefaultButton<>nil then DefBtn := Buttons.DefaultButton.ModalResult else DefBtn := TD_BTNMOD[DefaultButton]; for B in Buttons do TaskDlg.Buttons := TaskDlg.Buttons + B.Caption + #10; for B in RadioButtons do TaskDlg.Radios := TaskDlg.Radios + B.Caption + #10; TaskDlg.Title := Caption; TaskDlg.Inst := Title; TaskDlg.Content := Text; TaskDlg.InfoCollapse := ExpandButtonCaption; TaskDlg.Info := ExpandedText; TaskDlg.Footer := FooterText; TaskDlg.Verify := VerificationText; ButtonID := TaskDlg.Execute(TD_COMMONBUTTONS(CommonButtons), DefBtn, TD_FLAGS(Flags), TF_DIALOGICON(MainIcon), TF_FOOTERICON(FooterIcon), DefRB, 0, ParentWnd, False, False, @DoOnButtonClickedHandler); Result := ButtonID>=0; FModalResult := ButtonIDToModalResult(ButtonID); if (TaskDlg.RadioRes>=200) and (TaskDlg.RadioRes-200 '' then Result := FCaption else Result := inherited GetDisplayName; end; procedure TTaskDialogBaseButtonItem.SetCaption(const ACaption: TTranslateString); begin if FCaption = ACaption then Exit; FCaption := ACaption; end; procedure TTaskDialogBaseButtonItem.SetDefault(const Value: Boolean); begin if Value then TaskButtonCollection.DefaultButton := Self else if TTaskDialogButtons(Collection).DefaultButton = Self then TaskButtonCollection.DefaultButton := nil; end; function TTaskDialogBaseButtonItem.TaskButtonCollection: TTaskDialogButtons; begin Result := TTaskDialogButtons(Collection); end;