Вверх ↑
Этот топик читают: Гость
Ответов: 182
Рейтинг: 4
#1: 2025-03-27 13:48:00 ЛС | профиль | цитата
всем привет!
По моему, стандартная точка color не работает. Выбираю цвет - фон контрола не меняется, только боковины для выпадающей части календаря.

Add(MainForm,2953706,301,252)
{
}
Add(DatePicker,11424283,441,273)
{
Left=195
Top=170
Width=170
Height=21
Color=255
Font=[GOST type A,14,1,0,204]
Cursor=2
TabOrder=5
HintManager=""
Layout="act_cart_mtrx"
Style=1
TitleTextColor=-16777192
MonthBkColor=-16777192
Point(doEnabled)
Point(DateInt)
Point(doAntialiased)
Point(doColor)
}

карма: 1

0
Разработчик
Ответов: 26240
Рейтинг: 2140
#2: 2025-03-27 16:05:35 ЛС | профиль | цитата
strannik_nebes писал(а):
По моему, стандартная точка color не работает

Она там никогда и не работала. Есть специальная группа точек для изменения цвета
карма: 22

0
Ответов: 182
Рейтинг: 4
#3: 2025-03-27 16:45:41 ЛС | профиль | цитата
nesco, Как я понимаю, это проблема самого delphi https://ru.stackoverflow.com/questions/419694/Фон-datetimepicker-в-delphi
карма: 1

0
Разработчик
Ответов: 26240
Рейтинг: 2140
#4: 2025-03-27 17:02:06 ЛС | профиль | цитата
Вот как раз вот такое из предложенных решений и реализовано:
   DateTimePicker.CalColors.BackColor:=LBackColor;
DateTimePicker.CalColors.MonthBackColor:=LBackColor;
DateTimePicker.CalColors.TextColor:=LTextColor;
DateTimePicker.CalColors.TitleBackColor:=LBackColor;
DateTimePicker.CalColors.TitleTextColor:=LTextColor;
DateTimePicker.CalColors.TrailingTextColor:=LTextColor;

--- Добавлено в 2025-03-27 17:04:46
А так у нас:
   with Control{$ifndef F_P}^{$endif} do begin
Perform(DTM_SETMCCOLOR,MCSC_BACKGROUND, Color2RGB(_prop_Color));
Perform(DTM_SETMCCOLOR,MCSC_TITLEBK, Color2RGB(_prop_TitleBkColor));
Perform(DTM_SETMCCOLOR,MCSC_TEXT, Color2RGB(Font.Color));
Perform(DTM_SETMCCOLOR,MCSC_TITLETEXT, Color2RGB(_prop_TitleTextColor));
Perform(DTM_SETMCCOLOR,MCSC_MONTHBK, Color2RGB(_prop_MonthBkColor));
Perform(DTM_SETMCCOLOR,MCSC_TRAILINGTEXT, Color2RGB(_prop_TrailingColor));
end;

Те _prop_Color как раз и отвечает за BackColor компонента

Редактировалось 5 раз(а), последний 2025-03-27 17:07:31
карма: 22

0
Ответов: 182
Рейтинг: 4
#5: 2025-03-28 13:15:22 ЛС | профиль | цитата
nesco, сам фон не меняется и с этими параметрами. На том сайте автор написал про "update 1", где пишет, что можно решить вопрос "танцем с бубнами".

Таким образом, возможное решение состоит в том, чтобы перехватывать сообщения WM_PAINT и WM_ERASEBKGND и писать собственный код для отрисовки элемента управления. При использовании стилей Vcl вы можете использовать хук стиля для обработки этих сообщений.
Примечание: этот хук стиля не отображает сфокусированные (выбранные) элементы во внутреннем текстовом поле (комбобоксе) TDateTimePicker. Я оставляю эту задачу на ваше усмотрение.
ОБНОВЛЕНИЕ 2
Я только что написал хук стиля VCL, который включает в себя всю логику для правильного применения стиля VCL к компоненту TDateTimePicker без использования события OnDropDown или события OnCreate формы. Вы можете найти хук стиля VCL здесь (в составе проекта vcl styles utils)

