| Цитата | CODE procedure TfrmMain.dbg1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbRight) or (ssCtrl in Shift) then dbg1.SelectedRows.CurrentRowSelected := not dbg1.SelectedRows.CurrentRowSelected; end;
|
Спасибо, p0s0l, но за временя с момента опубликования вопроса до твоего ответа я порылся и тоже кое-что нашел. Нужно изменить в модуле DBGrid.pas следующию процедуру
| Код | procedure TCustomDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Cell: TGridCoord; OldCol,OldRow: Integer; MasterCol: TColumn; begin if not AcquireFocus then Exit; if (ssDouble in Shift) and (Button = mbRight{mbLeft}) then begin DblClick; Exit; end;
if Sizing(X, Y) then begin FDatalink.UpdateData; inherited MouseDown(Button, Shift, X, Y); Exit; end;
Cell := MouseCoord(X, Y); if (Cell.X < 0) and (Cell.Y < 0) then begin inherited MouseDown(Button, Shift, X, Y); Exit; end;
if (DragKind = dkDock) and (Cell.X < FIndicatorOffset) and (Cell.Y < FTitleOffset) and (not (csDesigning in ComponentState)) then begin BeginDrag(false); Exit; end;
if PtInExpandButton(X,Y, MasterCol) then begin MasterCol.Expanded := not MasterCol.Expanded; ReleaseCapture; UpdateDesigner; Exit; end;
if ((csDesigning in ComponentState) or (dgColumnResize in Options)) and (Cell.Y < FTitleOffset) then begin FDataLink.UpdateData; inherited MouseDown(Button, Shift, X, Y); Exit; end;
if FDatalink.Active then with Cell do begin BeginUpdate; { eliminates highlight flicker when selection moves } try FDatalink.UpdateData; // validate before moving HideEditor; OldCol := Col; OldRow := Row; if (Y >= FTitleOffset) and (Y - Row <> 0) then FDatalink.MoveBy(Y - Row); if X >= FIndicatorOffset then MoveCol(X, 0); {здесь} if {(Button = mbLeft) and} (dgMultiSelect in Options) and FDatalink.Active then with FBookmarks do begin FSelecting := False; {и здесь} if (Button = mbRight) {or ssCtrl in Shift then } then CurrentRowSelected := not CurrentRowSelected
else begin Clear; CurrentRowSelected := True; end; end; if (Button = mbLeft) and (((X = OldCol) and (Y = OldRow)) or (dgAlwaysShowEditor in Options)) then ShowEditor { put grid in edit mode } else InvalidateEditor; { draw editor, if needed } finally EndUpdate; end; end; end;
|
В принципе тоже самое, только теперь не надо использовать лишний обработчик событий. Всем спасибо за помощь.
[B]Vit[B/], может этот топик тоже в FAQ поместить, неужели больше это не кому не понадобится? |