Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Простые часы

Автор: klem4 4.02.2007 22:02

Решил сделать часы на паскале, никогда не делал, ну не знаю просто захотелось) вот только мне кажется в одном месте я прощитался, решив использовать задержку, наверняка ведь на многих машинах Delay(1000) не будет = 1с.

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

Прикрепленное изображение


Прикрепленные файлы
Прикрепленный файл  clock_beta1.pas ( 4.14 килобайт ) Кол-во скачиваний: 504

Автор: volvo 4.02.2007 22:20

Андрей, а слабО переписать это под Windows, и использовать SetTimer/KillTimer ? smile.gif

Автор: volvo 5.02.2007 16:28

Вот небольшой набросок тех же самых часов, написанных на почти чистом WinAPI (почти - потому, что все-же используются модули SysUtils + DateUtils)...

Прикрепленный файл  clocks.pas ( 7.63 килобайт ) Кол-во скачиваний: 1003


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

Надо только добавить несколько функций:
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 6.02.2007 4:17

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

У меня есть. smile.gif Я за API, только почему без ООП? А какие идеи насчет новых фич? Может вместо окна рисоваться на десктопе?

Автор: volvo 6.02.2007 4:28

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

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

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

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

Автор: Archon 6.02.2007 5:18

Очень интересно! Надеюсь тема не заглохнет.

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

Автор: Bokul 6.02.2007 5:30

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

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

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

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

А можешь сказать куда подкопаться для этого надо?

Автор: volvo 6.02.2007 5:45

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

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

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

Автор: Bokul 6.02.2007 6:21

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

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

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

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

rolleyes.gif Как?

Автор: volvo 6.02.2007 6:30

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

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

Автор: Bokul 6.02.2007 6:39

Цитата
А подумать?

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

Автор: volvo 6.02.2007 6:42

blink.gif blink.gif Bokul, выдыхай... И больше эту траву не кури...

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

Автор: Bokul 6.02.2007 6:45

Цитата
Hint - используются регионы ...

English version please.. smile.gif

Автор: volvo 6.02.2007 6:47

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_2him.asp

"Is that better?" © Men In Black ...

Автор: Altair 6.02.2007 14:00

Хочу такие часы на рабочий стол себе. Что бы прямо на десктоп рисовалось...

klem4, доделывай давай, раз начал smile.gif