Чтобы использовать его, необходимо добавить в проект модуль Vcl.Styles.DateTimePickers и зарегистрировать перехватчик следующим образом.

TStyleManager.Engine.RegisterStyleHook(TDateTimePicker, TDateTimePickerStyleHookFix);


Редактировалось 4 раз(а), последний 2025-03-28 13:19:03
карма: 1

0
Ответов: 876
Рейтинг: 187
#6: 2025-03-28 17:50:14 ЛС | профиль | цитата
strannik_nebes, В компоненте DatePicker для заднего фона используется системный цвет COLOR_WINDOW который устанавливается в реестре по пути [HKEY_CURRENT_USER\Control Panel\Colors] "Window"="255 255 255". Цвет применяется только после перезагрузки.
Но, как обычно, можно пойти другим путём.
Add(MainForm,5878861,91,98)
{
Point(onClose)
link(onCreate,6604270:doData,[])
}
Add(DatePicker,11424283,252,112)
{
Left=25
Top=15
Width=190
Height=21
Color=255
Font=[GOST type A,10,1,0,204]
Cursor=2
TabOrder=5
HintManager=""
Layout="act_cart_mtrx"
Style=1
TitleTextColor=-16777192
MonthBkColor=255
Point(doBringToFront)
link(onChange,1427951:doConvert,[])
}
Add(Edit,7150676,196,105)
{
Left=25
Top=15
Width=170
Height=21
Color=255
Font=[GOST type A,10,1,0,1]
Text=""
Point(onMouseDown)
link(onMouseDown,11424283:doBringToFront,[])
}
Add(Time,11290528,140,63)
{
Format="D-M-Y"
}
Add(DoData,6604270,140,112)
{
link(onEventData,5455649:doWork2,[])
link(Data,11290528:FormatTime,[])
}
Add(HubEx,5455649,182,112)
{
link(onEvent,7150676:doText2,[])
}
Add(DateConvertor,1427951,308,112)
{
Mode=9
Format="dd-MM-yyyy"
Point(Data)
link(onResult,5455649:doWork1,[(347,118)(347,97)(186,97)])
}


Редактировалось 1 раз(а), последний 2025-03-28 17:52:21
карма: 18

0
Разработчик
Ответов: 26240
Рейтинг: 2140
#7: 2025-03-28 18:10:55 ЛС | профиль | цитата
Gunta писал(а):
В компоненте DatePicker для заднего фона используется системный цвет COLOR_WINDOW

Для заднего фона используется параметр Colоr самого компонента.
Объясните, какой цвет вы не может поменять? У меня меняется всё



Редактировалось 1 раз(а), последний 2025-03-28 18:13:27
карма: 22

0
Ответов: 876
Рейтинг: 187
#8: 2025-03-28 18:18:24 ЛС | профиль | цитата
nesco писал(а):
Для заднего фона используется параметр Colоr самого компонента.
Объясните, какой цвет вы не может поменять? У меня меняется всё

Нет, вопрос про цвет контрола а не про цвет выпадающего календаря.


Редактировалось 2 раз(а), последний 2025-03-28 18:24:01
карма: 18

0
Разработчик
Ответов: 26240
Рейтинг: 2140
#9: 2025-03-28 18:24:13 ЛС | профиль | цитата
Gunta писал(а):
Нет вопрос про это

Аааа, этот цвет. Да, этот не меняется

--- Добавлено в 2025-03-28 18:29:52

Вы еще столкнетесь с одной проблемой. Если поставить стиль XP, то вы вообще никакой цвет не поменяете.

Редактировалось 1 раз(а), последний 2025-03-28 18:29:52
карма: 22

0
Ответов: 182
Рейтинг: 4
#10: 2025-03-31 09:29:45 ЛС | профиль | цитата
Gunta,
Но, как обычно, можно пойти другим путём.
. Можно и так , но, как всегда, условно. Без использования layout.

Редактировалось 1 раз(а), последний 2025-03-31 09:30:59
карма: 1

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)