Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.124 c
9-1145892476
grisme
2006-04-24 19:27
2007.04.15
Помогите с моделями.


15-1174288578
novoalex
2007-03-19 10:16
2007.04.15
Сабж. Про приборы учета.


4-1164479611
Dmitry_177
2006-11-25 21:33
2007.04.15
Создание меню на API


15-1174476821
Johnmen
2007-03-21 14:33
2007.04.15
Дайте код!


15-1173877098
ArchValentin
2007-03-14 15:58
2007.04.15
Delphi & WindowsVista





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский