第1質問:ボタン付き文字列グリッド
どのように表示されない文字列グリッドの部分を呼び出しますか?あなたはそれを見るためにスクロールする必要があります。
例:
文字列グリッドに20行ありますが、一度に10文字しか表示されません。あなたは他の10を見るためにスクロールする必要があります。どのように "隠された"ものが呼び出されますか?
第二問:
私は、これはおそらく、いくつかのポインタをいただければ幸いですので、それを行うには正しい方法ではありません知っています。
私は1つの固定された行の文字列グリッドを持っています。実行時にColorButtonを追加します。だから私は1つの列にボタンを設定します。 このボタンを使って行を「挿入/削除」します。すべてのグリッドが「目に見える」部分にある限り、これはうまく機能します。 新しい行を「挿入」し、ボタンを「隠し」部分に移動すると、問題が発生することがあります。最後のボタンはCell [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のボタンにアクセスしようとしましたが、「アクセスが拒否されました」というエラーが表示されます。ドッキングボタンをグリッドセルにドックしましたが、最後に表示されるボタンの高さがグリッドの目に見える部分に縮小されます。もちろん、最後のボタンはCell [0,0]に描画されます。 – user805528