Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: OnRow/ColMove im StringGrid gezielt sperren...

  Alt 3. Mär 2009, 00:41
Hallo

Eine Möglichkeit wäre folgende (nur für die Zeilen implementiert, analog funktioniert's beim Verschieben einer Spalte):

1. goRowMoving nur dann aktivieren, falls sich der Maus über Row > 1 befindet.
2. falls zur Row 1 verschoben wird, Operation wieder rückgängig machen.

Delphi-Quellcode:
// Zugriff auf protected MoveColumn, MoveRow verschaffen
type
  TMyGrid = class(TStringGrid)
  public
    procedure MoveColumn(FromIndex, ToIndex: Longint);
    procedure MoveRow(FromIndex, ToIndex: Longint);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyGrid.MoveColumn(FromIndex, ToIndex: Integer);
begin
  inherited;
end;

procedure TMyGrid.MoveRow(FromIndex, ToIndex: Integer);
begin
  inherited;
end;

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  ACol, ARow: Integer;
begin
  // goRowMoving nur dann aktivieren, falls sich der Maus über Row > 1 befindet.
  with Sender as TStringGrid do
  begin
    MouseToCell(X,Y, ACol, ARow);
    if (ARow > 1) then
      Options := Options + [goRowMoving, goColMoving]
    else
      Options := Options - [goRowMoving, goColMoving];
  end;
end;

procedure TForm1.StringGrid1RowMoved(Sender: TObject; FromIndex,
  ToIndex: Integer);
begin
  // falls zur Row 1 verschoben wird, Operation wieder rückgängig machen.
  if ToIndex = 1 then
    TMyGrid(StringGrid1).MoveRow(ToIndex, FromIndex);
end;
(Ist zwar etwas unschön aber funktioniert)
Thomas
  Mit Zitat antworten Zitat