2列2行のStringGridの各Cellの中に、それぞれ2列2行のStringGridを入れ子構造に作ることを考えていますが、手をつけるべき出発点がわかりません。
開発のヒントを下さい。
ゴメン、StringGridの入れ子がよく解らない。
1、ビジュアル的に縦横の升目に更に升目を入れる?
2、配列の中に配列を入れる。
3、その他。
1は分らん。
3は聞かなわからん。
2列2行の各セルに2列2行ってことは、4行4列じゃないの?
OnDrawCell、OnSelectCellを使えば、見た目も固定セルのような
セルにできるので、そんなに困らないと思うが?
一つのセル内に4つの選択肢を表示しマウスで選択可能とする。
というイメージなのですが・・・
なんで StringGrid でなきゃいけないのでしょう? 4つの選択肢をマウスで
選択するだけじゃ不足なんですよね? その辺の事情を詳しく書かないと有益な
レスはつかないと思います。
恐らくやりたいのはこんな事?
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
ARect: TRect; AState: TGridDrawState);
var
Rect3: TRect;
DC: HDC;
procedure DrawFrame(ARect:TRect);
begin
DC := StringGrid1.Canvas.Handle;
DrawEdge(DC, ARect, BDR_RAISEDINNER, BF_TOPLEFT);
DrawEdge(DC, ARect, BDR_RAISEDINNER, BF_BOTTOMRIGHT);
Dec(ARect.Bottom);
Dec(ARect.Right);
Inc(ARect.Top);
Inc(ARect.Left);
DrawEdge(DC, ARect, BDR_RAISEDOUTER, BF_TOPLEFT or BF_MIDDLE);
end;
begin
if ARow = 0 then
begin
if (ARow = 0) and (ACol <> 0) then
begin
StringGrid1.Canvas.Brush.Color := StringGrid1.FixedColor;
if ACol mod 2 = 0 then
begin
Rect3 := Rect(ARect.Left-StringGrid1.ColWidths[ACol+1],ARect.Top,ARect.Right,ARect.Bottom);
end
else
begin
Rect3 := Rect(ARect.Left,ARect.Top,ARect.Right+StringGrid1.ColWidths[ACol+1],ARect.Bottom);
end;
DrawFrame(Rect3);
end;
end;
if (ACol = 0) then
begin
StringGrid1.Canvas.Brush.Color := StringGrid1.FixedColor;
if ARow mod 2 = 0 then
begin
Rect3 := Rect(ARect.Left,ARect.Top-StringGrid1.RowHeights[ACol+1],ARect.Right,ARect.Bottom);
end
else
begin
Rect3 := Rect(ARect.Left,ARect.Top,ARect.Right,ARect.Bottom+StringGrid1.RowHeights[ACol+1]);
end;
DrawFrame(Rect3);
end;
end;
Panelの上にSpeedButtonを2行2列で置いたのを用意するのは?
編集 削除入れ子構造は私の技量では無理っぽいので、汎用性は放棄し、親Grid(2×2)の各cell上に子Grid(2×2)を4個配置し、親GridのOnClickイベントで子Grid(1〜4)にSetfocusすることにしました。貴重なアドバイスを下さいました皆様に感謝します。
編集 削除↑解決です。
編集 削除