|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"横スクロールするListBox"
横スクロールするListBoxの例です。
最初全Itemに対してcanvas.textWidthとやってみましたが、Items.Count
が大きくなるとやたら時間がかかるので、スクロールイベントをもらって
表示分だけに関して文字列長さをチェックする様にしました。
mes8 #06370からのツリーを参考にしています。
Type
TScrListBox=class(TListBox)
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
end;
implementation
procedure TScrListBox.WMVScroll(var Message: TWMVScroll);
var maxx,i,visibleLast:integer;
begin
maxx:=0;
canvas.Font.assign(font);
visibleLast:=TopIndex+Trunc(ABS(clientHeight/(font.height+4)))-1;
if visibleLast>items.count-1 then visibleLast:=items.count-1;
for i:=TopIndex to visibleLast do
begin
if canvas.TextWidth(items[i])>maxx then
maxx:=canvas.TextWidth(items[i]+' ');
end;
Perform(LB_SETHORIZONTALEXTENT, maxx, 0);
inherited;
end;
{使用例 コンポにすればもっと楽ですが、上記のままですと、}
procedure TForm1.FormCreate(Sender: TObject);
begin
ScrListBox:=TScrListBox.create(self);
with ScrListBox do
begin
parent:=self;
height:=50;//width,Top,left 他も必要に応じて
items.loadfromfile('c:\autoexec.bat');
end;
end;
☆☆☆ わからないときサンプル蔵 わかったときサンプル蔵 ☆☆☆
98/03/01(日) 10:55 凛(MXB01744)
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|