После того, как поместите TListBox на форму, необходимо изменить свойство Style в TListBox на lbOwnerDrawFixed. Если не изменить свойство Style, то событие OnDrawItem никогда не вызовется. Теперь поместите следующий код в обработчик события OnDrawItem Вашего TListBox:

Следующая функция имеет один параметр в виде объекта TStrings и печатает каждую строку на принтер, установленный в системе по умолчанию. Так как эта функция использует TStrings, то она будет работать с различными компонентами, которые содержат свойство типа TStrings, такие как TDBMemo или TOutline:

Класс TListbox содержит свойство TabWith:

Code:

ListBox1.TabWith := 50;

ListBox1.Items.Add('Column1'^I'Column2');  // ^I это символ Tab

 

 Автор: Bjarne Winkler

 Пример показывает как можно сохранять в файл содержимое TCheckListBox и соответственно восстанавливать из файла ранее сохранённые состояния Чекбоксов.

 На самом деле всё просто. Метод SaveToFile просто напросто сохраняет в обычном текстовом виде значения чекбоксов. Но предварительно нам нужно преобразовать состояния чекбоксов в текстовый вид, соответственно "1" или "0".

Далее задача метода LoadFromFile считать эти значения и преобразовать сначало в числовой вид, а затем в логический (true или false).

Для этого необходимо установить в инспекторе объектов поле Style в lbOwnerDrawFixed, при фиксированной высоте строки, или в lbOwnerDrawVariable, при переменной, и установить собственный обработчик события для OnDrawItem. В этом обработчике и надо рисовать растровое изображение.

Пример:

Рисуются изображения размером 32*16 (размер стандартного глифа для Delphi). Очень полезно при поиске нужного изображения для кнопок!

Установить в инспекторе объектов для ListBox поле ItemHeight = 19, а поле Color = clBtnFace.

 

Автор: Maarten de Haan

Надеюсь, что любители Delphi уже не один раз приукрашивали всякие ЛистБоксы и тому подобное. Автор исходника предлагает создать этот компонент своими силами.

Впрочем, Вы сами можете увидеть как можно играться со шрифтами в ListBox.

 

Свойство "selected" компонента ТListBox может быть использованно только если свойство MultiSelect установленно в True.

Если Вы работаете с ListBox'ом у которого MultiSelect=false то используйте свойство ItemIndex.

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

begin

       ListBox1.Items.Add('1');

       ListBox1.Items.Add('2');

       {This will fail on a single selection ListBox}

//        ListBox1.Selected[1] := true;

       ListBox1.ItemIndex := 1; {This is ok}

end;

 

 

В Delphi компонент TListBox автоматически включает в себя вертикальный scrollbar. Полоска прокрутки появляется в том случае, если все элементы списка не помещаются в видимую область списка. Однако, list box не показывает горизонтального скролбара, когда ширина элементов превышает ширину списка. Конечно же существует способ добавить горизонтальную полосу прокрутки.

 

 

Code:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

Rect: TRect; State: TOwnerDrawState);

begin

With ListBox1 do

begin

   If odSelected in State then

     Canvas.Brush.Color:=clTeal { твой цвет }

   else

     Canvas.Brush.Color:=clWindow;

   Canvas.FillRect(Rect);

   Canvas.TextOut(Rect.Left+2,Rect.Top,Items[Index]);

end;

end;

 

 

 

Hе забудьте установить свойство Style у своего ListBox в lbOwnerDrawFixed или в

lbOwnerDrawVariable.

После того, как поместите TListBox на форму, необходимо изменить свойство Style в TListBox на lbOwnerDrawFixed. Если не изменить свойство Style, то событие OnDrawItem никогда не вызовется. Теперь поместите следующий код в обработчик события OnDrawItem Вашего TListBox:

 

 

Вот пример с TListbox на форме:

 

Code:

type

TForm1 = class(TForm)

   ListBox1: TListBox;

   procedure FormCreate(Sender: TObject);

protected

   procedure WMDROPFILES (var Msg: TMessage); message WM_DROPFILES;

private

public

end;

 

var

Form1: TForm1;

 

implementation

uses shellapi;

 

{$R *.DFM}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

DragAcceptFiles(Form1.Handle, true);

end;

 

procedure TForm1.WMDROPFILES (var Msg: TMessage);

var

i,

amount,

size: integer;

Filename: PChar;

begin

inherited;

Amount := DragQueryFile(Msg.WParam, $FFFFFFFF, Filename, 255);

for i := 0 to (Amount - 1) do

begin

   size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;

   Filename:= StrAlloc(size);

   DragQueryFile(Msg.WParam,i , Filename, size);

   listbox1.items.add(StrPas(Filename));

   StrDispose(Filename);

end;

DragFinish(Msg.WParam);

end;