コンポーネント作成でStringGridのセルに付帯情報をもたせたい。

解決


TUU  2003-03-19 23:32:45  No: 3179

TStringGridを上位クラスにした、コンポーネントの各セルごとにプロパティを持たせたいのですが
良い方法はないでしょうか。イメージとしては、コンポーネント呼び出し側で、
ABCGrid.Cell[X,Y].aa_property=XXXみたいなことをしたいのですが、不可能でしょうか?
グリッドのプロパティに二次元配列を追加することはできないようなので他の方法を探しています。
どうぞよろしくお願いします。


にしの  2003-03-20 00:47:26  No: 3180

できますよ、配列。
Get関数と、Setプロシージャを用意しましょう。直接代入は無理です。

    FCellProperty: TStringList;
    function GetCellProperty(ACol, ARow: Integer): string;
    procedure SetCellProperty(ACol, ARow: Integer; const Value: string);

    property CellProperty[ACol, ARow: Integer]: string read GetCellProperty write SetCellProperty;

function TStringGridEx.GetCellProperty(ACol, ARow: Integer): string;
var
  Row: TStringList;
begin
  while FCellProperty.Count < ARow + 1 do
  begin
    FCellProperty.Add('');
  end;
  Row := TStringList.Create;
  Row.CommaText := FCellProperty.Strings[ARow];
  while Row.Count < ACol + 1 do
  begin
    Row.Add('');
  end;

  Result := Row.Strings[ACol];
  Row.Free;

end;

procedure TStringGridEx.SetCellProperty(ACol, ARow: Integer; const Value: string);
var
  Row: TStringList;
begin
  while FCellProperty.Count < ARow + 1 do
  begin
    FCellProperty.Add('');
  end;
  Row := TStringList.Create;
  Row.CommaText := FCellProperty.Strings[ARow];
  while Row.Count < ACol + 1 do
  begin
    Row.Add('');
  end;

  Row.Strings[ACol] := Value;
  FCellProperty.Strings[ARow] := Row.CommaText;
  Row.Free;

end;

こんな感じです。
FCellPropertyの初期化・解放を忘れずに。


TUU  2003-03-21 00:27:04  No: 3181

できました。ありがとうございます。


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

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






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