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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2008, 00:52   #1
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
Вопрос Форма с разноцветными надписями

Здравствуйте! Подскажите, что то я сам не могу придумать. Есть массив записей, каждая запись это String, String, Boolean. Нужно вывести на форму список всех текстовых записей, причём записи, у которых третья переменная равна False, их нужны выводить красным цветом.
На сколько я знаю, стандарные компоненты (stringGrid, Label, Memo) не позволяют разные фрагменты текста делать разными цветами.
eks-s вне форума Ответить с цитированием
Старый 22.02.2008, 01:17   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
На сколько я знаю, стандарные компоненты (stringGrid, Label, Memo) не позволяют разные фрагменты текста делать разными цветами.
Ну почему...
В StringGrid-е вы можете раскидать свои данные по трем столбцам и в зависимости от содержимого третьего столбца красить первые два.
Уберете линии - будет выглядеть как листбокс...
Вопрос раскраски гридов неоднократно у нас рассматривался, поэтому не привожу.
В конце концов, можно даже каждую запись отображать в трех разноцветных лейблах...
mihali4 вне форума Ответить с цитированием
Старый 22.02.2008, 02:52   #3
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Спасибо, именно тремя лэйблами и хотел сделать, но массив динамический, создавать новые label на форме? брр... А с гридами спасибо, щас поищу

P.S. А почему в таблице первая ячейка синим выделена? как от этого избавиться?

Последний раз редактировалось eks-s; 22.02.2008 в 02:55.
eks-s вне форума Ответить с цитированием
Старый 22.02.2008, 03:43   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Можно еще проще.

Form1.Canvas.Font.Color := clRed;
Form1.Canvas.TextOut(10,10, 'Превед, медвед!');

Что-то в этом духе
Баламут вне форума Ответить с цитированием
Старый 22.02.2008, 10:57   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
почему в таблице первая ячейка синим выделена? как от этого избавиться?
Эта ячейка имеет в State параметр gdSelected, т.е. она выделена.
При обработке события OnDrawCell вы сможете от этой закраски избавиться, игнорируя состояние ячейки и назначая цвет фона и шрифта без учета этого свойства, либо назначить другой, более подходящий (по вашему мнению) цвет.

Последний раз редактировалось mihali4; 22.02.2008 в 17:20.
mihali4 вне форума Ответить с цитированием
Старый 22.02.2008, 12:09   #6
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

Включи в ListBox свойство style в lbvirtual
а в реакции на ONDrawItem пиши что пожелаешь (хоч можеш и каждую строку разным цветом покрасить)
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Старый 22.02.2008, 16:37   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

StringGrid или ListBox по желанию, что лучше подходит.
И в том и в другом обрабатывать событие отрисовки, если динамически записи могут меняться, то после изменения вызывать отрисовку чтобы изменения отобразились.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.02.2008, 15:02   #8
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Эта ячейка имеет в State параметр gdSelected, т.е. она выделена.
При обработке события OnDrawCell вы сможете от этой закраски избавиться, игнорируя состояние ячейки и назначая цвет фона и шрифта без учета этого свойства, либо назначить другой, более подходящий (по вашему мнению) цвет.
Что то я не могу разобраться, подскажите пожалуйста. Пишу вот так,
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (gdFocused in State) then
...а дальше?
Код:
    StringGrid1.Canvas.Brush.Color := clWhite;
    StringGrid1.Canvas.Font.Color := clBlack;
так? или можно просто не выделять ячейку? как его (состояние) игнорировать?
eks-s вне форума Ответить с цитированием
Старый 23.02.2008, 22:52   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как его (состояние) игнорировать?
Просто не анализировать
if (gdFocused in State) then
if (gdSelected in State) then
Правда, тогда вы не сможете что-либо выделять (просто не видно будет выделения), но, как я понял, вам это и не нужно...
mihali4 вне форума Ответить с цитированием
Старый 26.02.2008, 00:26   #10
eks-s
Пользователь
 
Регистрация: 15.01.2008
Сообщений: 64
По умолчанию

Спасибо всем огромное, лучшый форум
eks-s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форма blackstersl Мультимедиа в Delphi 1 23.08.2008 19:03
Форма Killbrum Помощь студентам 8 21.08.2008 18:48
Форма subsonic Общие вопросы Delphi 5 10.01.2008 11:18
форма... Briz Общие вопросы Delphi 8 22.10.2007 17:26
Форма MAcK Общие вопросы Delphi 4 07.02.2007 01:43