お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"TCollectionを使ったコンポ例"

この発言に対し以下のコメントが寄せられています
#00634 謎の全知師 さん RE:TCollectionを使ったコンポ例
#00637 凛 さん RE:TCollectionを使ったコンポ例

 試しに作ってみた最もシンプルと思われるTCollectionを使ったコンポ例 Q なんでTCollectionを使うか A 例えばStatusBarのpanelsの様に設計時に数を変更できるオブジェクトを プロパティとして持ちたいときはこうするのが多分一番簡単 Q このユニットでは使ってないのに、なんでGetOwnerというfunctionがあるのか A どうもディフォルトのプロパティエディタがこの関数を  必要としているようです。 Q Moonというプロパティなんか変、何これ? A まず、名前は 'むーん'と唸りながら考えたのでmoonにしました(他意無し) で目的はプロパティエディタの世話にならずにオブジェクトプロパティである cellを追加する手段を作りたかった、、というもので、普通は不要  まぁうまくいかないときに試行錯誤した痕です。(^^; この数字を設定する度にcellが増えていきます。 Q showitって何? A これも本来は不要。moonでcellは作るけど即 Linesにaddされちゃうと  プロパティとして保存されたかわかりにくくなるので実行時にだけ見れる ように、、という関数です。 結構苦労したのでちょっとでも参考になれば幸いです。 変なところありましたらどんどんご指摘願います。m(_ _)m unit CMemo; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TCell=Class(TCollectionItem) private FText:string; public procedure assign(source:TPersistent);OverRide; published property text:String read Ftext write FText; end; TCList=Class(TCollection) private FOwner:TPersistent; procedure _setItem(index:integer;value:TCollectionItem); function _getItem(index:integer):TCollectionItem; public constructor create(Aowner:TPersistent); function GetOwner: TPersistent; override; published property items[index:integer]:TCollectionItem read _getItem write _setItem;default; end; TCMemo = class(TMemo) private { Private 宣言 } FList:TCList; Fmoon:integer; protected { Protected 宣言 } public { Public 宣言 } procedure addCell;//セルを追加する constructor create(AOwner:TComponent);overRide; destructor destroy;overRide; procedure setMoon(value:integer); procedure showit; function get(index:integer):TCell; procedure put(index:integer;value:TCell); published { Published 宣言 } property List:TCList read FList write FList; property cells[index:integer]:TCell read get write put; property moon:integer read FMoon write setMoon; end; procedure Register; implementation constructor TCList.create; begin inherited Create(TCell); FOwner:=AOwner; end; function TCList.getOwner:TPersistent; begin result:=FOwner; end; procedure TCList._setItem(index:integer;value:TCollectionItem); begin inherited SetItem(Index, Value); end; function TCList._getItem(index:integer):TCollectionItem; begin Result := inherited GetItem(Index); end; procedure TCell.assign; begin Ftext:=TCell(source).text; end; procedure TCMemo.showit; var i:integer; begin for i:=0 to FList.count-1 do begin Lines.add(TCell(FList.getItem(i)).text); end; update; end; procedure TCMemo.put; var i:integer; cell:TCell; begin if FList.count<Index then begin for i:=FList.count to index do begin FList.add; end; end; TCell(FList[index]).assign(value); end; function TCMemo.get(index:integer):TCell; begin result:=TCell(FList[index]); end; procedure TCMemo.setMoon(value:integer); begin addCell; TCell(FList[FList.count-1]).text:=inttostr(value); text:=inttostr(FList.count); Fmoon:=value; end; constructor TCMemo.create; begin inherited; FList:=TCList.create(self); end; destructor TCMemo.destroy; var i:integer; begin FList.clear; inherited; end; procedure TCMemo.addCell; var cell:TCell; begin FList.add; end; procedure Register; begin RegisterComponents('Samples', [TCMemo]); end; end. 98/08/23(日) 20:17 凛(MXB01744) Original document by 凛 氏 ID:(MXB01744)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum