你怎麼稱呼的部分stringgrid不可見?你需要滾動才能看到它。
例如:
stringgrid中有20行,但一次只能看到10行。你需要滾動查看其他10.如何「隱藏」的叫?
第二個問題:
我知道這可能不是做正確的方式,使一些三分球,將不勝感激。
我有一個固定行的字符串網格。我在運行時添加ColorButtons。所以我用按鈕填充1列。 我使用這個按鈕來「插入/刪除」行。只要所有的網格都處於「可見」部分,這就很好。 當我「插入」新行並將按鈕移動到「隱藏」部分時,會出現問題。最後一個按鈕然後被繪製到單元格[0,0]。 「隱藏」部分中的其他按鈕繪製正確。任何想法爲什麼發生這種情況我應該在OnDraw方法中找到一種方法來管理這個問題,或者有更好的方法來做到這一點嗎?
代碼:
procedure Tform1.addButton(Grid : TStringGrid; ACol : Integer; ARow : Integer);
var
bt : TColorButton;
Rect : TRect;
index : Integer;
begin
Rect := Grid.CellRect(ACol,ARow);
bt := TColorButton.Create(Grid);
bt.Parent := Grid;
bt.BackColor := clCream;
bt.Font.Size := 14;
bt.Width := 50;
bt.Top := Rect.Top;
bt.Left := Rect.Left;
bt.Caption := '+';
bt.Name := 'bt'+IntToStr(ARow);
index := Grid.ComponentCount-1;
bt :=(Grid.Components[index] as TColorButton);
Grid.Objects[ACol,ARow] := Grid.Components[index];
bt.OnMouseUp := Grid.OnMouseUp;
bt.OnMouseMove := Grid.OnMouseMove;
bt.Visible := true;
end;
procedure MoveRowPlus(Grid : TStringGrid; Arow : Integer; stRow : Integer);
var
r, index : Integer;
bt : TColorButton;
Rect : TRect;
begin
Grid.RowCount := Grid.RowCount+stRow;
for r := Grid.RowCount - 1 downto ARow+stRow do
begin
Grid.Rows[r] := Grid.Rows[r-StRow];
end;
index := Grid.ComponentCount-1;
for r := Grid.RowCount - 1 downto ARow+stRow do
begin
bt :=(Grid.Components[index] as TColorButton);
Rect := Grid.CellRect(10,r);
bt.Top := Rect.Top;
bt.Left := Rect.Left;
Grid.Objects[10,r] := Grid.Components[index];
dec(index);
end;
for r := ARow to (ARow +stRow-1) do
begin
Grid.Rows[r].Clear;
end;
end;
procedure MoveRowMinus(Grid : TStringGrid; Arow : Integer; stRow : Integer);
var
r, index : Integer;
bt : TColorButton;
Rect : TRect;
begin
for r := ARow to Grid.RowCount-stRow-1 do
begin
Grid.Rows[r] := Grid.Rows[r+StRow];
end;
index := ARow-1;
for r := ARow to Grid.RowCount-stRow-1 do
begin
Rect := Grid.CellRect(10,r);
bt :=(Grid.Components[index] as TColorButton);
bt.Top := Rect.Top;
bt.Left := Rect.Left;
Grid.Objects[10,r] := Grid.Components[index];
bt.Visible := true;
inc(index);
end;
for r := Grid.RowCount-stRow to Grid.RowCount-1 do
begin
Grid.Rows[r].Clear;
end;
Grid.RowCount := Grid.RowCount-stRow;
end;
好吧,我已經嘗試訪問OnDrawCell中的按鈕,但我得到「訪問被拒絕」的錯誤。我嘗試將按鈕對接到網格單元格,但最後可見的按鈕高度降低到網格的可見部分。當然最後一個按鈕被繪製到單元[0,0]。 – user805528 2012-01-28 20:08:53