From f88405bfd63def648094a4b5a998317db98ed81a Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Fri, 9 Jan 2026 16:11:50 +0100 Subject: [PATCH] fix: crash at right-click on data grid header --- source/main.lfm | 1 + source/main.pas | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/source/main.lfm b/source/main.lfm index 58bce723..35509c5d 100644 --- a/source/main.lfm +++ b/source/main.lfm @@ -2859,6 +2859,7 @@ object MainForm: TMainForm OnBeforePaint = DataGridBeforePaint OnChange = AnyGridChange OnColumnResize = DataGridColumnResize + OnContextPopup = DataGridContextPopup OnCreateEditor = AnyGridCreateEditor OnEditCancelled = AnyGridEditCancelled OnEdited = AnyGridEdited diff --git a/source/main.pas b/source/main.pas index 8be78b41..b66a643c 100644 --- a/source/main.pas +++ b/source/main.pas @@ -794,6 +794,8 @@ type procedure actCreateDBObjectExecute(Sender: TObject); procedure actNextTabExecute(Sender: TObject); procedure actPreviousTabExecute(Sender: TObject); + procedure DataGridContextPopup(Sender: TObject; MousePos: TPoint; + var Handled: Boolean); procedure FormActivate(Sender: TObject); procedure ImageListGetWidthForPPI(Sender: TCustomImageList; AImageWidth, APPI: Integer; var AResultWidth: Integer); @@ -3513,7 +3515,7 @@ begin // Enable or disable ImageView action Grid := ActiveGrid; (Sender as TAction).Enabled := (Grid <> nil) - and (Grid.FocusedColumn <> NoColumn) + and (Grid.FocusedColumn-1 <> NoColumn) and (GridResult(Grid).DataType(Grid.FocusedColumn-1).Category = dtcBinary) end; @@ -4327,6 +4329,16 @@ begin PageControlMain.SelectNextPage(False); end; +procedure TMainForm.DataGridContextPopup(Sender: TObject; MousePos: TPoint; + var Handled: Boolean); +var + HitInfo: THitInfo; +begin + // Prevent context popup if clicked on header, or click was not on a node + (Sender as TLazVirtualStringTree).GetHitTestInfoAt(MousePos.X, MousePos.Y, True, HitInfo); + Handled := (HitInfo.HitNode = nil); +end; + procedure TMainForm.FormActivate(Sender: TObject); begin // Work around non-working wsMaxmized in OnCreate and OnShow @@ -10398,6 +10410,8 @@ begin // Header click disabled if not AppSettings.ReadBool(asColumnHeaderClick) then Exit; + if HitInfo.Column = NoColumn then + Exit; ColName := Sender.Columns[HitInfo.Column].Text; // Add a new order column after a columns title has been clicked // Check if order column is already existant @@ -13130,7 +13144,7 @@ begin Editors.Add(SynMemoProcessView); Editors.Add(SynMemoSQLLog); if Assigned(ActiveObjectEditor) then - FindComponentInstances(ActiveObjectEditor, TSynMemo, Editors); + FindComponentInstances(ActiveObjectEditor, TSynEdit, Editors); if Assigned(frmPreferences) then Editors.Add(frmPreferences.SynMemoSQLSample); if Assigned(FCreateDatabaseDialog) then @@ -13206,9 +13220,9 @@ var begin // Restore font, highlighter and shortcuts for all TSynMemo's in given base form Editors := TObjectList.Create(False); - FindComponentInstances(BaseForm, TSynMemo, Editors); + FindComponentInstances(BaseForm, TSynEdit, Editors); for i:=0 to Editors.Count-1 do begin - SetupSynEditor(Editors[i] as TSynMemo); + SetupSynEditor(Editors[i] as TSynEdit); end; Editors.Free; end;