Помощь - Поиск - Пользователи - Календарь
Полная версия: Простые часы
Форум «Всё о Паскале» > Pascal, Object Pascal > 32 битные компиляторы
klem4
Решил сделать часы на паскале, никогда не делал, ну не знаю просто захотелось) вот только мне кажется в одном месте я прощитался, решив использовать задержку, наверняка ведь на многих машинах Delay(1000) не будет = 1с.

Ну как бы то нибыло вот что получилось, щас сделаю версию уже с "ручной" проверкой, надо ли перерисовывать стрелки.

Нажмите для просмотра прикрепленного файла
volvo
Андрей, а слабО переписать это под Windows, и использовать SetTimer/KillTimer ? smile.gif
volvo
Вот небольшой набросок тех же самых часов, написанных на почти чистом WinAPI (почти - потому, что все-же используются модули SysUtils + DateUtils)...

Нажмите для просмотра прикрепленного файла

Можно запускать несколько копий приложения, при изменении размера окна часы также меняют размер...

Надо только добавить несколько функций:
1) запрет дальнейшего уменьшения по достижении какого-то размера, чтобы часы не были слишком маленькими;
2) вывод цифр можно поправить, чтобы во-первых, не выводилось 0 .. 11, а выводилось 1 .. 12, да и сами координаты выводимого текста (а, возможно, и шрифт) мне кажется, надо доработать...
3) ну, в принципе, добавлять можно еще много, только тогда это уже будут не совсем простые часы smile.gif

Если есть желание, давайте доработаем проект... Выбирайте, или это будет работа с API (но без ООП), или через Graph (но ООП), и так и так можно сделать довольно интересное приложение... yes2.gif

P.S. Не стал исправлять программу, но заметил, что в ней не освобождается контекст устройства после обработки WM_TIMER... Естественно, поскольку это событие происходит ежесекундно, а контекст создается, и не освобождается - программа начинает "поедать" память. Перед выходом из блока If draw Then ... в обработчике WM_TIMER добавить ReleaseDC(Window, DC);
Bokul
Цитата
Если есть желание, давайте доработаем проект... Выбирайте, или это будет работа с API (но без ООП), или через Graph (но ООП), и так и так можно сделать довольно интересное приложение...

У меня есть. smile.gif Я за API, только почему без ООП? А какие идеи насчет новых фич? Может вместо окна рисоваться на десктопе?
volvo
Цитата
Я за API, только почему без ООП?
Потому, что идеология работы с WinAPI подразумевает процедурный стиль, ООП - это надо свою VCL делать smile.gif

Насчет фич - есть несколько идей. Например, добавить возможность сокрытия часов в трей, и по наведению мыши показывать такие небольшие часики (может быть, даже цифровые, возможно - показывать еще и текущую дату), что-то типа того, что делает WMP когда минимизирован, показывает Preview, а по Restore часов сделать их, скажем, полупрозрачными, лежащими OnTop, где-нибудь в углу экрана, но не мешающими работать с другими программами (прозрачными не только визуально, но и для событий... Если интересно - покажу, как это делается, приложение "пропускает" сквозь себя клики мыши)...

Идей много, реализовать бы хоть часть smile.gif

Ждем автора темы, что он скажет, может быть у него другие идеи насчет дальнейшего развития программы...
Archon
Очень интересно! Надеюсь тема не заглохнет.

PS Для рисования на десктопе, вроде ссылка на окно должна быть с нулевым значением?
Bokul
Цитата
PS Для рисования на десктопе, вроде ссылка на окно должна быть с нулевым значением?

Ну да, там все просто.
Цитата
Если интересно - покажу, как это делается, приложение "пропускает" сквозь себя клики мыши

"Пропускает" значит не обрабатывает?

Вообщем идеи у volvo что надо, осталось только сделать..
Цитата
и по наведению мыши показывать такие небольшие часики, что-то типа того, что делает WMP когда минимизирован

А можешь сказать куда подкопаться для этого надо?
volvo
Цитата
"Пропускает" значит не обрабатывает?
yes2.gif Именно не обрабатывает... Просто не реагирует на клик мышью, например smile.gif Попробуй запустить ICQ и сделать его окно полупрозрачным, а потом кликни на что-то, что находится ПОД окошком ICQ... Что будет? Сообщение обработает какое окно ? А есть способ сделать так, чтобы сообщение "прошло ниже", как будто нашего окна вообще нет на экране...

Цитата
А можешь сказать куда подкопаться для этого надо?
Могу... При добавлении иконки в трей делается CallBack-функция, так? Ну, что-то вроде оконной функции приложения, которая, к примеру, отслеживает нажатие на иконку в трее, чтобы восстановить окно...

А если в ней перехватить WM_MOUSEMOVE, как ты думаешь, что произойдет? smile.gif Когда сработает обработчик этого события?
Bokul
Цитата
Могу... При добавлении иконки в трей делается CallBack-функция, так? Ну, что-то вроде оконной функции приложения, которая, к примеру, отслеживает нажатие на иконку в трее, чтобы восстановить окно...

А если в ней перехватить WM_MOUSEMOVE, как ты думаешь, что произойдет? Когда сработает обработчик этого события?.

Ну это понятно. Интересует как и куда ты планируешь выводить часы по наведению на иконку.

Цитата
А есть способ сделать так, чтобы сообщение "прошло ниже", как будто нашего окна вообще нет на экране...

rolleyes.gif Как?
volvo
Цитата(Bokul @ 6.02.2007 1:21)
Интересует как и куда ты планируешь выводить часы по наведению на иконку.
Над таскбаром, например (прямо там, где находится Hint от приложения, свернутого в трей)... Да какая разница, куда - изменить положение можно одной строкой smile.gif Я ж не собираюсь показывать окно полностью: говорилось о превью - значит, маленькое окошко с маленькими часиками, но часы все равно должны ходить... А когда мыша ушла с иконки в трее - превью медленно "растворяется". rolleyes.gif

Цитата(Bokul @ 6.02.2007 1:21)
rolleyes.gif Как?
А подумать?
Bokul
Цитата
А подумать?

Ну чтобы так просто, я не вижу, не знаю способа. А так, может можно поставить фильтр на распределения сообщений по программным потокам с системной очереди - если оно адресованно нам, то пересылаем его к нижнему окну (которое еще надо определить).
volvo
blink.gif blink.gif Bokul, выдыхай... И больше эту траву не кури...

Все проще гораздо... Hint - используются регионы... smile.gif
Bokul
Цитата
Hint - используются регионы ...

English version please.. smile.gif
volvo
SetWindowRgn

"Is that better?" © Men In Black ...
Altair
Хочу такие часы на рабочий стол себе. Что бы прямо на десктоп рисовалось...

klem4, доделывай давай, раз начал smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.