ソースを参照

Add close button, based on NewTabSet's DrawCloseButton. Also auto-close on whatsnew open.

Martijn Laan 1 年間 前
コミット
b1c2d70f3d
2 ファイル変更49 行追加2 行削除
  1. 13 0
      Projects/Src/IDE.MainForm.dfm
  2. 36 2
      Projects/Src/IDE.MainForm.pas

+ 13 - 0
Projects/Src/IDE.MainForm.dfm

@@ -361,6 +361,19 @@ object MainForm: TMainForm
     Align = alTop
     BevelOuter = bvNone
     TabOrder = 1
+    object UpdatePanelClosePaintBox: TPaintBox
+      AlignWithMargins = True
+      Left = 330
+      Top = 10
+      Width = 21
+      Height = 21
+      Margins.Top = 10
+      Margins.Right = 10
+      Margins.Bottom = 10
+      Align = alRight
+      OnClick = UpdatePanelClosePaintBoxClick
+      OnPaint = UpdatePanelClosePaintBoxPaint
+    end
     object UpdateLinkLabel: TLinkLabel
       Left = 13
       Top = 13

+ 36 - 2
Projects/Src/IDE.MainForm.pas

@@ -253,6 +253,7 @@ type
     EFindRegEx: TMenuItem;
     UpdatePanel: TPanel;
     UpdateLinkLabel: TLinkLabel;
+    UpdatePanelClosePaintBox: TPaintBox;
     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
     procedure FExitClick(Sender: TObject);
     procedure FOpenMainFileClick(Sender: TObject);
@@ -377,6 +378,8 @@ type
     procedure EFindRegExClick(Sender: TObject);
     procedure UpdateLinkLabelLinkClick(Sender: TObject; const Link: string;
       LinkType: TSysLinkType);
+    procedure UpdatePanelClosePaintBoxPaint(Sender: TObject);
+    procedure UpdatePanelClosePaintBoxClick(Sender: TObject);
   private
     { Private declarations }
     FMemos: TList<TIDEScintEdit>;                      { FMemos[0] is the main memo and FMemos[1] the preprocessor output memo - also see MemosTabSet comment above }
@@ -5768,6 +5771,34 @@ var
   PrevCompilerFileIndex: Integer;
   PrevMemo: TIDEScintFileEdit;
 
+procedure TMainForm.UpdatePanelClosePaintBoxClick(Sender: TObject);
+begin
+  UpdatePanel.Visible := False;
+  UpdateBevel1Visibility;
+end;
+
+procedure TMainForm.UpdatePanelClosePaintBoxPaint(Sender: TObject);
+const
+  MENU_SYSTEMCLOSE = 17;
+  MSYSC_NORMAL = 1;
+begin
+  var Canvas := UpdatePanelClosePaintBox.Canvas;
+  var R := TRect.Create(0, 0, UpdatePanelClosePaintBox.Width, UpdatePanelClosePaintBox.Height);
+  if FMenuThemeData <> 0 then begin
+    var Offset := MulDiv(1, CurrentPPI, 96);
+    Inc(R.Left, Offset);
+    Inc(R.Top, Offset);
+    DrawThemeBackground(FMenuThemeData, Canvas.Handle, MENU_SYSTEMCLOSE, MSYSC_NORMAL, R, nil);
+  end else begin
+    InflateRect(R, -MulDiv(3, CurrentPPI, 96), -MulDiv(6, CurrentPPI, 96));
+    Canvas.Pen.Color := Canvas.Font.Color;
+    Canvas.MoveTo(R.Left, R.Top);
+    Canvas.LineTo(R.Right, R.Bottom);
+    Canvas.MoveTo(R.Left, R.Bottom-1);
+    Canvas.LineTo(R.Right, R.Top-1);
+  end;
+end;
+
 procedure TMainForm.ParseDebugInfo(DebugInfo: Pointer);
 
   function GetMemoFromCompilerFileIndex(const CompilerFileIndex: Integer): TIDEScintFileEdit;
@@ -7471,8 +7502,11 @@ end;
 procedure TMainForm.UpdateLinkLabelLinkClick(Sender: TObject;
   const Link: string; LinkType: TSysLinkType);
 begin
- if (LinkType = sltID) and (Link = 'whatsnew') then
-  HWhatsNew.Click;
+  if (LinkType = sltID) and (Link = 'whatsnew') then begin
+    HWhatsNew.Click;
+    UpdatePanel.Visible := False;
+    UpdateBevel1Visibility;
+  end;
 end;
 
 procedure TMainForm.UpdateAllMemoLineMarkers(const AMemo: TIDEScintFileEdit);