Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 17.10.2021
Сообщений: 29

Получить RGB составляющие цвета из строки с наименованием цвета из буфера обмена

17.10.2021, 21:50. Показов 2636. Ответов 7

Студворк — интернет-сервис помощи студентам
Pascal ABC.NET
В справке (Стандартные модули\Модуль GraphABC\) есть таблица "Цветовые константы".
Цветовые константы представлены в виде некоего "наименования цвета".
Например, у цвета "золотой" имя "clGold".
Эти цветовые константы были скопированы из справки и вставлены в Word в таблицу.
То есть, имеется ячейка таблицы в Word-е, в которой хранится значение (наименование) цвета.
Захотел залить ячейку цветом, наименование которого в ячейке хранится.
===
Написал небольшую программу, в которую (в переменную "с") ввожу скопированное из ячейки Word-а значение.
Программа получает из наименования Цвета его RGB-значения и записывает это в текстовый файл.
Далее в модуле GraphABC рисуется небольшой прямоугольник и заливается Цветом.
===
В Word-е на ленте разместил кнопку, к которой привязал маленькую программу, написанную на
VBA. Прграммка читает из текстового файла строку с RGB-значением Цвета, получает из строки RGB-значения Цвета. И заливает ячейку Цветом.
===
Так все работает.

Вот программа:

Pascal
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
##
uses System.Windows.Forms, GraphABC;
 
 
SetWindowSize(250, 120);
SetWindowCaption('цвета и r g b - значения');
 
//var c := Clipboard.GetText;       // переменная - цвет !!! получаем из буфера обмена
{Это не работает. Компилятор ругается "Нельзя преобразовать тип string к System.Drawing.Color"}
 
//var cl := c.ToColor;
var c: color := clGold;
 
var r := GetRed(c);     // Возвращает красную составляющую цвета
var g := GetGreen(c);   // Возвращает зеленую составляющую цвета
var b := GetBlue(c);    // Возвращает синюю составляющую цвета
println(c);                   // печать названия цвета
var color: string := r.ToString + ', ' + g.ToString + ', ' + b.ToString;
WriteAllText('d:\PABCWork.NET\color.txt', color); 
 
print(r, g, b);               // печать r g b - значения цвета
setpenwidth(1);               // установили толщину пера = 1
setpencolor(clGray);          // установили цвет пера
 
moveTo(50, 50);       // перо в точку 50, 50
lineTo(200, 50);      // линия до точки 200, 50
lineto(200, 100);     // линия до точки 200, 100
lineto(50, 100);      // линия до точки 50, 100
lineto(50, 50);       // линия до точки 50, 50      
floodfill(75, 75, c); // от точки 75, 75 заливаем цветом
===
Захотел исключить из цепочки действий (копирование из ячейки Word-а значения Цвета → вставка этого значения в программу) второе звено цепочки - вставку. Пусть программа получает строку со значением цвета из буфера обмена. Получать-то она получает, но дальше при попытке получить из строки значение GetRed(c) начинает ругаться "Нельзя преобразовать тип string к System.Drawing.Color"

Может быть кто-то поможет справиться с этим местом:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
##
uses System.Windows.Forms, GraphABC;
 
 
SetWindowSize(250, 120);
SetWindowCaption('цвета и r g b - значения');
 
var c := Clipboard.GetText;       // переменная - цвет !!! получаем из буфера обмена
{Это не работает. Компилятор ругается "Нельзя преобразовать тип string к System.Drawing.Color"}
 
//var cl := c.ToColor;
//var c: color := clGold;
 
var r := GetRed(c);     // Возвращает красную составляющую цвета
var g := GetGreen(c);   // Возвращает зеленую составляющую цвета
var b := GetBlue(c);    // Возвращает синюю составляющую цвета
println(c);                   // печать названия цвета
var color: string := r.ToString + ', ' + g.ToString + ', ' + b.ToString;
WriteAllText('d:\PABCWork.NET\color.txt', color);
===
Если мою просьбу изложить коротко, без предисловия, то нужно из строки с наименованием цвета (например clGold) получить RGB-составляющие цвета.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.10.2021, 21:50
Ответы с готовыми решениями:

Нужно разложить код цвета на составляющие Red, Green, Blue (функция, обратная RGB)
Я знаю код цвета в виде переменной типа Long (например, как свойство range("a1").interior.color). Цвет в VBA может задаваться через...

Напишите и отладьте программу с подпрограммой, которая и строит RGB-код цвета, 4-битные составляющие которого
Напишите и отладьте программу с подпрограммой, которая и строит RGB-код цвета, 4-битные составляющие которого (R, G и B), записаны...

Напишите и отладьте программу с подпрограммой, которая и строит RGB-код цвета, 4-битные составляющие которого
Напишите и отладьте программу с подпрограммой, которая и строит RGB-код цвета, 4-битные составляющие которого (R, G и B), записаны...

7
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
18.10.2021, 04:37
Зачем все эти костыли?

Берёте таблицу цветов с сайта Microsoft: https://docs.microsoft.com/ru-... mework-4.8

Копируете её в Word.
Убираете таблицу преобразовав её в текст с разделителями „знак абзаца“.
Немного форматируете:
— поиском и заменой удаляем все „Возвращает определенный системой цвет, имеющий ARGB-значение “
— пробегаем и руками удаляем все надписи вида
„A
Получает значение альфа-компонента этой структуры Color.“
и
„B
Получает значение синего компонента этой структуры Color.“
и
„IsEmpty
Определяет, является ли эта структура Color неинициализированной.“
и т.д. оставляя только цветовые константы…

— снова поиском и заменой удаляем точки в конце строки, а переносы между названием и значением заменяем на „ &H“

В итоге получаем список цветов готовый для использования в VBA
Code
1
2
3
4
5
6
7
8
9
AliceBlue &HF0F8FF
AntiqueWhite &HFAEBD7
Aqua &H00FFFF
Aquamarine &H7FFFD4
Azure &HF0FFFF
Beige &HF5F5DC
Bisque &HFFE4C4
Black &H000000
и т.д.
В Ворде используете его для своих заливок…

… а в паскале отказываетесь от использования GraphABC в пользу GraphWPF,
в котором для вызова цвета пишете „Colors“, жмёте „.“ и видите именно те названия, которые были взяты с сайта!

Опять-же, а зачем всё это?
Зачем заучивать или подглядывать как называется цвет, если всегда можно использовать функцию rgb или argb,
подобрав все составляющие в любом графическом редакторе… хоть в Paint!
0
 Аватар для XzzzX
405 / 280 / 120
Регистрация: 09.07.2021
Сообщений: 1,016
Записей в блоге: 1
18.10.2021, 07:30
честно говоря ничего не понял, но парсят цвет из названия так:
Code
1
system.Drawing.Color.FromName('ColorName');
это на паскаль

Добавлено через 9 минут
Code
1
GraphAbc.Color.FromName('ColorName');
ну или так, если речь о GraphAbc
1
1 / 1 / 0
Регистрация: 17.10.2021
Сообщений: 29
18.10.2021, 13:32  [ТС]
JuriiMW, спасибо за попытку помочь, но Вы не поняли сути вопроса.
Мне не нужны цвета из таблицы с сайта Microsoft.
Я беру названия цветов из справки по Pascal ABC.NET: https://u.to/9T6uGw
В Word-е создал таблицу, в ячейках которой названия цветов.
Задача - залить ячейку цветом, название которого в ячейке хранится.
Вот фрагмент кода, который позволяет залить ячейку цветом RGB-значения которого берутся или из текстового файла, или из буфера обмена.
Visual Basic
1
2
3
4
5
6
7
Open "d:\PABCWork.NET\color.txt" For Input As #1 
     Input #1, r        ' прочтется значение до разделителя (до запятой)    [r]
     Input #1, g        ' прочтется следующее значение (после запятой)      [g]
     Input #1, b        ' прочтется следующее значение (после запятой)      [b]
    Close #1 ' Закрываем файл
    
    Selection.Shading.BackgroundPatternColor = RGB(r, g, b)
Со стороны Word-а и VBA все работает и ячейка заливается соответствующим цветом.
У меня проблема с Паскалем.
Копирую из вордовской ячейки название цвета.
Вставляю его в программу.
Программа из названия цвета извлекает RGB-составляющие цвета и заносит их в текстовый файл (или в буфер обмена).

Pascal
1
2
3
4
5
6
7
8
var c: color := clGold;
 
var r := GetRed(c);     // Возвращает красную составляющую цвета
var g := GetGreen(c);   // Возвращает зеленую составляющую цвета
var b := GetBlue(c);    // Возвращает синюю составляющую цвета
println(c);                   // печать названия цвета
var color: string := r.ToString + ', ' + g.ToString + ', ' + b.ToString;
WriteAllText('d:\PABCWork.NET\color.txt', color);
Но я не могу сделать так, чтобы RGB-составляющие цвета извлекались не из строкового литерала, который я подставляю в программу в качестве значения переменной, а чтобы эти RGB-составляющие цвета извлекались из строкового литерала, который программа получает через буфер обмена.
Как-то вот так:
Pascal
1
2
3
4
5
6
7
8
var c := Clipboard.GetText;
var cl :=system.Drawing.Color.FromName(c);
var r := GetRed(cl);     // Возвращает красную составляющую цвета
var g := GetGreen(cl);   // Возвращает зеленую составляющую цвета
var b := GetBlue(cl);    // Возвращает синюю составляющую цвета
 
