Автор: Bjarne Winkler

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

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

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

Я видел приложение, в котором ListBox позволял осуществлять инкрементальный поиск. При вводе очередного символа он позиционирует вас к первой ячейке, начало значения которой совпадает с введенным пользователем текстом, или выделяет все строки с текстом, содержащим введенный текст.

 

Как это осуществить на Delphi?

 

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

Code:

ListBox1.TabWith := 50;

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

 

 

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:

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

Пример:

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

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

 

Очень просто, смотри пример....

считаем, сто есть поле Edit1, в котором набираем текст, и ListBox, в котором ищем нужную строку, (как в Нelp).

Code:

procedure TForm1.Edit1Change(Sender: TObject);

begin

ListBox1.Perform(LB_SELECTSTRING,-1,longint(Pchar(Edit1.text)));

end;

 

 

Очень удобно выбирать шрифты, когда в списке каждый шрифт написан собой. Например, "Arial" будет написано шрифтом Arial, а "Times" - Times. Список шрифтов лежит в свойстве Fonts объекта Screen.

 

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

 

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

 

 

Вот пример с 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;