#3の「ラベル」というアイディアは面白いですね。試しにコードを書いてみました(ただしDelphi)。100件表示に120ミリ秒(環境:Pen4 1.5GH + 523KB RAM + Win2K )。充分実用になるでしょう。しかし面倒なのは#1で書いたように、ロックや重複チェックなんですよね。
以下はご参考までに
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
for i := 0 to 100 do begin
Labels[i]:=TLabel.Create(Self);
with Labels[i] do begin
Parent:=Form1;
Color:=clAqua;
AutoSize:=False;
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i:integer;
begin
for i := 0 to 100 do begin
Labels[i].Free;
end;
end;
procedure TForm1.LabelSet(LavelNo,R_No: integer; xName: String; s_time,
e_time: TDateTime);
var
ss,ee:integer;
begin
ss:=Ceil(Frac(s_time)*24*60-300);
ee:=Ceil(Frac(e_time)*24*60-300);
with Labels[LavelNo] do begin
Visible:=True;
Left:=ss;
Width:=ee-ss;
Top:=200+R_No*20;
Caption:=xName;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
LavelNo,R_No: integer;
xName: String;
s_time, e_time: TDateTime;
begin
MyStopWatch1.Start;
with ADOTable2 do begin
First;
LavelNo:=0;
while not Eof do begin
R_No:=FieldValues['roomno'];
xName:=FieldValues['name'];
s_time:=FieldValues['start_t'];
e_time:=FieldValues['end_t'];
LabelSet(LavelNo,R_No,xName,s_time,e_time);
Inc(LavelNo);
Next;
end;
end;
ShowMessage(MyStopWatch1.MilTimeStr);
end;
お礼
回答ありがとうございます。動的にラベルの大きさの変更が可能なんですね。ドラッグ&ドロップまでは考えていませんでしたが、動的にプロパティを変更できるならそれも可能ですね。ラベルの数は100枚程度になりそうなので、どのくらい重くなるか実験してみます。