var color: string := r.ToString + ', ' + g.ToString + ', ' + b.ToString;
WriteAllText('d:\PABCWork.NET\color.txt', color);
Но это не работает.

На картинке - часть таблицы с цветами
Миниатюры
Получить RGB составляющие цвета из строки с наименованием цвета из буфера обмена  
0
1 / 1 / 0
Регистрация: 17.10.2021
Сообщений: 29
18.10.2021, 13:42  [ТС]
XzzzX, Спасибо большое за помощь.
Почти заработало.
Pascal
1
2
3
4
5
6
7
8
9
var c := Clipboard.GetText;       // переменная - цвет !!! получаем из буфера обмена
var cl := system.Drawing.Color.FromName(c);
 
var r := GetRed(cl);       // должна возвращать красную составляющую цвета. Возвращает значение "0"
var g := GetGreen(cl);   // Возвращает значение "0" вместо значения зеленой составляющей
var b := GetBlue(cl);     // Возвращает значение "0" вместо значения синей составляющей
println(c);                     // печать названия цвета
var color: string := r.ToString + ', ' + g.ToString + ', ' + b.ToString;
WriteAllText('d:\PABCWork.NET\color.txt', color);
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
18.10.2021, 13:54
cfgrem, а зачем Вам получать ПО ОДНОМУ ЦВЕТУ (да ещё и через буфер обмена), когда легко и непринуждённо можно получить ВСЕ цвета одним махом и при этом программа на Паскале Вам вообще не будет нужна (всё, что нужно будет в файле, например, AllColors.txt
0
1 / 1 / 0
Регистрация: 17.10.2021
Сообщений: 29
18.10.2021, 16:01  [ТС]
mr-Crocodile, "все цвета одним махом" уже есть вот здесь: https://u.to/9T6uGw
В Word-е создал таблицу, в ячейках которой названия цветов из вышеуказанного источника.
Задача - залить ячейку цветом, название которого в ячейке хранится.
Одна ячейка - один цвет, поэтому и "ПО ОДНОМУ ЦВЕТУ"
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
18.10.2021, 16:48
Цитата Сообщение от cfgrem Посмотреть сообщение
"все цвета одним махом" уже есть вот здесь: https://u.to/9T6uGw
ты меня не понял.
"Все цвета одним махом" - это то, о чём тебе выше писал JuriiMW - не только перечень цветов, но и их реальный цвет в RGB (например, раз тебе так удобнее), формате.

и дальше по этим цветам можно раскрасить все ячейки в Word, не тыкая по каждой отдельно.

Хотя, конечно, абсолютно непонятно, зачем это может понадобиться кому-то, ибо верно сказано:
Цитата Сообщение от JuriiMW Посмотреть сообщение
Опять-же, а зачем всё это?
Зачем заучивать или подглядывать как называется цвет, если всегда можно использовать функцию rgb или argb,
подобрав все составляющие в любом графическом редакторе… хоть в Paint!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2021, 16:48
Помогаю со студенческими работами здесь

Изменение цвета прямоугольника, увеличивая или уменьшая составляющие цвета (почему не работает программа?)
2.2 Работа с кнопками и цветом Приложение позволяет изменять цвет прямоугольника, увеличивая или уменьшая составляющие цвета. Задание ...

Получить компоненту цвета RGB
Имеется структура struct SNOWFLAKE { unsigned N; // кол- во звеньев (уровней) (вид изображения) unsigned P; // кол-во ветвей в...

Получить RGB по коду цвета
Здравствуйте. Имеются файлы. Несжатый восьмибитный битмап. Заголовка нет, сразу данные идут, поэтому написал приложение, в котором можно...

Как отсканировать Picturebox и получить цвета по RGB?
Помогите пожалуйста. Через API умею, но занимает неприемлимое время.Заранее спасибо.

Как указать 2 цвета в командной строке и получить на исходе определенные элементы первого и второго цвета
Есть задача: "нарисовать" из символов прямоугольник и внутри круг. С помощью командной строки задать цвет прямоугольника и круга внтури....


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru