Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205

Что за системный цвет используется для подсветки выбранной, но неактивной ячейки в StringGrid в Win10?

28.11.2018, 11:59. Показов 1851. Ответов 10

Студворк — интернет-сервис помощи студентам
Что за системный цвет используется для подсветки выбранной, но неактивной ячейки в StringGrid, если программа запущена под Windows 10?
У меня это какой-то синий, но он не тождественен clHighlight, который используется для этого в Windows XP.
Какое у него имя? Или как узнать его параметры.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2018, 11:59
Ответы с готовыми решениями:

Удаление выбранной ячейки stringgrid
как удалить выбранную ячейку в stringgrid подскажите пожалуйста

StringGrid И цвет ячейки
Уважаемые форумчане подскажите как изменить цвет ячейки в StringGirid (допустим я отредактировал значение в ячейке и после этого...

Цвет ячейки StringGrid
здравствуйте. помогите закрасить 1 ячейку в StringGrid так чтобы информация в из ячейки осталась видна заранее спасибо

10
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
28.11.2018, 17:47
Скорми скриншот участка таблицы любому нормальному графическому редактору, выбери инструмент "Пипетка" или подобное. Он покажет код цвета. Либо сделай свой аналог в билдере.
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
28.11.2018, 20:06  [ТС]
Пытался:
У меня потребность перерисовывать только один столбец, потому не выключал дефолтную рисовку ячеек.
Брал цвет уже нарисованной ячейки, а потом использовал его, рисуя содержимое поверх. Но этот вариант глючит при прокрутке или перемещении окна - черным закрашивается, а не синим.
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
28.11.2018, 23:13
Можешь выложить свой код, а там вдруг кто поможет.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2018, 23:37
Цитата Сообщение от TheDarkMax2 Посмотреть сообщение
как узнать его параметры
Это ж просто...
1 снимок с экрана (с этим цветом)
2 в mspaint "пипеткой" взять цвет на анализ и зарисовать его R G B
3 в своей программе установить полученный цвет

Добавлено через 1 минуту
П.С. продублировал gunslinger'a.
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
29.11.2018, 10:00  [ТС]
Так на разных системах он может быть разным. Фиксированный цвет не вариант.
0
51 / 39 / 15
Регистрация: 20.09.2018
Сообщений: 163
29.11.2018, 12:38
Сделал принтскрин экрана, создал переменную:
C++
1
TColor a=RGB(153,209,255);  /*значения для нужного цвета из принтскрина*/
В отладчике посмотрел чему стал равен а:
C++
1
а=16765337
Пытался найти 16765337 в файле Vcl.Graphics.hpp (где объявлены все константы цветов) и не нашел!
Похоже это не системный цвет, а просто какой-то захардкоженный цвет на усмотрение билдера.

Добавлено через 6 минут
поиск шестнадцатиричного значения ffd199 тоже не дал результатов (
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
29.11.2018, 14:00  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
Можешь выложить свой код, а там вдруг кто поможет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
          TRect &Rect, TGridDrawState State)
{
    if((ACol == 1) && (ARow > 0))
    {
        String TMPstr("");
        TStringGrid *ThisGrid = (TStringGrid *)Sender;
        ThisGrid->Canvas->Brush->Color  =
        ThisGrid->Canvas->Pixels[Rect.Left][Rect.Top];
        ThisGrid->Canvas->Brush->Style  = bsSolid;
        ThisGrid->Canvas->Font->Name    = "Wingdings";
        ThisGrid->Canvas->Font->Size    = 12;
        if(ThisGrid->Cells[ACol][ARow]==L"+") TMPstr = L"";
        if(ThisGrid->Cells[ACol][ARow]==L"-") TMPstr = L"";
        DrawTextW(ThisGrid->Canvas->Handle,TMPstr.c_str(),-1,&Rect,
             DT_LEFT|DT_SINGLELINE|DT_VCENTER);
    }
}
//---------------------------------------------------------------------------
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
29.11.2018, 14:30
Лучший ответ Сообщение было отмечено TheDarkMax2 как решение

Решение

С Vcl.Themes работать надо:

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var Details : TThemedElementDetails;
begin
  if (ACol = 2) and (ARow = 2) then
  begin
    Details := StyleServices.GetElementDetails(tgCellSelected);
    StyleServices.DrawElement((Sender as TStringGrid).Canvas.Handle, Details, Rect);
  end;
end;
нарисует ячейку (2, 2) такого же цвета, как и выбранная.
1
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
29.11.2018, 16:20  [ТС]
Спасибо. Попробовал и получил не тот цвет - более тёмный. Нашёл правильное название:
C++
1
2
3
TThemedElementDetails Details;
Details = StyleServices()->GetElementDetails(tgGradientCellSelected);
StyleServices()->DrawElement(ThisGrid->Canvas->Handle,Details,Rect);
Но DrawElement, как я понял, ячейка рисуется "подложкой", а мне нужно затереть имеющееся содержание. Ну, попробую нарисовать в другую канву и оттуда взять цвет.

Добавлено через 13 минут
Итог:
C++
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
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
          TRect &Rect, TGridDrawState State)
{
    if((ACol == 1) && (ARow > 0))
    {
        TStringGrid *ThisGrid = (TStringGrid *)Sender;
        TBrushStyle OldBS = ThisGrid->Canvas->Brush->Style;
        TColor      OldCB = ThisGrid->Canvas->Brush->Color;
        TColor      OldCF = ThisGrid->Canvas->Font->Color;
        ThisGrid->Canvas->Font->Name    = "Wingdings";
        ThisGrid->Canvas->Font->Size    = 12;
        ThisGrid->Canvas->Brush->Style  = bsSolid;
        //Цвет выделения
        if(State.Contains(gdSelected) && !State.Contains(gdFocused))
        {
            TThemedElementDetails Details;
            Details = StyleServices()->GetElementDetails(tgGradientCellSelected);
            StyleServices()->DrawElement(ThisGrid->Canvas->Handle,Details,Rect);
            ThisGrid->Canvas->Brush->Color =
            ThisGrid->Canvas->Pixels[Rect.Left][Rect.Top];
        }
        //Рисуем новое содержание
        String TMPstr("");
        if(ThisGrid->Cells[ACol][ARow]==L"+")
        {
            TMPstr = L""; //Галочка
            ThisGrid->Canvas->Font->Color = clGreen;
        }
        if(ThisGrid->Cells[ACol][ARow]==L"-")
        {
            TMPstr = L""; //Крестик
            ThisGrid->Canvas->Font->Color = clRed;
        }
        DrawTextW(ThisGrid->Canvas->Handle,TMPstr.c_str(),-1,&Rect,
             DT_LEFT|DT_SINGLELINE|DT_VCENTER);
        ThisGrid->Canvas->Brush->Style  = OldBS;
        ThisGrid->Canvas->Brush->Color  = OldCB;
        ThisGrid->Canvas->Font->Color   = OldCF;
    }
}
//---------------------------------------------------------------------------
0
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
30.11.2018, 11:10  [ТС]
Так проще:
C++
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
    if((ACol == 1) && (ARow > 0))
    {
        TStringGrid *ThisGrid = (TStringGrid *)Sender;
        TBrushStyle OldBS = ThisGrid->Canvas->Brush->Style;
        TColor      OldCB = ThisGrid->Canvas->Brush->Color;
        TColor      OldCF = ThisGrid->Canvas->Font->Color;
        ThisGrid->Canvas->Font->Name    = "Wingdings";
        ThisGrid->Canvas->Font->Size    = 12;
        ThisGrid->Canvas->Brush->Style  = bsSolid;
        //Цвет выделения
        if(State.Contains(gdSelected) && !State.Contains(gdFocused))
        {
            static TColor CellSelClr(clNone);
            if( CellSelClr == clNone )
                CellSelClr = ThisGrid->Canvas->Pixels[Rect.Left][Rect.Top];
            ThisGrid->Canvas->Brush->Color = CellSelClr;
        }
        //Рисуем новое содержание
        String TMPstr("");
        if(ThisGrid->Cells[ACol][ARow]==L"+")
        {
            TMPstr = L"";
            ThisGrid->Canvas->Font->Color = FormOptions->ColorBoxPlus->Selected;
        }
        if(ThisGrid->Cells[ACol][ARow]==L"-")
        {
            TMPstr = L"";
            ThisGrid->Canvas->Font->Color = FormOptions->ColorBoxMinus->Selected;
        }
        DrawTextW(ThisGrid->Canvas->Handle,TMPstr.c_str(),-1,&Rect,
             DT_LEFT|DT_SINGLELINE|DT_VCENTER);
        ThisGrid->Canvas->Brush->Style  = OldBS;
        ThisGrid->Canvas->Brush->Color  = OldCB;
        ThisGrid->Canvas->Font->Color   = OldCF;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2018, 11:10
Помогаю со студенческими работами здесь

Цвет ячейки StringGrid
Есть СтрингГрид (матрица, заполнен целыми числами). По нажатию на кнопку в нем ищутся, допустим, нечетные числа. Как покрасить ячейку с...

Цвет ячейки StringGrid
Нужно сделать так чтобы в stringride выделялось красным цветом фон ячейки с максимальным элементом Вот код.Все работает ОТЛИЧНО. Помогите...

StringGrid: цвет бордюра ячейки
Добрый день, уважаемые. Подскажите пожалуйста можно ли изменять цвет бордюра заданных ячеек stringgrid? Если можно, то как? ...

Цвет краёв ячейки в StringGrid
Можно ли в StringGrid изменить цвет краёв(границ) какой либо ячейки, не закрашивая саму ячейку? Ну или хотя бы изменить толщину границ...

Не могу изменить цвет ячейки StringGrid (Builder 6)
Здравствуйте! Перечитал множество тем по изменению цвета ячеек. Проблему не решил. Необходимо, в зависимости от условия (Cvet=0 или...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru