Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.11.2010, 20:48
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию Помогите с выбором компонента

Уважаемые форумчане,
Помогите мне с выбором компонента. Суть использования заключается в следующем:
В компоненте должен выводится некий текст, постепенно он будет дополнятся в ходе эксплуатации программы.
Требуется, чтобы все записи между собой чередовали свой фоновый цвет.

Пример:
Запись 1 (белый фон)
Запись 2 (серый фон)
Запись 3 (белый фон)
Ответить с цитированием
  #2  
Старый 27.11.2010, 20:57
Кодер Кодер вне форума
Активный
 
Регистрация: 25.02.2008
Сообщения: 395
Репутация: -599
По умолчанию

Решение найдено.
Можно использовать обычный 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025