Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.066 c
2-1174959952
>>DEATH<<
2007-03-27 05:45
2007.04.15
помогите исправить ошибку


2-1174900751
lobach
2007-03-26 13:19
2007.04.15
Разделители


9-1146341758
Pa5ha
2006-04-30 00:15
2007.04.15
Солнце на OpenGL


11-1143026595
Unknown Mystic
2006-03-22 14:23
2007.04.15
Задание StateImage для эл-тов TKOLTreeView при создании формы.


15-1174563889
Смаг
2007-03-22 14:44
2007.04.15
Запоздалая медицинская помощь