Sfoglia il codice sorgente

Update MsgBoxDesigner for the TaskDialogMsgBox change.

Martijn Laan 2 mesi fa
parent
commit
f930058791

+ 34 - 18
Projects/Src/IDE.MsgBoxDesignerForm.dfm

@@ -25,7 +25,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Width = 50
     Width = 50
     Height = 14
     Height = 14
     Caption = 'Instruction'
     Caption = 'Instruction'
-    TabOrder = 11
+    TabOrder = 12
   end
   end
   object TaskInstructionText: TEdit
   object TaskInstructionText: TEdit
     Left = 89
     Left = 89
@@ -41,7 +41,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Width = 49
     Width = 49
     Height = 14
     Height = 14
     Caption = 'Message'
     Caption = 'Message'
-    TabOrder = 12
+    TabOrder = 13
   end
   end
   object TaskMessageText: TEdit
   object TaskMessageText: TEdit
     Left = 89
     Left = 89
@@ -57,31 +57,47 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Width = 62
     Width = 62
     Height = 14
     Height = 14
     Caption = 'Text Button1'
     Caption = 'Text Button1'
-    TabOrder = 13
+    TabOrder = 14
   end
   end
   object Button1Text: TEdit
   object Button1Text: TEdit
     Left = 89
     Left = 89
     Top = 62
     Top = 62
-    Width = 159
+    Width = 112
     Height = 21
     Height = 21
     TabOrder = 3
     TabOrder = 3
   end
   end
   object Button2Label: TNewStaticText
   object Button2Label: TNewStaticText
-    Left = 258
-    Top = 67
-    Width = 62
+    Left = 212
+    Top = 66
+    Width = 38
     Height = 14
     Height = 14
-    Caption = 'Text Button2'
-    TabOrder = 14
+    Caption = 'Button2'
+    TabOrder = 15
   end
   end
   object Button2Text: TEdit
   object Button2Text: TEdit
-    Left = 334
-    Top = 62
-    Width = 204
+    Left = 259
+    Top = 63
+    Width = 112
     Height = 21
     Height = 21
     Anchors = [akLeft, akTop, akRight]
     Anchors = [akLeft, akTop, akRight]
     TabOrder = 4
     TabOrder = 4
   end
   end
+  object Button3Label: TNewStaticText
+    Left = 379
+    Top = 66
+    Width = 38
+    Height = 14
+    Caption = 'Button3'
+    TabOrder = 16
+  end
+  object Button3Text: TEdit
+    Left = 426
+    Top = 63
+    Width = 112
+    Height = 21
+    Anchors = [akLeft, akTop, akRight]
+    TabOrder = 5
+  end
   object GroupBox1: TGroupBox
   object GroupBox1: TGroupBox
     Left = 8
     Left = 8
     Top = 8
     Top = 8
@@ -110,7 +126,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Width = 240
     Width = 240
     Height = 60
     Height = 60
     Caption = ' Type'
     Caption = ' Type'
-    TabOrder = 5
+    TabOrder = 6
     object cb_Suppressible: TCheckBox
     object cb_Suppressible: TCheckBox
       Left = 14
       Left = 14
       Top = 24
       Top = 24
@@ -149,7 +165,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Height = 60
     Height = 60
     Anchors = [akLeft, akTop, akRight]
     Anchors = [akLeft, akTop, akRight]
     Caption = ' Flags '
     Caption = ' Flags '
-    TabOrder = 6
+    TabOrder = 7
     object NewStaticText1: TNewStaticText
     object NewStaticText1: TNewStaticText
       Left = 14
       Left = 14
       Top = 26
       Top = 26
@@ -197,7 +213,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Height = 174
     Height = 174
     Anchors = [akLeft, akTop, akBottom]
     Anchors = [akLeft, akTop, akBottom]
     Caption = ' Icon '
     Caption = ' Icon '
-    TabOrder = 7
+    TabOrder = 8
     DesignSize = (
     DesignSize = (
       160
       160
       174)
       174)
@@ -404,7 +420,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Height = 174
     Height = 174
     Anchors = [akLeft, akTop, akBottom]
     Anchors = [akLeft, akTop, akBottom]
     Caption = ' Buttons '
     Caption = ' Buttons '
-    TabOrder = 8
+    TabOrder = 9
     DesignSize = (
     DesignSize = (
       169
       169
       174)
       174)
@@ -483,7 +499,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Height = 174
     Height = 174
     Anchors = [akLeft, akTop, akBottom]
     Anchors = [akLeft, akTop, akBottom]
     Caption = ' Return values '
     Caption = ' Return values '
-    TabOrder = 9
+    TabOrder = 10
     object cb_IDOK: TCheckBox
     object cb_IDOK: TCheckBox
       Left = 16
       Left = 16
       Top = 23
       Top = 23
@@ -674,7 +690,7 @@ object MsgBoxDesignerForm: TMsgBoxDesignerForm
     Height = 42
     Height = 42
     Align = alBottom
     Align = alBottom
     BevelOuter = bvNone
     BevelOuter = bvNone
-    TabOrder = 10
+    TabOrder = 11
     DesignSize = (
     DesignSize = (
       548
       548
       42)
       42)

+ 79 - 30
Projects/Src/IDE.MsgBoxDesignerForm.pas

@@ -71,8 +71,10 @@ type
     TaskMessageText: TEdit;
     TaskMessageText: TEdit;
     Button1Text: TEdit;
     Button1Text: TEdit;
     Button2Text: TEdit;
     Button2Text: TEdit;
+    Button3Text: TEdit;
     Button1Label: TNewStaticText;
     Button1Label: TNewStaticText;
     Button2Label: TNewStaticText;
     Button2Label: TNewStaticText;
+    Button3Label: TNewStaticText;
     cb_Suppressible: TCheckBox;
     cb_Suppressible: TCheckBox;
     cb_DefIDOK: TRadioButton;
     cb_DefIDOK: TRadioButton;
     cb_DefIDCANCEL: TRadioButton;
     cb_DefIDCANCEL: TRadioButton;
@@ -135,8 +137,10 @@ begin
   TaskMessageText.Visible := False;
   TaskMessageText.Visible := False;
   Button1Text.Visible := False;
   Button1Text.Visible := False;
   Button2Text.Visible := False;
   Button2Text.Visible := False;
+  Button3Text.Visible := False;
   Button1Label.Visible := False;
   Button1Label.Visible := False;
   Button2Label.Visible := False;
   Button2Label.Visible := False;
+  Button3Label.Visible := False;
 end;
 end;
 
 
 procedure TMsgBoxDesignerForm.rbMB_OKClick(Sender: TObject);
 procedure TMsgBoxDesignerForm.rbMB_OKClick(Sender: TObject);
@@ -174,12 +178,15 @@ begin
      rb_IDIGNORE.Checked := False;
      rb_IDIGNORE.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDNO.Checked := False;
      rb_IDNO.Checked := False;
+     Button3Text.Enabled := False;
+     Button3Label.Enabled := False;
      Button2Text.Enabled := False;
      Button2Text.Enabled := False;
      Button2Label.Enabled := False;
      Button2Label.Enabled := False;
      Button1Text.Enabled := True;
      Button1Text.Enabled := True;
      Button1Label.Enabled := True;
      Button1Label.Enabled := True;
      Button1Text.Text := 'OK';
      Button1Text.Text := 'OK';
      Button2Text.Text := '';
      Button2Text.Text := '';
+     Button3Text.Text := '';
   end;
   end;
   if cb_Suppressible.Checked then begin
   if cb_Suppressible.Checked then begin
      cb_DefIDOK.Checked := True;
      cb_DefIDOK.Checked := True;
@@ -237,12 +244,15 @@ begin
      rb_IDIGNORE.Checked := False;
      rb_IDIGNORE.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDNO.Checked := False;
      rb_IDNO.Checked := False;
+     Button3Text.Enabled := False;
+     Button3Label.Enabled := False;
      Button2Text.Enabled := True;
      Button2Text.Enabled := True;
      Button2Label.Enabled := True;
      Button2Label.Enabled := True;
      Button1Text.Enabled := True;
      Button1Text.Enabled := True;
      Button1Label.Enabled := True;
      Button1Label.Enabled := True;
      Button1Text.Text := 'Yes';
      Button1Text.Text := 'Yes';
      Button2Text.Text := 'No';
      Button2Text.Text := 'No';
+     Button3Text.Text := '';
   end;
   end;
   if cb_Suppressible.Checked then begin
   if cb_Suppressible.Checked then begin
      cb_DefIDOK.Checked := False;
      cb_DefIDOK.Checked := False;
@@ -300,12 +310,15 @@ begin
      rb_IDIGNORE.Checked := False;
      rb_IDIGNORE.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDNO.Checked := False;
      rb_IDNO.Checked := False;
-     Button2Text.Enabled := False;
-     Button2Label.Enabled := False;
+     Button3Text.Enabled := False;
+     Button3Label.Enabled := False;
+     Button2Text.Enabled := True;
+     Button2Label.Enabled := True;
      Button1Text.Enabled := True;
      Button1Text.Enabled := True;
      Button1Label.Enabled := True;
      Button1Label.Enabled := True;
      Button1Text.Text := 'OK';
      Button1Text.Text := 'OK';
-     Button2Text.Text := '';
+     Button2Text.Text := 'Cancel';
+     Button3Text.Text := '';
   end;
   end;
   if cb_Suppressible.Checked then begin
   if cb_Suppressible.Checked then begin
      cb_DefIDOK.Checked := True;
      cb_DefIDOK.Checked := True;
