with ADOQuery3 do
begin
close;
SQL.Clear;
SQL.Add('Select Plan,Punkt');
SQL.Add('From Organaiser');
open;
end;
m:=ADOQuery3.RecordCount;
for i:=1 to m do
begin
ListBox1.AddItem(ADOQuery3.FieldByName('Plan').asString,nil);
Label3.Caption:=IntToStr(i);
ADOQuery3.Next;
end;
Можно ли в ListBox'е текст в одном Item'е сделать жирным(шрифт), а в другом обычным?
Можно ли в ListBox'е один Item сделать жирным (шрифт), а другой обычным и т.д.?
Скорее всего только через событие OnDrawItem
Пробовал. Не получается, т.к. элементы добавляются из ADOQuery.
Достаточно в событии OnDrawItem проверять, является ли текущий элемент нужным тебе. Если нужный, то делаешь шриф жирным.
Тут никаких проблем возникнуть не должно.
Код:
Это я добавляю элементы в ListBox.]
Код:
Index:=StrToInt(Label3.Caption);
if ADOQuery3.FieldByName('Punkt').AsInteger=1 then
begin
with (Control as TListBox).Canvas do
begin
Font.Style:=[fsBold];
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;
if ADOQuery3.FieldByName('Punkt').AsInteger=1 then
begin
with (Control as TListBox).Canvas do
begin
Font.Style:=[fsBold];
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;
Это событие onDrawItem.
В итоге вместо 5 элементов разного шрифта вылезает последний.
И кроме того:
Код:
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
Должно выполняться в любом случае, а не только при определенном условии (это прорисовка текущего "прямоугольника" и вывод текста на него).
Кроме того, значение Index, тебе передается в параметрах OnDrawItem, поэтому непонятно зачем его получать через заголовок Label.
Добавление итемов
Код:
ListBox1.Items.Objects[ListBox1.Items.Add('value1')] := TObject(1);
ListBox1.Items.Objects[ListBox1.Items.Add('value2')] := TObject(0);
ListBox1.Items.Objects[ListBox1.Items.Add('value2')] := TObject(0);
OnDrawItem
Код:
with (Control as TListBox).Canvas do
begin
FillRect(Rect);
if Integer((Control as TListBox).Items.Objects[Index]) = 1 then
Font.Style:=[fsBold];
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
begin
FillRect(Rect);
if Integer((Control as TListBox).Items.Objects[Index]) = 1 then
Font.Style:=[fsBold];
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;