Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Надо реализовать свои часы


Страницы:   1 2 3

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]


> По таймеру - плохо, ибо основной процесс может подвисать
> на выполнение некоторых задач.

Ну и пусть.
Во-первых, юзер, обычно, занят решением прикладной задачи, а не на часики пялится, а, во-вторых, если прикладная задача ушла в глубокие раздумья, то юзеру всё равно курить, так что пофиг, сколько там времени.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо