![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Scandium |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.12.2007 Репутация: нет Всего: нет |
Групбоксы не несут там никакого функционала, а нужны тока для графического отделения компонетов, исключение составляет групбокс "AboutGroupBox". Он нужен для работы с контактоной информации, расположенной на ней (ссылка на мыло и сайт)...Вот текст показа этого групбокса при нажатии на кнопку "About":
Если я не прав, то пусть автор меня поправит ![]() Это сообщение отредактировал(а) Scandium - 7.12.2007, 01:09 |
||||
|
|||||
skinny |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
В этой статье пожалуй не хватает одного пункта
при сворачивании приложения в трей как правило его главное окно становиться недоступным, т.е. вызвать его можно только если клацнуть по иконке в трее, а если она исчезла. Да. Именно исчезла. Такое бывает при перезагрузке Explorer'а што тогда делать. Вызывать диспетчер задач и завершать приложение аварийно? Непрфессионально да и неудобно, кроме того, многие программы, как-то же, с этим борятся, например, винамп или ICQ. Их значки появляються даже после сбоя. Так што вот некоторый код, который нужно добавить дабы наше приложение тоже могло в случае чего востановить свой значёк: для этого: 1. Объявляем глобальную переменную для хранения дискриптора трея:
2. Помещаем в тело программы две функции:
3. Добавляем на форму компонент таймер с интервалом скажем 2-3 секунды (2000-3000) и в его событие OnTimer вставляем следующий код:
Данный код расчитан на то что вы уже умеете добавлять иконку в трей и знаете все стороны работы с треем и теми функциями которые приведены в примере. Если же нет, то выкладываю исходники и екзешник всё писано на 7 делфе со стандартными компонентами, т.е. запуститься у всех ![]() С КОМЕНТАРИЯМИ БЕЗ КОМЕНТАРИЕВ ЭКЗЕШНИК Это маленькая статейка на щёт работы с треем вскором времени собираюсь написать большую статью по практически всему што только можно придумать с треем а именно там будет и то как можно заставить иконку мигать или просто менятся как запустить программу только в 1 экземпляре (в таких приложениях обычно это важно) |
||||||
|
|||||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
skinny, перечислять окна в таймере это не способ, тк для этой цели есть предусмотренная API возможность.
В инициализации модуля сделать так:
где WM_TASKBARCREATED - глобальная переменная типа DWORD В обработчике OnMessage компонента ApplicationEvents проверять код сообщения на совпадение с WM_TASKBARCREATED и если совпадает - восстанавливать иконки -------------------- Обижено школьников: 8 |
|||
|
||||
skinny |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
это философия и рассуждения
докажи што оно работает желательно исходником а то из-за таких умников новички бьются сутками а им тока тыкают што они тупые. |
|||
|
||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: нет Всего: 34 |
И еще один момент. Чет не могу понять, когда выключается компьютер, а в трее сидит иконка созданная по вышеописанной технологии, то выключение/перезагрузка прерывается. Т.е. сначала нужно закрыть приложение, потом перезапускать комп, иначе никак. Сам пока не разбирался, но может кто-то встречал такую фигню?
|
|||
|
||||
Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
Добавлено через 4 минуты и 38 секунд
![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: нет Всего: 34 |
||||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 10 Всего: 133 |
В таком случае отлавливай в ручную WM_QUERYENDSESSION и завершай приложение сам
![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: нет Всего: 34 |
||||
|
||||
bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
это значит "сделай за новичка"? сам попробуй могу немного пожевать для понятности: функция RegisterWindowMessage регистрирует в системе новое сообщение впридачу к константам начинающимся с WM_ При этом если при двух вызовах функции (не обязательно из контекста одного процесса) переданы разные строковые аргументы - возвращается гарантировано разное значение кода сообщения. Если одинаковые строковые аргументы - гарантировано одинаковые коды сообщения. Значение нового сообщения сохраняется на интервал времени от первого вызова с такой строкой до конца сеанса. Это можно прочитать в хелпе по Win32 API который есть в Дельфи даже старых версий (в 5-ке уже есть). А в хелпе который идет в комплекте Дельфи (200x) можно прочитать что при создании панели задач explorer вызывает RegisterWindowMessage с аргументом 'TaskbarCreated' и рассылает полученый код сообщения всем окнам верхнего уровня (не имеющим владельца). Последняя фраза в скобках это то что я помню приблизительно и возможно это не так (лень сейчас проверять). Если действительно нужно "без владельца" то в проге на Дельфи (где используется VCL) таким окном будет только окно с дескриптором Application.Handle. Если наличие владельца не важно, то сообщение получат все формы плюс Application.Handle То есть в обоих случаях Application.Handle имеет возможyость обработать сообщение о создании панели задач. Для того чтобы сделать свою обработку сообщений, получаемых окном Application.Handle можно положить на форму компонент ApplicationEvents и в обработчике его события OnMessage сделать так
в этом фрагменте предполагается, что WM_TASKBARCREATED это твоя переменная (константы нет такой), что ей когда-то уже было присвоено значение, которое вернул вызов RegisterWindowMessage('TaskbarCreated') ("когда-то" означает до первого сообщения пришедшего в ApplicationEvents1Message, например в секции initialization) и что SetTrayIcons это твоя функция, создающая иконку(иконки) в трее так, как это описано в обсуждаемой статье. Если и после этого новичку нужен какой-то код, то значит ему нужно учить синтаксис языка и учиться читать хелпы. С этим уж не ко мне. Я это видел. Даже в суде такая фраза считается доказательством. -------------------- Обижено школьников: 8 |
||||
|
|||||
skinny |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
именно об этом я и говорю
читать хелпы и знать синтаксисы всегда хотел убивать тех кто так говорит во первых хелпы на аглицком, даже знание оного не спасает меня ибо понять порой технические слова я не могу а на щёт синтаксисов, то не все программисты закончили вузы, некоторые ваще нигде программированию не учились - это я и про себя поэтому я почти не знаком с теорией и мне намного легче понять и осознать работающий код, а не придумать новый когда я начализучать работу с треем в 2003 году везде была только функция и её флаги понять "што это всё ваще значит" я никак не мог а после того как нашол работающий пример - всё сразу стало на свои места и сейчас я пожалуй закрытыми глазамит напишу этот код если послушать вас то выходит што подобные форумы и вообще примеры и исходники никому не нужны - пусть сами каждый раз новую функцию придумывают я всегда когда читаю всякую философию не могу понять зачем люди сие пишут - только наверно шобы паказать собственное величие штоли над другими форум не для филосовских рассуждений а для помощи |
|||
|
||||
Scandium |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 3.12.2007 Репутация: нет Всего: нет |
Я тоже не оканчивал ничего по програмироанию...а чисто сам разбирался по примерам. Поэтому реально научиться по примерам с коментариями, чем по фразам типо "читай хелп и мануалы". ![]() |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
в моем посте не хватало кода для этого: это значит: чтобы написать рабочий код нужно уметь объявить глобальную переменную и создать обработчик события (имя события и имя компонента я дал). Создание обработчика и объявления переменных это настолько начальный уровень, что объяснять это на форуме просто неприлично. Чтобы знать как в паскале объявить переменную не нужно заканчивать ВУЗ -------------------- Обижено школьников: 8 |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 0 Всего: 68 |
Нафиг комапненты, просто перегружаем ВинПрок и все
![]()
Это сообщение отредактировал(а) ~FoX~ - 20.12.2007, 12:24 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |