StringGrid に入れ子構造を作るには?

解決


isocchi  2008-06-07 01:00:42  No: 30917

2列2行のStringGridの各Cellの中に、それぞれ2列2行のStringGridを入れ子構造に作ることを考えていますが、手をつけるべき出発点がわかりません。
開発のヒントを下さい。


数年ぶりの通りすがり。  2008-06-10 10:51:00  No: 30918

ゴメン、StringGridの入れ子がよく解らない。

1、ビジュアル的に縦横の升目に更に升目を入れる?
2、配列の中に配列を入れる。
3、その他。

1は分らん。
3は聞かなわからん。


ぬこ  2008-06-10 17:18:47  No: 30919

2列2行の各セルに2列2行ってことは、4行4列じゃないの?
OnDrawCell、OnSelectCellを使えば、見た目も固定セルのような
セルにできるので、そんなに困らないと思うが?


isocchi  2008-06-10 22:06:41  No: 30920

一つのセル内に4つの選択肢を表示しマウスで選択可能とする。
というイメージなのですが・・・


ううう  2008-06-11 04:37:38  No: 30921

なんで StringGrid でなきゃいけないのでしょう?  4つの選択肢をマウスで
選択するだけじゃ不足なんですよね? その辺の事情を詳しく書かないと有益な
レスはつかないと思います。


KHE00221  2008-06-11 16:55:00  No: 30922

恐らくやりたいのはこんな事?

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;


ofZ  2008-06-11 21:59:20  No: 30923

Panelの上にSpeedButtonを2行2列で置いたのを用意するのは?


isocchi  2008-06-11 22:52:59  No: 30924

入れ子構造は私の技量では無理っぽいので、汎用性は放棄し、親Grid(2×2)の各cell上に子Grid(2×2)を4個配置し、親GridのOnClickイベントで子Grid(1〜4)にSetfocusすることにしました。貴重なアドバイスを下さいました皆様に感謝します。


isocchi  2008-06-11 22:53:55  No: 30925

↑解決です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加