お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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