![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Уважаемые форумчане,
Помогите мне с выбором компонента. Суть использования заключается в следующем: В компоненте должен выводится некий текст, постепенно он будет дополнятся в ходе эксплуатации программы. Требуется, чтобы все записи между собой чередовали свой фоновый цвет. Пример: Запись 1 (белый фон) Запись 2 (серый фон) Запись 3 (белый фон) |
|
#2
|
|||
|
|||
|
Решение найдено.
Можно использовать обычный ListBox и воспользоваться отрисовкой компонента. Код:
procedure TListTest.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
const
HighLight = 'LINE';
var
TempLine, TempText, TempHigh: string;
TempLeft, TempTop, TempStart: Integer;
OldColor: TColor;
begin
with (Control as TListBox).Canvas do
begin
FillRect(Rect);
TempLeft := Rect.Left + 3;
TempTop := Rect.Top + 1;
TempLine := (Control as TListBox).Items[Index];
while TempLine > '' do
begin
TempStart := Pos(HighLight, AnsiUpperCase(TempLine));
if TempStart > 0 then
begin
TempText := Copy(TempLine, 1, TempStart - 1);
TempHigh := Copy(TempLine, TempStart, Length(HighLight));
Delete(TempLine, 1, TempStart + Length(HighLight) - 1);
end
else
begin
TempText := TempLine;
TempHigh := '';
TempLine := '';
end;
if TempText > '' then
begin
TextOut(TempLeft, TempTop, TempText);
Inc(TempLeft, TextWidth(TempText));
end;
if TempHigh > '' then
begin
OldColor := Font.Color;
if odSelected in State then
Font.Color := clYellow
else
Font.Color := clBlue;
TextOut(TempLeft, TempTop, TempHigh);
Inc(TempLeft, TextWidth(TempHigh));
Font.Color := OldColor;
end;
end;
end;
end;Упростил вариант до: Код:
with (Control as TListBox).Canvas do
begin
if index mod 2 <>0 then
begin
Font.Color:=clBlack;
brush.Color:=clSkyBlue;
end
else
begin
Font.Color:=clBlack;
brush.Color:=clWhite;
end;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;Последний раз редактировалось Кодер, 27.11.2010 в 21:12. |