community.borland.com

Article #15531: Enabling a horizontal scroll bar for a list box.

 Technical Information Database

TI531D.txt - Enabling a horizontal scroll bar for a list box.

Category   :General Programming
Platform   :All Windows
Product    :All32Bit,   

Description:
To enable horizontal scroll bars in list boxes you have send the listbox a LB_SETHORIZONTALEXTENT message. The sample 
code illustrates how to do this in the OnCreate of a form. The form simply has one listbox on it and a button. Clicking on
the button removes the horizontal scroll bar.


-- Source code 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  LongestLength: Integer;
  LongestString: String;
  PixelLength: Integer;
  i: Integer;
begin
  Listbox1.Items.Add('Line 1');
  Listbox1.Items.Add('Line 2 A very long string that is past the size of the listbox');
  Listbox1.Items.Add('Line 3');

  if Listbox1.Items.Count > 1 then
  begin
    LongestLength := 0;
    LongestString := '';
  
    // go through all the items to find the longest one
    for i := 0 to Listbox1.Items.Count - 1 do
    begin
      if Length(Listbox1.Items[i]) > LongestLength then
      begin
        LongestString := Listbox1.Items[i];
        LongestLength := Length(Listbox1.Items[i]);
      end;
    end;

    // Now convert the longest string length to pixel size
    PixelLength := Listbox1.Canvas.TextWidth(LongestString);

    // Add a little extra to it to make it look nice
    PixelLength := PixelLength + Listbox1.Canvas.TextWidth('W');

    // Send an LB_SETHORIZONTALEXTENT to the list box to apply
    // the horizontal scrollbar
    SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT,
        PixelLength, 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
{ This hides the listbox scrollbar by sending a
  string length of 0 message }
begin
   // Send a lb_SetHorizontalExtent to the list box with
   // 0 as the length of the string
   SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT,
      0, 0);
end;

end.

Reference:
 

3/30/99 12:23:29 PM
 

Last Modified: 01-SEP-99