Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для maisdanel
8 / 8 / 3
Регистрация: 01.02.2010
Сообщений: 154

ListBox, как сделать цветную, допустим синюю только 5-ую сточку в списке?

13.08.2010, 16:08. Показов 4383. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Delphi!? ListBox, как сделать цветную, допустим синюю только 5-ую сточку в списке?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.08.2010, 16:08
Ответы с готовыми решениями:

как сделать чтобы один юзер мог нажать только допустим только 2 раза
Можно так сделать? Если так то как.

Как получить значение элемента ListBox, а не только его номер в списке?
При запуске Excel отрабатывает макрос, который рисует на активном листе ListBox и назначает ему макрос 'macros2'. Set myListBox1 =...

Как сделать цветную рамку компонента
Подскажите, как сделать так, что бы при клике например по memo, ее края (рамка) стали заданного цвета?

7
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
13.08.2010, 16:27
Лучший ответ Сообщение было отмечено как решение

Решение

Maisdanel, посмотри в этом посте. Здесь в TListBox раскрашиваются разными цветами (цвет текста и фона) элементы с чётными и нечётными индексами. В той теме в следующих постах - различные варианты реализации.
3
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
13.08.2010, 16:31
Лучший ответ Сообщение было отмечено как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TListbox do
  begin
    if Index = 4 then
      Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect);
    Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top, Items[Index]);
  end;
end;
3
weboman
 Аватар для Schtrich
210 / 195 / 63
Регистрация: 13.08.2010
Сообщений: 1,531
Записей в блоге: 6
13.08.2010, 18:04
Цитата Сообщение от Inadequate Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TListbox do
  begin
    if Index = 4 then
      Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect);
    Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top, Items[Index]);
  end;
end;
Это только прилюдия. Вообще нужно чтобы в ListBox был цветной курсор и перемещался по строчками, в ListBox должны быть две строчки синим цветом, допустим 5 и 8, когда курсор на одной из этих строчек, то Item должен быть оранжевого цвета. (вся эта история связанная с программой типа "Кто хочет стать миллионером", в ListBox'е которого должны быть очки, ну соотв. незгараемые суммы). Как быть в таком случае??? а то просто поменять цвет текста это не выход...
2
18 / 6 / 2
Регистрация: 01.06.2010
Сообщений: 71
13.08.2010, 22:23
юзай выше изложенный код. вот я немного его дополнил:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  if (Index = 5) or (Index = 8) then
   begin
    Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect);
   end;
  
  if (odSelected in State) or (odFocused in State) then
   begin 
    Canvas.Brush.Color := [цвет выделенного курсора];
    Canvas.FillRect(Rect);
   end;
 
 Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]);
end;
2
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
13.08.2010, 23:58
Лучший ответ Сообщение было отмечено как решение

Решение

Вот ещё вариант. Первые 3 элемента раскрашиваются в разные цвета. Для каждого цвета есть два оттенка - для активного (выбранного) и неактивного состояния. Остальные элементы 4, 5, ... - красятся в одинаковый цвет. Для них так же есть цвет активного и неактивного состояния. Этот вариант можно доработать под свои нужды, задать все предполагаемые варианты цветов и пр.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ListBox1: TListBox;
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
var
  //Активный (выбранный) элемент в ListBox на момент последней перерисовки.
  gLastItemIndex : Integer = -1;
 
//Установка цвета для элемента.
procedure SetItemColor(const aIndex : Integer; aLb : TListBox; const aRect : TRect);
var
  Cv : TCanvas;
begin
  Cv := aLb.Canvas;
 
  //Если текущий элемент является активным (выбранным).
  if aLb.ItemIndex = aIndex then begin
    case aIndex of
      0 : begin
        Cv.Brush.Color := RGB(100, 200, 200);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
      1 : begin
        Cv.Brush.Color := RGB(200, 100, 200);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
      2 : begin
        Cv.Brush.Color := RGB(200, 200, 100);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
      else begin
        Cv.Brush.Color := RGB(255, 255, 255);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(0, 0, 0);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
    end;
  //Если текущий элемент не является активным (не выбран).
  end else begin
    case aIndex of
      0 : begin
        Cv.Brush.Color := RGB(100, 150, 150);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
      1 : begin
        Cv.Brush.Color := RGB(150, 100, 150);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
      2 : begin
        Cv.Brush.Color := RGB(150, 150, 100);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
      else begin
        Cv.Brush.Color := RGB(240, 240, 240);
        Cv.FillRect(aRect);
        Cv.Font.Color := RGB(0, 0, 0);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
      end;
    end;
  end;
end;
 
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
type
  //Тип структуры для хранения сведений о цвете кисти и пера.
  TCnvSet = record
    BrushColor : TColor;
    FontColor  : TColor;
  end;
var
  Lb : TListBox;
  Cv : TCanvas;
  CnvSet : TCnvSet;
begin
  Lb := Control as TListBox;
  Cv := Lb.Canvas;
 
  //Запоминаем текущие параметры канвы.
  CnvSet.BrushColor := Cv.Brush.Color;
  CnvSet.FontColor := Cv.Font.Color;
 
  //Красим элемент.
  SetItemColor(Index, Lb, Rect);
 
  //Если активным теперь является другой элемент, то надо
  //изменить цвет предыдущего активного элемента - его цвет
  //надо сделать соответствующим неактивному состоянию.
  if ( gLastItemIndex <> -1 ) and ( Index <> gLastItemIndex ) then begin
    SetItemColor( gLastItemIndex, Lb, Lb.ItemRect(gLastItemIndex) );
  end;
 
  //Запоминаем индекс текущего активного элемента.
  gLastItemIndex := Lb.ItemIndex;
 
  //Восстанавливаем прежние параметры канвы.
  Cv.Brush.Color := CnvSet.BrushColor;
  Cv.Font.Color := CnvSet.FontColor;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to 8 do begin
    ListBox1.Items.Add('Элемент №' + IntToStr(i));
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  ListBox1.Clear;
end;
 
end.
Миниатюры
ListBox, как сделать цветную, допустим синюю только 5-ую сточку в списке?  
Вложения
Тип файла: rar ColoredListBox.rar (166.3 Кб, 59 просмотров)
3
1 / 1 / 0
Регистрация: 30.10.2010
Сообщений: 9
30.10.2010, 20:31
Народ , вот я вижу обсуждение идет цвета строк , а вот у меня немного дургой вопрос по этой теме :

А КАК сменить цвет выделенного текста , строки ? при выделении текст в строке белый , как сделать что б он был допустим синий?
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
31.10.2010, 00:06
Цвет текста меняется через свойство канвы: Canvas.Font.Color. В коде из моего предыдущего поста цвет текста тоже меняется. Например, белый цвет:
Delphi
1
2
        Cv.Font.Color := RGB(255, 255, 255);
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
Синий можно так задать:
Delphi
1
2
        Cv.Font.Color := RGB(0, 0, 255); //Синий или голубой.
        Cv.TextOut(aRect.Left, aRect.Top, aLb.Items[aIndex]);
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2010, 00:06
Помогаю со студенческими работами здесь

Как сделать чтоб показывало только те записи по которым идёт поиск в раскрывающемся списке
Как сделать чтоб показывало только те записи по которым идёт поиск в раскрывающемся списке??

Delphi 2007 CodeGear!? Как сделать цветную кнопку?
Я знаю что для Delphi 7.0 есть компонент TColorBtn, на 7 у меня он установился и работал все ок!, а вот как инсталлировать этот комп-нт в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru