|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
|
Развернуть копию программы из трея16.02.2012, 22:32. Показов 17382. Ответов 82
Метки нет (Все метки)
Нужно чтобы 2ая копию программы разворачивала 1уй копию программы.
Много читал по форумам но так и не нашёл ничего. Мб что то пропустил если поподалось киньте пожалуйста ссылочку. Я так понял что программа должна послать сообщение на разворачивание как то так. средставами sw_show, normal и тд. и тп не получилось так как.при разворачивании проги компоненты не отображаются некоторые. программа сворачивается через cooltrayicon через процедуру(если это важно) Заранее спасибо.
2
|
|
| 16.02.2012, 22:32 | |
|
Ответы с готовыми решениями:
82
Развернуть программу из трея Работа программы из трея Развернуть окно программы |
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
|
| 17.02.2012, 04:41 [ТС] | |
|
0
|
|
|
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
|
| 17.02.2012, 04:48 | |
|
У меня есть еще версия непроверенная, незнаю правильная или нет, что это из-за выравнивания компонентов на форме, и при востановлении формы у них координаты сбиваются каким то образом, у меня что то такое было когда-то я присваивал принудительно компонентам их расположение на форме Top и Left, другово более изощренного способа не нашел тогда.
1
|
|
|
|
|||||||||||||||||||||||||||
| 17.02.2012, 04:56 | |||||||||||||||||||||||||||
|
Точно, я придурок
![]() верни вот это:
Не знаю почему, но MainForm.Show работает стабильнее, нежели ShowMessage(Handle, SW_Show); Добавлено через 3 минуты Правда это чревато последствиями, если ты в будущем будешь делать так, что прога может вместо трея сворачиваться традиционным образом (в панель задач). Но этого можно избежать, если ещё в процедуре ControlWindow сделаешь так:
Если выполнится код с inherited;, то сообщение дойдёт до формы, и выполнится соответствующее сообщению действие. мы как раз при сворачивании inherited не выполняем, поэтому сворачивание формально не происходит, а только скрывается форма. Добавлено через 39 секунд
1
|
|||||||||||||||||||||||||||
|
|
|
| 17.02.2012, 07:58 | |
|
Вот, доведённый до ума вариант. Долбаная среда делфи, не знаю, как её к API приучить
![]() идиотизм :D
В общем, возникла проблема - из-за того, что мы юзали SC_Restore чтобы показать форму, это обернулось тем, что если форму свернёшь "развёрнутой на весь экран", а потом щёлкнешь по значку в трее - она восстанавливается уже не на весь экран, а в обычное состояние. Поэтому я подкорректировал код, добавив в LParam число - 123456. Это просто левое число, которое система вряд ли пошлёт форме через SC_Restore; Поэтому в функции ControlWindow будем ориентироваться по этому числу.
Дальше случился косяк, сам не знаю из-за чего. Запускаешь программу - первый раз форма разворачивается, и всё нормально. Второй раз - значок убирается, а форма не показывается. В результате исследований выявил, что в делфи оч хреново пашет функция SHowWindow. Пришлось заменить её методами формы Show и Hide (что по сути то же самое). Теперь вроде всё пашет.
1
|
|
|
|
||||||
| 17.02.2012, 08:11 | ||||||
|
И когда открывается вторая копия, ты первой копии посылай именно такое сообщение:
1
|
||||||
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
||||||||||||
| 17.02.2012, 18:14 [ТС] | ||||||||||||
![]() ![]() ![]() почемуто
И ещё одна печаль (при запуске 2ой копии):
0
|
||||||||||||
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
|||||||||||
| 17.02.2012, 18:25 [ТС] | |||||||||||
|
Разворачивание и сворачивание отлично работает=)
А косяк нашёл=)
1).
2). К сожалению не разворачивает 1ую копию...
0
|
|||||||||||
|
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
|
|
| 17.02.2012, 20:58 | |
|
1
|
|
|
|
||||||
| 18.02.2012, 00:39 | ||||||
|
Вместо класса TIcon можно обойтись и одной функцией, в принципе...
А сама функция объявлена в модуле Windows; И теперь всё, что было с TIcon можно стереть, и заменить этим. На счёт открытия второй копии - я подумаю. Может, смозгую чего.
1
|
||||||
|
|
|
| 18.02.2012, 03:14 | |
|
Вот, тут (прикреплён архив) я с File Mapping помудрил, вроде получилось сделать так, чтобы предыдущая копия разворачивалась.
Читать
В общем, в PagFile создаётся файл, и открывается для работы в адресном пространстве процессов. Вот из этого файла и читаем информацию - если она там имеется, то запущена программа уже не в первый раз. Иначе, мы туда записываем хэндл нашей формы, и не закрываем файл. А все последующие копии программы, обнаружив хэндл, будут посылать ему сообщение, а сами завершатся. Сделано по-извращенски, но вроде работает. А вдруг моя программа завершится аварийно, и хендл останется в PageFile, и когда я её снова попытаюсь запустить - копия будет завершаться, посчитав, что уже есть запущенная копия? Я попробовал единственную запущенную копию удалить из процессов в диспетчере задач в надежде, что данные останутся в PageFile. Однако, они всё равно исчезли (или не знаю, что с ними произошло), во всяком случае когда закрывается последняя копия проги, эти данные становятся недоступными - то есть это гарантия, что если твоя прога вылетит с ошибкой, то ты её сможешь запустить без перезагрузки компьютера. Хотя можно по этому поводу не париться - и проверить, существует окно с данным хэндлом. Если нет, то считать что ничего не загружено, и спокойно перезаписать данные в PageFile. Кстати, File Mapping позволяет обмениваться данными между приложениями - весьма удобный способ. По этому поводу есть статейка в архиве, и к ней пример. Там в примере запускаешь несколько копий программки, печатаешь в поле текст, и смотришь, как в других копиях по таймеру из PageFile считывается и отображается инфа. По поводу иконки какой-то глюк у меня, не стал заморачиваться - так что если у тебя не сработает LoadIcon, то верни TIcon
1
|
|
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
|
| 18.02.2012, 05:45 [ТС] | |
|
Спасибо!=)
В процессе изучения... ![]() Добавлено через 2 минуты Я так понял что по коду у тебя не должна 2ая копия запускаться однако почемуто запускается... или я что то не понял..? Читаю дальше.
0
|
|
|
|
|
| 18.02.2012, 05:54 | |
|
paxan86, то есть? Программа в прикреплённом архиве может запуститься дважды?
О_о Добавлено через 22 секунды Странно, у меня заработала. Сейчас ещё раз всё проверю. Добавлено через 2 минуты Там просто принцип такой - если программа при запуске обнаружила, что уже открыта первая копия, то она передаёт сообщение первой, а сама закрывается. Первая, получив сообщение, разворачивается, и показывает сообщение - мол нельзя запускать две копии.
1
|
|
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
||
| 18.02.2012, 05:57 [ТС] | ||
|
Добавлено через 1 минуту else if msg.LParam = 123457 then и ещё заметил что обрабатывается но не посылается..
0
|
||
|
|
||
| 18.02.2012, 06:00 | ||
|
paxan86, странно... то есть никаких сообщений, ничего?
А там есть ещё вложенный архив, FileMapping. Попробуй из него прогу скомпилить. Там наглядный пример, как работает FileMapping. Надо скомпилить и запустить несколько копий. В одной из них ввести что-нить и нажать ОК. В других появится эта надпись. Добавлено через 1 минуту
1
|
||
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
|
| 18.02.2012, 06:00 [ТС] | |
|
D2009? спасибо щя в колледж приду напишу
0
|
|
|
|
|
| 18.02.2012, 06:09 | |
|
paxan86, D2010
![]() Но код должен работать и на D7. Добавлено через 18 секунд ой, прости. Там все PWideChar замени на PAnsiChar Добавлено через 1 минуту Я как всегда забыл, что по умолчанию в D7 - AnsiChar, а в D2010 - WideChar Эта мода на двухбайтовую кодировку пошла где-то с D2007 Добавлено через 1 минуту Не, проблема в другом. Там нет PWideChar. Значит попробуй на D2009 компилить Добавлено через 4 минуты У меня и на D7 всё заработало О_о Может, ты как-нить не так чего сделал? Ты просто скачал архив и запустил, или чего изменял ещё?
1
|
|
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
||||||||||||||||
| 18.02.2012, 16:15 [ТС] | ||||||||||||||||
|
Хм странно.. перекомпилил теперь всё работает) а пример с файлмаппинг там в д7 компонентов нету) надо в2009 надо попробовать запустить=) щя с треем в прогу вставлю затестю..=)
Я походу с утра что то с просони натыкал не то вот и не работала нормально прога ![]() Извеняюсь.... ![]() Добавлено через 14 секунд а ещё вопрос почему это всё описывается в private ?
Всё заработало!! Ура!! D![]() ![]() Ты крут ![]() Добавлено через 16 минут
0
|
||||||||||||||||
|
|
|||
| 18.02.2012, 16:26 | |||
|
Добавлено через 47 секунд
1
|
|||
|
51 / 46 / 8
Регистрация: 18.05.2011
Сообщений: 497
|
|
| 18.02.2012, 16:37 [ТС] | |
|
Всё работает на ура!
1
|
|
| 18.02.2012, 16:37 | |
|
Зависают torrent-программы, развернуть из трея не удается Развернуть програму из трея Развернуть приложение из трея Не получается развернуть приложение из трея Как развернуть форму из трея? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|