diff --git a/source/grideditlinks.pas b/source/grideditlinks.pas index f5b1c660..4d9888c5 100644 --- a/source/grideditlinks.pas +++ b/source/grideditlinks.pas @@ -217,7 +217,7 @@ type var - ActiveGridEditor: TBaseGridEditorLink; + ActiveGridEditor: TBaseGridEditorLink=nil; implementation @@ -272,8 +272,9 @@ var NewNode: PVirtualNode; DoPrev: Boolean; begin - inherited; ActiveGridEditor := nil; + FMainControl.WindowProc := FOldWindowProc; + FMainControl := nil; if FLastKeyDown = VK_TAB then begin DoPrev := ssShift in FLastShiftState; // Advance to next/previous visible column/node. @@ -288,23 +289,25 @@ begin NewColumn := LastCol; NewNode := FTree.GetPreviousVisible(NewNode); end else - NewColumn := FTree.Header.Columns.GetPreviousColumn(NewColumn); + NewColumn := FTree.Header.Columns.GetPreviousVisibleColumn(NewColumn); end else begin if NewColumn = LastCol then begin NewColumn := FirstCol; NewNode := FTree.GetNextVisible(NewNode); end else - NewColumn := FTree.Header.Columns.GetNextColumn(NewColumn); + NewColumn := FTree.Header.Columns.GetNextVisibleColumn(NewColumn); end; if not Assigned(NewNode) then Break; - FTree.FocusedNode := NewNode; - FTree.FocusedColumn := NewColumn; - if not FTree.EditNode(FTree.FocusedNode, FTree.FocusedColumn) then - FTree.SetFocus; + if not FTree.CanEdit(NewNode, NewColumn) then + Continue; + FTree.ClearSelection; + FTree.Selected[NewNode] := True; + FTree.EditNode(NewNode, NewColumn); Break; end; end; + inherited; end; function TBaseGridEditorLink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; @@ -384,7 +387,7 @@ end; procedure TBaseGridEditorLink.ProcessMessage(var Message: TMessage); begin - if Assigned(FMainControl) then + if (FMainControl <> nil) and FMainControl.HandleAllocated then FMainControl.WindowProc(Message); end; diff --git a/source/main.pas b/source/main.pas index 37aa2562..2febdaa5 100644 --- a/source/main.pas +++ b/source/main.pas @@ -5834,7 +5834,7 @@ end; procedure TMainForm.PageControlMainChanging(Sender: TObject; var AllowChange: Boolean); begin // Leave editing mode on tab changes so the editor does not stay somewhere - if Assigned(ActiveGridEditor) + if (ActiveGridEditor <> nil) and Assigned(ActiveGridEditor.Tree) and ActiveGridEditor.Tree.IsEditing then begin LogSQL('Cancelling tree edit mode on '+ActiveGridEditor.Tree.Name, lcDebug);