@@ -363,12 +376,15 @@ begin
      rb_IDIGNORE.Checked := False;
      rb_IDIGNORE.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDNO.Checked := False;
      rb_IDNO.Checked := False;
-     Button2Text.Enabled := False;
-     Button2Label.Enabled := False;
+     Button3Text.Enabled := False;
+     Button3Label.Enabled := False;
+     Button2Text.Enabled := True;
+     Button2Label.Enabled := True;
      Button1Text.Enabled := True;
      Button1Text.Enabled := True;
      Button1Label.Enabled := True;
      Button1Label.Enabled := True;
      Button1Text.Text := 'Retry';
      Button1Text.Text := 'Retry';
-     Button2Text.Text := '';
+     Button2Text.Text := 'Cancel';
+     Button3Text.Text := '';
   end;
   end;
   if cb_Suppressible.Checked then begin
   if cb_Suppressible.Checked then begin
      cb_DefIDOK.Checked := False;
      cb_DefIDOK.Checked := False;
@@ -426,12 +442,15 @@ begin
      rb_IDIGNORE.Checked := False;
      rb_IDIGNORE.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDNO.Checked := False;
      rb_IDNO.Checked := False;
+     Button3Text.Enabled := True;
+     Button3Label.Enabled := True;
      Button2Text.Enabled := True;
      Button2Text.Enabled := True;
      Button2Label.Enabled := True;
      Button2Label.Enabled := True;
      Button1Text.Enabled := True;
      Button1Text.Enabled := True;
      Button1Label.Enabled := True;
      Button1Label.Enabled := True;
      Button1Text.Text := 'Yes';
      Button1Text.Text := 'Yes';
      Button2Text.Text := 'No';
      Button2Text.Text := 'No';
+     Button3Text.Text := 'Cancel';
   end;
   end;
   if cb_Suppressible.Checked then begin
   if cb_Suppressible.Checked then begin
      cb_DefIDOK.Checked := False;
      cb_DefIDOK.Checked := False;
@@ -489,12 +508,15 @@ begin
      rb_IDIGNORE.Checked := False;
      rb_IDIGNORE.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDYES.Checked := False;
      rb_IDNO.Checked := False;
      rb_IDNO.Checked := False;
-     Button2Text.Enabled := False;
-     Button2Label.Enabled := False;
-     Button1Text.Enabled := False;
-     Button1Label.Enabled := False;
-     Button1Text.Text := '';
-     Button2Text.Text := '';
+     Button3Text.Enabled := True;
+     Button3Label.Enabled := True;
+     Button2Text.Enabled := True;
+     Button2Label.Enabled := True;
+     Button1Text.Enabled := True;
+     Button1Label.Enabled := True;
+     Button1Text.Text := 'Retry';  //this order is not a mistake
+     Button2Text.Text := 'Ignore'; //
+     Button3Text.Text := 'Abort';  //
   end;
   end;
   if cb_Suppressible.Checked then begin
   if cb_Suppressible.Checked then begin
      cb_DefIDOK.Checked := False;
      cb_DefIDOK.Checked := False;
@@ -564,10 +586,12 @@ begin
    TaskMessageLabel.Visible := False;
    TaskMessageLabel.Visible := False;
    TaskInstructionText.Visible := False;
    TaskInstructionText.Visible := False;
    TaskMessageText.Visible := False;
    TaskMessageText.Visible := False;
-   Button1Text.Visible := False;
-   Button2Text.Visible := False;
-   Button1Label.Visible := False;
-   Button2Label.Visible := False;
+    Button1Text.Visible := False;
+    Button2Text.Visible := False;
+    Button3Text.Visible := False;
+    Button1Label.Visible := False;
+    Button2Label.Visible := False;
+    Button3Label.Visible := False;
    rbMB_OK.Checked := True;
    rbMB_OK.Checked := True;
    rbMB_OKClick(Self);
    rbMB_OKClick(Self);
 end;
 end;
@@ -667,10 +691,12 @@ begin
    TaskMessageLabel.Visible := True;
    TaskMessageLabel.Visible := True;
    TaskInstructionText.Visible := True;
    TaskInstructionText.Visible := True;
    TaskMessageText.Visible := True;
    TaskMessageText.Visible := True;
-   Button1Text.Visible := True;
-   Button2Text.Visible := True;
-   Button1Label.Visible := True;
-   Button2Label.Visible := True;
+    Button1Text.Visible := True;
+    Button2Text.Visible := True;
+    Button3Text.Visible := True;
+    Button1Label.Visible := True;
+    Button2Label.Visible := True;
+    Button3Label.Visible := True;
    TaskInstructionText.Text := 'Instruction Text';
    TaskInstructionText.Text := 'Instruction Text';
    TaskMessageText.Text := 'Message Text';
    TaskMessageText.Text := 'Message Text';
    rbMB_OK.Checked := True;
    rbMB_OK.Checked := True;
