![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Надо реализовать свои часы
Ega23 © (2006-08-17 12:28:00)Предполагается, что трея не будет. Как лучше сделать?
Ketmar (2006-08-17 15:36:00) [21]> [29] KyRo (17.08.06 15:34)
а что, вопрос прочитать религия запрещает?
KyRo (2006-08-17 15:34:00) [22]А что нет готовых компонентов в сети типа компоненты часов в clr приложениях
Ketmar (2006-08-17 15:32:00) [23]> [27] guav © (17.08.06 15:29)
> GetMessage можно никогда не завершать
??? говорили же про фрейм. а вдруг фрейм помрёт? главное окно останется, а фрейма больше нет.
и вообще -- никогда не завершать подобный цикл есть порочная практика кодинга. за такое -- пожизненный эцих с гвоздями. %-)
guav (2006-08-17 15:29:00) [24][21] Ketmar © (17.08.06 15:04)
> главное -- по WM_DESTROY не забыть завершить поток. %-)
зачем завершать ? думаю, тут нужно переопределить метод пересоздания окна у VCL фрейма и передать хендл нового окна потоку (через сообщение потока), цикл GetMessage можно никогда не завершать.
Ketmar (2006-08-17 15:20:00) [25]> [25] Ega23 © (17.08.06 15:16)
тогда всё. изменение положения будет обрабатывать родитель, твоё дочернее окно двигаться не будет.
не забудь, что в главной процедуре потока надо делать стандартный цикл из GetMessage()/DispatchMessage(). %-)
Ega23 (2006-08-17 15:16:00) [26]
> ещё неплохо бы предусмотреть обработку изменения размеров
> родителя, чтобы делать нечто типа дельфийского align/anchors.
>
Нет, там фиксированный размер будет. Только изменение положения на экране.
Ketmar (2006-08-17 15:14:00) [27]ещё неплохо бы предусмотреть обработку изменения размеров родителя, чтобы делать нечто типа дельфийского align/anchors.
Ketmar (2006-08-17 15:13:00) [28]> [22] Ega23 © (17.08.06 15:11)
да, в принципе, больше ничего. ну, WM_TIMER, если таймеры используешь. остальное можно смело отдавать виндам.
Ega23 (2006-08-17 15:11:00) [29]Ага. Общая канва - ясна.
Что требуется для создания своего окна? Какие сообщения надо переопределять? WM_PAINT и WM_DESTROY - это я понял. Что ещё требуется?
Ketmar (2006-08-17 15:04:00) [30]> [19] guav © (17.08.06 15:02)
да пусть себе пересоздаются. главное -- по WM_DESTROY не забыть завершить поток. %-)
Ketmar (2006-08-17 15:03:00) [31]при создании фрэйма запускать поток. поток будет делать окошко с родителем -- фрэймом. в общем, то же, что делают компоненты, только руками. %-)
см. параметер hWndParent в CreateWindow(). ну и -- явно обрабатывать нужные события (перерисовку, изменение размеров, etc...).
guav (2006-08-17 15:02:00) [32]"именно фрейм в рамках основной формы. С возможностью "перетаскивания"."делается на VCL как обычно, в него вставляется окно часов как WS_CHILD.
PS: Не следует забывать что VCL окна иногда пересоздаются.
Ega23 (2006-08-17 14:46:00) [33]
> я бы сделал поток с CreateWindow() -- так логичнее и реюзабельней.
Следующий вопрос: как это делать? Ситуация осложняется тем, что это должен быть именно фрейм в рамках основной формы. С возможностью "перетаскивания".
Ketmar (2006-08-17 14:23:00) [34]> [16] Ega23 © (17.08.06 14:04)
медиаплейер. %-)
по теме: а что больше нравится. главное -- не синхрониз. %-)
я бы сделал поток с CreateWindow() -- так логичнее и реюзабельней.
Ega23 (2006-08-17 14:04:00) [35]Так что всё-таки лучше сделать?
Ketmar (2006-08-17 13:08:00) [36]> [13] clickmaker © (17.08.06 13:07)
потому что отцы-основатели так делать не рекомендуют. %-) не факт, что случится ужос, но раз не рекомендуют -- лучше их послушать. %-)
Ketmar (2006-08-17 13:07:00) [37]> [11] DiamondShark © (17.08.06 13:03)
есть телепатическое подозрение, что это ещё и индикатор того, что софтине на ушла в полную нирвану навсегда. %-)
clickmaker (2006-08-17 13:07:00) [38]а почему бы в отдельном потоке просто не организовать цикл, в котором раз в секунду будет время обновляться?
типа
while (not Terminated) do begin
что-то там.Time := Now;
что-то там.Repaint;
Sleep(1000);
end;
Сергей М. (2006-08-17 13:04:00) [39]
> begin...end © (17.08.06 13:01) [10]
> Зачем?
На "своем" окне рисовать потоку гораздо проще и спокойней, нежели на чужом, тем паче - созданном и контролируемом VCL-контролом)
> При условии, что в потоке крутится цикл GetMessage/DispatchMessage
А никто и не возражает)
Без циклов подобных - хоть из штанов выпрыгни ! - никуда)
DiamondShark (2006-08-17 13:03:00) [40]
> По таймеру - плохо, ибо основной процесс может подвисать
> на выполнение некоторых задач.
Ну и пусть.
Во-первых, юзер, обычно, занят решением прикладной задачи, а не на часики пялится, а, во-вторых, если прикладная задача ушла в глубокие раздумья, то юзеру всё равно курить, так что пофиг, сколько там времени.