Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2007, 15:35   #1
PCSpeaker
 
Аватар для PCSpeaker
 
Регистрация: 06.02.2007
Сообщений: 6
Вопрос Цветные строки в листбоксе, нестандарт

Тут такое дело. Хочу чтобы строки выделялись разными цветами. Нашел в инете вот такой вот способ.
Код:
procedure TTest.ListBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TListBox).Canvas do
  begin
    case Index of
      0:
        begin
          Font.Color := clBlue;
          Brush.Color := clYellow;
        end;
      1:
        begin
          Font.Color := clRed;
          Brush.Color := clLime;
        end;
      2:
        begin
          Font.Color := clGreen;
          Brush.Color := clFuchsia;
        end;
    end;
    FillRect(Rect);
    TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
  end;
end;
Все бы ничего, только я хочу сделать, его бесконечным. Строки добавляются программно. Я хотел сделать переменную и поставить ее на место 0: 1: 2: чтобы номер строки с добавлением строк сам увеличивался и подставлялся в эту процедуру. Так проблема оказалась в том, что можно писать на это место только константы. Как быть?
"На тебя не ставлю, ты не обижайся, ты и сам бы не поставил, признайся" (с) Jane Air
PCSpeaker вне форума Ответить с цитированием
Старый 06.02.2007, 15:42   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А теперь по русски алгоритм, который необходимо реализовать с примером кода )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 06.02.2007, 16:15   #3
PCSpeaker
 
Аватар для PCSpeaker
 
Регистрация: 06.02.2007
Сообщений: 6
По умолчанию

Ок =)
Вобщем конечный итог который я хочу получить (вобщем-то какой способ мне все-равно) это - пишешь
dobavitstorku('текст','цвет текста,'фон текста');
и он добавляет.
Для этого у меня есть процедура.
Код:
procedure dobavitstroku(txt:string; color:string; brush:string);
begin
event.color:=color;
event.brush:=brush;
Mainform.List.AddItem(txt,events);
end;
где event.color и event.brush глобальные переменные типа string.
так же у меня есть еще вот такая процедура
Код:
procedure TMainform.ListDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 with (Control as TListBox).Canvas do
    begin
     case index of
        0:
        begin
          if event.color='red' then
          begin
          Font.Color :=clred;
          Brush.Color :=clred;
          end;
            if event.color='blue' then
            begin
            Font.Color :=clblue;
            Brush.Color :=clblue;
            end;
        end;
      1:
      begin
           begin
          if event.color='red' then
          begin
          Font.Color :=clred;
          Brush.Color :=clred;
          end;
            if event.color='blue' then
            begin
            Font.Color :=clblue;
            Brush.Color :=clblue;
            end;
      end;
      end;
      end;
      FillRect(Rect);
      TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
Сделанная из того примера что написан выше. Ее проблема в том, что она работает на 1,2,3 и т.д (в зависимости от того сколько укажу 0: 1: и т.д.) строки, а мне хотелось, чтобы она была универсальная. Сколько строк не добавляй всегда будет работать. Я хотел просто сделать переменную которая будет увеличиваться на 1 при добавлении каждой строки и менять номер в кейсе. Но в кейсе можно писать только константы, а переменные никак...
"На тебя не ставлю, ты не обижайся, ты и сам бы не поставил, признайся" (с) Jane Air
PCSpeaker вне форума Ответить с цитированием
Старый 06.02.2007, 18:44   #4
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

> if event.color='red' then
так не надо делать.

нужно завести палитру (массив цветов)
Index из Case подставлять сразу как индекс массива.
Case тоже не нуженю
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 07.02.2007, 01:08   #5
PCSpeaker
 
Аватар для PCSpeaker
 
Регистрация: 06.02.2007
Сообщений: 6
По умолчанию

Цитата:
нужно завести палитру (массив цветов)
Да я думал об этом, но рук не хватило, чтобы это сделать.
Я пробовал сделать что-то вроде cvet:tcolor; Буду очень признателен, если бы вы рассказали поподробнее.
Цитата:
Index из Case подставлять сразу как индекс массива.
Какого именно массива? массива цветов? если да, то я не очень понял задумки.
Цитата:
Case тоже не нужен
А вообще можно как-то присваивать цвета конкретным строкам, к примеру каким-нибудь подобным образом как list.index[5].font.color:=clred;

Извините, что возможно задаю глупые вопросы, просто прогал раньше только на паскале, дельфи еще знаю плохо.
"На тебя не ставлю, ты не обижайся, ты и сам бы не поставил, признайся" (с) Jane Air

Последний раз редактировалось PCSpeaker; 07.02.2007 в 01:17.
PCSpeaker вне форума Ответить с цитированием
Старый 07.02.2007, 22:07   #6
PCSpeaker
 
Аватар для PCSpeaker
 
Регистрация: 06.02.2007
Сообщений: 6
По умолчанию

Все мне помогли на другом форуме, тема больше не актуальна
"На тебя не ставлю, ты не обижайся, ты и сам бы не поставил, признайся" (с) Jane Air
PCSpeaker вне форума Ответить с цитированием
Старый 08.02.2007, 07:41   #7
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

мда... Вот так..
А решение/подсказку можешь выложить?
zetrix вне форума Ответить с цитированием
Старый 10.02.2007, 21:00   #8
PCSpeaker
 
Аватар для PCSpeaker
 
Регистрация: 06.02.2007
Сообщений: 6
По умолчанию

Цитата:
Что-нить на подобие этого (не проверяю, пишу вслепую):

Код: TListColor = class
public
FontColor: TColor;
BGColor: TColor;
constructor Create(AFontColor, ABGColor: TColor);
end;

constructor TListColor.Create(AFontColor, ABGColor: TColor);
begin
inherited Create;
FontColor := AFontColor;
BGColor := ABGColor;
end;


Код: procedure dobavitstroku(txt: string; FontColor, BGColor: TColor);
begin
Mainform.List.AddItem(txt, TListColor.Create(FontColor, BGColor));
end;

Код: procedure TMainform.ListDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox).Canvas,
(Control as TListBox).Items.Objects[Index] as TListColor do
begin
Font.Color := FontColor;
Brush.Color := BGColor;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;
(с) FreeLander
"На тебя не ставлю, ты не обижайся, ты и сам бы не поставил, признайся" (с) Jane Air
PCSpeaker вне форума Ответить с цитированием
Старый 11.02.2007, 00:20   #9
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

А можно не особо парясь сделать так:

Код:
Font.Color := Random(17);
Brush.Color := Random(17);
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 11.02.2007, 19:19   #10
PCSpeaker
 
Аватар для PCSpeaker
 
Регистрация: 06.02.2007
Сообщений: 6
По умолчанию

И что это даст? если нужно чтобы каждая строчка была определенного цвета? тем более так будет меняться цвет листа целиком, а не конкретной строчки.
"На тебя не ставлю, ты не обижайся, ты и сам бы не поставил, признайся" (с) Jane Air
PCSpeaker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цветные строки в TListView Johnson Компоненты Delphi 6 18.07.2008 15:07
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Цветные строки Altera Компоненты Delphi 4 12.02.2008 18:49
номер элемента в листбоксе RoadTrain Общие вопросы Delphi 2 20.11.2007 15:54
как вывести строку поочередно сначала первая буква первой строки потом первая буква второй строки и т.д. vitalik007 Помощь студентам 1 25.09.2007 20:45