flag:=0;
y3:=StrToInt(Table1.Fields.Fields[0].AsString);
y4:=StrToInt(Table1.Fields.Fields[3].AsString);
IF (y4<dan[y3,1])and(dan[y3,1]<>0) then flag:=1;
IF (y4>dan[y3,2])and(dan[y3,2]<>0) then flag:=2;
If flag>0 then
begin
case flag of
1:Label1.Caption:='Вывожу сообшение №1'+IntToStr(y3)+'!!!';
2:Label1.Caption:='Вывожу сообшение №2'+IntToStr(y3)+'!!!';
end;
end;
Table1.Next;
ListBox1.Items.Add('вывожу здесь все значения');
Окрасить строку LIstBox другим цветом
Зарание благодарен!!!
1. Значение св-ва Style у ListBox'a измени на FixedOwnerDraw
2. В событии ListBox'a OnDrawItem пропиши это:
[highlight=delphi]
with TListbox(Control).Canvas do begin
Brush.Color:=<нужный цвет>;
FillRect(Rect);
TextOut(Rect.Left+2, Rect.Top, TListbox(Control).Items[Index]);
end;
[/highlight]
У меня в ListBox постояно идёт запись, проверяются значения и мне необходимо при не совпадении закрасить данную строку...
Возможно ли это? подскажите как?
Код:
[highlight=delphi]
with TListbox(Control).Canvas do begin
len := length(TListbox(Control).Items[Index]);
flag := copy(TListbox(Control).Items[Index],1,1);
case flag of
'1': Brush.Color := <нужный цвет>;
'2': Brush.Color := <нужный цвет>;
FillRect(Rect);
TextOut(Rect.Left + 2, Rect.Top, copy(TListbox(Control).Items[Index]), 2, len - 1);
end;
[/highlight]
Возможно метод индейский, но у меня работал исправно. Возьми идею и переделай под свои нужды.
А зачем портить исходные данные, когда каждый элемент ListBox имеет дополнительное свойство для данных (TListBox.Items.Objects[Index])? ИМХО, самый нормальный вариант - под флаги состояний использовать именно его ;) .
Можно и так. Видимо это будет то же самое, но не по индейски ;)
в любом случае спасибо!!!
Код:
begin
// ...
flag:=0;
y3:=StrToInt(Table1.Fields.Fields[0].AsString);
y4:=StrToInt(Table1.Fields.Fields[3].AsString);
if (y4 < dan[y3, 1]) and (dan[y3, 1] <> 0) then flag:=1;
if (y4 > dan[y3, 2]) and (dan[y3, 2] <> 0) then flag:=2;
ListBox1.AddItem(value, TObject(flag)); // value - значение элемента в TListBox
Table1.Next;
// ...
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with Control as TListBox do
begin
case Integer(Items.Objects[Index]) of
1: Brush.Color:=<нужный цвет>;
2: Brush.Color:=<нужный цвет>;
end;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
end;
end;
// ...
flag:=0;
y3:=StrToInt(Table1.Fields.Fields[0].AsString);
y4:=StrToInt(Table1.Fields.Fields[3].AsString);
if (y4 < dan[y3, 1]) and (dan[y3, 1] <> 0) then flag:=1;
if (y4 > dan[y3, 2]) and (dan[y3, 2] <> 0) then flag:=2;
ListBox1.AddItem(value, TObject(flag)); // value - значение элемента в TListBox
Table1.Next;
// ...
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with Control as TListBox do
begin
case Integer(Items.Objects[Index]) of
1: Brush.Color:=<нужный цвет>;
2: Brush.Color:=<нужный цвет>;
end;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
end;
end;
пишит что не найден идентификатор 'Items'
если описываю как Integer пишит: Array type required
и ешё вопросик: Что есть ...,2, len-1);? если можно распишите что указывают эти значения. И переменая len чему здась равна?
в приведёном коде нету ни кого присваения этой переной
Заранее спасибо.
Упс!... Ступил :) Подправил код в своем предыдущем посте ;)
makbeth и Washington Огромнейшее спасибо, как раз то что мне надо!!:)