Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с иконкой в трее! иконка втрее 
:(
    Опции темы
PavelPro
  Дата 4.4.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 4.4.2005
Где: Wild Wild West

Репутация: нет
Всего: нет



Я знаю как поставить иконку в трей с помощью Shell_NotifyIconData,но не могу понять как к нему сделать Popupmenu бнапишите прогу плиз! smile
P.S Дайте пожалуйста ссылку на Rxlib для Delphi 7.0 smile
PM MAIL   Вверх
Alex
Дата 4.4.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Цитата(PavelPro @ 4.4.2005, 15:51)
P.S Дайте пожалуйста ссылку на Rxlib для Delphi 7.0

В свое время я качал это с http://polesoft.da.ru, но потом исправлял некоторые ошибки и делал поддержку Delphi 2005. Скачать мою сборку библиотеки под Delphi 3,4,5,6,7,2005 и BCB 4,5,6 можно здесь http://vingrad.ru/DELPHI-Path-002340


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Poseidon
Дата 5.4.2005, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(PavelPro @ 4.4.2005, 15:51)
не могу понять как к нему сделать Popupmenu


Цитата
1. Добавьте на форму компонент PupopMenu и измените его свойство "Name" на "PopupMenu".
2. Теперь два раза щелкните на нем, чтобы открылся редактор меню, и создайте точно такое меню:

Пункту "О программе" дайте имя "PAbout", пункту "Настройки" дайте имя "PSettings", пункту "Выход" имя "PExit". У пункта "Настройки" свойство "Default" установите в "True" (этим мы делаем данный пункт меню основным, т.е. данное действие будет выполняться при двойном нажатии левой кнопки мыши на иконке приложения в системном трее. Как это сделать Вы узнаете чуть ниже). После чего закройте редактор меню.

А сейчас мы сделаем самое главное и самое интересное: заставим наше меню "всплывать" на иконке во время нажатия правой кнопки мыши, а нашу главную форму "показываться" при двойной нажатии левой кнопки мыши.

В исходном коде программы напишите процедуру IconCallBackMessage и модернизируйте ее так, чтобы она выглядела так, как показано ниже:

uses
  ShellApi, StdCtrls, AppEvnts;

...

  public
    { Public declarations }
      procedure IconCallBackMessage( var Mess : TMessage ); message WM_USER + 100;

...

procedure TForm1.IconCallBackMessage( var Mess : TMessage );
var Mouse: TMouse;
begin
  case Mess.lParam of
    //Здесь Вы можете обрабатывать все события, происходящие на иконкеsmile

    WM_LBUTTONDBLCLK  :  //Обрабатываем двойной щелчок левой кнопки мыши.
    begin
      PSettingsClick(Form1); //Выполняем пункт меню "Настройки".
    end;
    WM_LBUTTONDOWN    :;// Нажатие левой кнопки мыши
    WM_LBUTTONUP      :;// Отжатие левой кнопки мыши
    WM_MBUTTONDBLCLK  :;// Двойной щелчок средней кнопкой мыши
    WM_MBUTTONDOWN    :; // Нажатие средней кнопки мыши
    WM_MBUTTONUP      :; // Отжатие средней кнопки мыши
    WM_MOUSEMOVE      :; // 'Перемещение мыши
    WM_MOUSEWHEEL    :; //Вращение колесика мыши
    WM_RBUTTONDBLCLK  :; //Двойной щелчок правой кнопкой
    WM_RBUTTONDOWN    :; Нажатие правой кнопки мыши
    WM_RBUTTONUP      : //Обрабатываем нажатие правой кнопкой мыши.
    begin
      PopupMenu.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y);
      //заставляем "всплыть" наше менюsmile
    end;
  end;
end;

С первым событием двойного нажатия левой кнопки мыши наверняка все понятно - мы выполняем вызываем обработчик события нажатия кнопки мыши на пункте меню "Настройки".
Но, с нажатием правой кнопки мыши наверное потруднее да? Чтож, все по порядку:
В самом начале процедуры мы объявляем объект Mouse типа TMouse. Для того, чтобы позднее при помощи него узнать координаты мыши на экране.
Далее мы пишем следующую строчку:
      PopupMenu.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y);
Смысл ее простой. Метод Popup используется для показа меню в заданной точке экрана. Именно здесь нам пригодился объект Mouse, при помощи свойств которого, мы узнаем координаты мыши на экране, во время нажатия правой кнопки мыши.
Но, в "всплывании" меню есть еще одни нюанс. Если сейчас все оставить все как есть, оно будет "зависать" при потери фокуса - т.е. просто не будет исчезать. Для устранения данного бага в обработчике события OnPopup нашего меню впишите нижеследующее:
      SetForegroundWindow(Form1.Handle);
Этим мы указываем, что активным является главная форма нашего приложения (даже если он невидима). И, при переключении между приложения оно теряет свою активность, и, соответственно, всплывающее меню исчезает из виду, т.к. оно является дочерним объектом, по отношению к форме.


По моему, это (или похожее) есть в FAQ. Заглядывай туда почаще!
А с просьбами
Цитата(PavelPro @ 4.4.2005, 15:51)
напишите прогу плиз!
прошу в раздел работа.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
~FoX~
Дата 5.4.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



А поиском или ДРКБ воспользоваться?

Где нить на форме бросайешь popup и создаешь в нем меобхадимые итемы.
Код

...........
  protected
    procedure IconMouse(var Msg : TMessage); message WM_USER+1;
...............


Procedure TForm1.IconMouse(var Msg : TMessage);
Var
  p:tpoint;
begin
  GetCursorPos(p); // Запоминаем координаты курсора мыши
  If   (Msg.LParam = WM_RBUTTONUP) or  (Msg.LParam = WM_RBUTTONDBLCLK) then
    Begin
      SetForegroundWindow(Handle); // Восстанавливаем программу в качестве переднего окна
      Form1.PopupMenu5.Popup(p.X,p.Y); // Заставляем всплыть тот самый TPopUp о котором я говорил ?
      PostMessage(Handle ,WM_NULL,0,0) // Обнуляем сообщение
    end;
End;
end;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
PavelPro
Дата 5.4.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 4.4.2005
Где: Wild Wild West

Репутация: нет
Всего: нет



Спасибо парни!
Добавлено @ 11:14
Я не понйму только что такое ДКРБ все проэто говорят ,А я не в курсах. smile
PM MAIL   Вверх
Alex
Дата 5.4.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Цитата(PavelPro @ 5.4.2005, 11:05)
Я не понйму только что такое ДКРБ все проэто говорят ,А я не в курсах.

90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
~FoX~
Дата 5.4.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Сверху смотри
Добавлено @ 11:21
Alex
[offtop]Вот так всегда, опять я не успел[/offtop] smile smile smile

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  1.jpg


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
PavelPro
Дата 5.4.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 4.4.2005
Где: Wild Wild West

Репутация: нет
Всего: нет



Alex, а как сетапить твой Rxlib!
PM MAIL   Вверх
Alex
Дата 5.4.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Цитата(PavelPro @ 5.4.2005, 11:22)
Alex, а как сетапить твой Rxlib!

Цитата
1. Раскрыть все файлы из архива в папку, куда Вы установили RxLib.
2. Настроить опции в RX.INC.
3. Для BCB, Delphi 4 и выше добавить в Environment Options - Library Path путь <RxLibDir>\dcu\<версия>.
  Например, для Delphi 5 - <RxLibDir>\dcu\d5.
4. Для BCB 4-5, Delphi 3-5 добавить в Environment Options - Library Path путь <RxLibDir>\units\old.
5. Для использования с Delphi 6 и BCB 6 и выше удалить файлы strutils.* из папки <RxLibDir>\units.
6. Перекомпилировать (Build или Compile) rx* пакеты, dclrx* пакеты проинсталлировать (Install):
    Delphi3: rxctl, rxdb, dclrxctl, dclrxdb.
    Delphi4: rxctl4, rxdb4, dclrx4, dclrxdb4.
    Delphi5: rxctl5, rxdb5, rxbde5, dclrx5, dclrxdb5, dclrxbd5.
    Delphi6: rxctl6, rxdb6, rxbde6, dclrx6, dclrxdb6, dclrxbd6 (или только dclrxall6 вместо dcl*6).
    Delphi7: rxctl7, rxdb7, rxbde7, dclrxall7.
    BCB4  : rxctl4, rxdb4, dclrx4, dclrxdb4.
    BCB5  : rxctl5, rxdb5, rxbde5, dclrx5, dclrxdb5, dclrxbd5.
    BCB6  : rxctl6, rxdb6, rxbde6, dclrxall6.



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
PavelPro
Дата 5.4.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 4.4.2005
Где: Wild Wild West

Репутация: нет
Всего: нет



Alex,ты не понял мне не нужен патч мне нужна сама RxLib!
PM MAIL   Вверх
Alex
Дата 5.4.2005, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Цитата(PavelPro @ 5.4.2005, 11:36)
Alex,ты не понял мне не нужен патч мне нужна сама RxLib!

Это ты не понял. Это и есть сама библиотека с исправлениями.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
PavelPro
Дата 5.4.2005, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 4.4.2005
Где: Wild Wild West

Репутация: нет
Всего: нет



Цитата
Раскрыть все файлы из архива в папку, куда Вы установили RxLib.
2. Настроить опции в RX.INC.

Вот этого не могу понять чо и как? smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.