@@ -785,14 +811,21 @@ begin
     if (NewEdit1.Text = '3') and (cb_MB_SETFOREGROUND.Checked) then
     if (NewEdit1.Text = '3') and (cb_MB_SETFOREGROUND.Checked) then
        MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_DEFBUTTON3 or MB_SETFOREGROUND);
        MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_DEFBUTTON3 or MB_SETFOREGROUND);
   end else if cb_TaskDialogMsgBox.Checked then begin
   end else if cb_TaskDialogMsgBox.Checked then begin
-     { create ButtonLabels array }
+     { create ButtonLabels array - also see GetText}
      var ButtonLabels: TArray<string>;
      var ButtonLabels: TArray<string>;
-     if rbMB_YESNO.Checked or rbMB_YESNOCANCEL.Checked then
+     if Button3Text.Enabled then
+        ButtonLabels := TArray<string>.Create(Button1Text.Text, Button2Text.Text, Button3Text.Text)
+     else if Button2Text.Enabled then
         ButtonLabels := TArray<string>.Create(Button1Text.Text, Button2Text.Text)
         ButtonLabels := TArray<string>.Create(Button1Text.Text, Button2Text.Text)
-     else if rbMB_ABORTRETRYIGNORE.Checked then
-        ButtonLabels := TArray<string>.Create('Retry', 'Ignore', 'Abort')
      else
      else
         ButtonLabels := TArray<string>.Create(Button1Text.Text);
         ButtonLabels := TArray<string>.Create(Button1Text.Text);
+     if rbMB_OKCANCEL.Checked or rbMB_YESNOCANCEL.Checked or rbMB_RETRYCANCEL.Checked then begin
+      { Specifying a cancel label is optional: if it's missing TaskDialogMsgBox will use a button
+        at the bottom instead }
+      const NLabels = Length(ButtonLabels);
+      if ButtonLabels[NLabels-1] = '' then
+        SetLength(ButtonLabels, NLabels-1);
+     end;
 
 
      { get Shield Flag value }
      { get Shield Flag value }
      var ShieldButton := 0;
      var ShieldButton := 0;
@@ -1004,13 +1037,29 @@ begin
      { TaskDialogMsgBox(TaskInstructionText.Text, TaskMessageText.Text, Typ, Buttons, ButtonLabels, ShieldButton) }
      { TaskDialogMsgBox(TaskInstructionText.Text, TaskMessageText.Text, Typ, Buttons, ButtonLabels, ShieldButton) }
      ModeMsg := 1;
      ModeMsg := 1;
 
 
-     { create ButtonLabels array }
-     if rbMB_YESNO.Checked or rbMB_YESNOCANCEL.Checked then
-        ButtonLabels :=  Button1Text.Text + ''', ''' + Button2Text.Text
-     else if rbMB_ABORTRETRYIGNORE.Checked then
-        ButtonLabels := 'Retry'', ''Ignore'', ''Abort'
+     { create ButtonLabels array - also see MBDButtonPreviewClick }
+     var ButtonLabelsArray: TArray<string>;
+     if Button3Text.Enabled then
+        ButtonLabelsArray := TArray<string>.Create(Button1Text.Text, Button2Text.Text, Button3Text.Text)
+     else if Button2Text.Enabled then
+        ButtonLabelsArray := TArray<string>.Create(Button1Text.Text, Button2Text.Text)
      else
      else
-        ButtonLabels := Button1Text.Text;
+        ButtonLabelsArray := TArray<string>.Create(Button1Text.Text);
+     var NLabels := Length(ButtonLabelsArray);
+     if rbMB_OKCANCEL.Checked or rbMB_YESNOCANCEL.Checked or rbMB_RETRYCANCEL.Checked then begin
+      { Specifying a cancel label is optional: if it's missing TaskDialogMsgBox will use a button
+        at the bottom instead }
+      if ButtonLabelsArray[NLabels-1] = '' then begin
+        Dec(NLabels);
+        SetLength(ButtonLabelsArray, NLabels);
+      end;
+     end;
+     for var I := 0 to NLabels-1 do begin { NLabels is always > 0 }
+      if I = 0 then
+        ButtonLabels := ButtonLabelsArray[I]
+      else
+        ButtonLabels := ButtonLabels + ''', ''' + ButtonLabelsArray[I];
+     end;
 
 
      { get Shield Flag value }
      { get Shield Flag value }
      if rbMB_OK.Checked and rb_IDOK.Checked then ShieldButton := 'IDOK';
      if rbMB_OK.Checked and rb_IDOK.Checked then ShieldButton := 'IDOK';