Текущий архив: 2007.04.15;
Скачать: CL | DM;
Вниз
ListBox Найти похожие ветки
← →
Washington (2007-03-25 21:23) [0]Как сделать в ListBox"е один элемент жирным (шрифт), а другой обычным? Причём элементы добавляются из ADOQuery.
← →
Джо © (2007-03-25 21:30) [1]OnDrawItem
← →
trubin © (2007-03-25 22:03) [2]
> Причём элементы добавляются из ADOQuery.
А какая разница откуда они добавляются?
← →
Washington (2007-03-26 10:54) [3][code]
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;
[/code]
Это я добавляю элементы в ListBox.]
[code]
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;
[/code]
Это событие onDrawItem.
В итоге вместо 5 элементов разного шрифта вылезает последний.
← →
Washington (2007-03-26 10:57) [4]
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.
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;
Это событие onDrawItem.
В итоге вместо 5 элементов разного шрифта вылезает последний.
Затупил.
← →
_Knight_ (2007-03-26 11:02) [5]Сделай компонент на основе ListBox с новым свойством ItemsFont в котором пропиши шрифты соответствующие итемсам... и отрисовку, чтобы она использовала эти шрифты... дёшего, сердито и всё на автомате. Ну можено ещё компонент поискать в котором это уже реализовано :)
← →
Плохиш © (2007-03-26 11:31) [6]
> Washington (26.03.07 10:57) [4]
Какое отношение к отрисовке ListBox имеет ADOQuery3?
← →
_Knight_ (2007-03-26 11:42) [7]Я так понимаю, что человек хочет задать формат текста сразу при формировании списка ListBox.. при onDraw эти "жирности" надо запоминать где-то ещё, т.к. в самом LostBox механизма хранения этих данных нет...
← →
RASkov (2007-03-26 13:45) [8][4] в корне вобще не верно все... в часности событие onDrawItem.
Если поле "Punkt" числовое, то можно так:
это при добавленииListBox1.AddItem(ADOQuery3.FieldByName("Plan").asString, TObject(ADOQuery3.FieldByName("Punkt").asInteger));
при отрисовкеif Integer(Items.Objects[Index])=1 then Canvas.Font.Style:=Canvas.Font.Style+[fsBold]
else Canvas.Font.Style:=Canvas.Font.Style-[fsBold];
Вот для наглядности:procedure TForm1.FormCreate(Sender: TObject);
var N, J: Integer;
begin
Randomize;
ListBox1.Style:=lbOwnerDrawFixed; ListBox1.Clear;
for N := 0 to 10 do begin
J:=Random(2);
ListBox1.AddItem("Item "+IntToStr(N)+" - "+IntToStr(J), TObject(J));
end;
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with Control as TListBox do begin
if Integer(Items.Objects[Index])=1 then Canvas.Font.Style:=Canvas.Font.Style+[fsBold]
else Canvas.Font.Style:=Canvas.Font.Style-[fsBold];
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2, Rect.Top, Items[Index]);
end;
end;
← →
RASkov (2007-03-26 13:53) [9]> В итоге вместо 5 элементов разного шрифта вылезает последний.
Ну дык ты - "Index:=StrToInt(Label3.Caption);" индекс переназначаешь. Зачем?
А "Label3.Caption = IntToStr(i);", i - в свою очередь равняется ADOQuery3.RecordCount
Вот и получается, что при перерисовки у тебя отрисовывается только i-ый элемент списка.
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
т.е. листбокс содержит i раз i-ый элемент.
Страницы: 1 вся ветка
Текущий архив: 2007.04.15;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.03 c