Заходит компьютерщик в булочную после бессонной ночи у компьютера, провозивщись с установкой кривой видеокарты и говорит:
- Мне, пожалуйста, буханку черно-белого хлеба и батон цветного....
var
OldColor: TColor;
Element: TColor = COLOR_BTNFACE;
{....}{
Set the color for a system element. SetSysColors function
changes the current Windows session only.
The new colors are not saved when Windows terminates.
For a list of color elements see Win32 API Help - Function GetSysColor
Open the ColorDialog - and set the new color systemwide
}procedure TForm1.Button1Click(Sender: TObject);
beginif ColorDialog1.Execute thenbegin
SetSysColors(1, Element, ColorDialog1.Color);
end;
end;
{
Save the old color value of the element COLOR_BTNFACE to restore on Button2 click
}procedure TForm1.FormShow(Sender: TObject);
begin
OldColor := GetSysColor(COLOR_BTNFACE);
end;
{
Restore the old color value
Stellt den alten Farbwert wieder her
}procedure TForm1.Button2Click(Sender: TObject);
begin
SetSysColors(1, Element, OldColor);
end;
Перевод текста на русский язык:
Код написан на языке Delphi, основанном на Паскале. Он демонстрирует, как получить и установить системные цвета в Windows с помощью функции SetSysColors.
Вот разбивка на части кода:
Первая секция определяет переменные: OldColor для хранения оригинального значения цвета, а Element для указания, какой системный элемент нужно изменить.
Процедура Button1Click вызывается при клике кнопки. Она открывает диалоговое окно выбора цвета с помощью компонента ColorDialog1, позволяя пользователю выбрать новый цвет для указанного системного элемента (в этом случае - лицо кнопки). Если пользователь выбирает новый цвет и нажимает "OK", функция SetSysColors обновляет текущую сессию Windows новым значением цвета.
Процедура FormShow вызывается при отображении формы. Она сохраняет оригинальное значение цвета лица кнопки с помощью функции GetSysColor.
Процедура Button2Click вызывается при клике другой кнопки. Она возвращает оригинальное значение цвета, вызвав SetSysColors с сохраненным значением OldColor.
Вот некоторые предложения и улучшения:
Вместо использования жесткого кода индекса элемента (1) в функции SetSysColors, рассмотрите использование константы или enum для указания системного элемента, который нужно изменить. Это сделает код более читаемым и поддерживаемым.
Вы можете использовать функцию GetSysColor для получения текущего значения цвета для указанного элемента перед обновлением его новым значением. Это может помочь предотвратить неожиданные поведения, если пользователь нажимает кнопку "Отмена" в диалоговом окне выбора цвета.
Если вы хотите сделать изменения цвета постоянными между сессиями Windows, рассмотрите использование реестра Windows или внешнего файла конфигурации для хранения значений цветов.
Вот обновленная версия кода, которая включает эти предложения:
Обратите внимание, что я определил enum TColorElement для указания системного элемента, который нужно изменить. Вы можете добавить больше элементов в этом enum, какNeeded.
В статье описывается как получить и установить системные цвета в приложении для Windows с помощью функции SetSysColors и диалогового окна выбора цвета.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.