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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает свертывание формы. Использую ком-т TTrayIcon в Delphi EX2 
V
    Опции темы
BEST13
Дата 3.11.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вообщем, Использую компонент для сворачивания приложения в трей TTrayIcon. Так проблема в том, что после сворачивания приложения и разворачивания, оно больше не хочет сворачиватся...как будто ничего не происходит, в чем может быть дело? На форме кнопка с таким кодом:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Minimize;
Form1.Hide;
end;
  

На OnClick компонента TTrayIcon такой код:
Код

 application.Restore;
 application.BringToFront;


И при создании формы такой код:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
SendMessage (Form1.Handle, WM_SYSCOMMAND, SC_ZOOM, 0);//максимизируем  окно
SetWindowPos (Form1.Handle, HWND_TOP, 0, 0,GetSystemMetrics(SM_CXSCREEN),
              GetSystemMetrics(SM_CXSCREEN), SWP_SHOWWINDOW)
end;

PM MAIL ICQ GTalk   Вверх
northener
Дата 3.11.2011, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

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



Цитата(BEST13 @  3.11.2011,  23:30 Найти цитируемый пост)
На OnClick компонента TTrayIcon такой код:
Выделить всёкод Pascal/Delphi
1:
2:
    
 application.Restore;
 application.BringToFront;

Т.е. вы хотите выдвинуть на передний фронт то самое невидимое окно?
Вы бы лучше работали бы с главным окном (которое MainForm).


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
BEST13
Дата 3.11.2011, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



northener, ну у него нет Restore ... его подчеркивает, или мне использовать Form.Show? 
Form.Show переносит из трея в панель задач... форму не показывает...

Это сообщение отредактировал(а) BEST13 - 3.11.2011, 23:59
PM MAIL ICQ GTalk   Вверх
Delvish
Дата 4.11.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

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



немного неверное использование... в примере к компоненте это реализовано через PopupMenu - под default сделано развертывание окна. сворачивать можно по кнопке в приложении либо опять же через Popup

Код

procedure TForm1.ShowWindow1Click(Sender: TObject);
begin
  TrayIcon1.ShowMainForm;    // ALWAYS use this method to restore!!!
end;

procedure TForm1.HideWindow1Click(Sender: TObject);
begin
  Application.Minimize;
  TrayIcon1.HideMainForm;
end;


Это сообщение отредактировал(а) Delvish - 4.11.2011, 11:45
PM MAIL   Вверх
BEST13
Дата 4.11.2011, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Delvish @  4.11.2011,  11:45 Найти цитируемый пост)

Код

TrayIcon1.ShowMainForm;

Все равно ругается Делфи, на этот раз на :ShowMainForm; 
PM MAIL ICQ GTalk   Вверх
Delvish
Дата 4.11.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

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



а в CoolTrayIcon.pas описана эта процедура? может, версия компоненты какая устаревшая?

Код

procedure TCoolTrayIcon.ShowMainForm;
begin
  if Owner is TWinControl then         // Owner might be of type TService
    if Application.MainForm <> nil then
    begin
      // Restore the app, but don't automatically show its taskbar icon
      // Show application's TASKBAR icon (not the tray icon)
//      ShowWindow(Application.Handle, SW_RESTORE);
      Application.Restore;
      // Show the form itself
      if Application.MainForm.WindowState = wsMinimized then
        Application.MainForm.WindowState := wsNormal;    // Override minimized state
      Application.MainForm.Visible := True;
      // Bring the main form (or its modal dialog) to the foreground
      SetForegroundWindow(Application.Handle);
    end;
end;

PM MAIL   Вверх
BEST13
Дата 4.11.2011, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Delvish @  4.11.2011,  19:14 Найти цитируемый пост)
а в CoolTrayIcon.pas описана эта процедура? может, версия компоненты какая устаревшая?

Вы наверно не поняли меня, я использую компонент который в ходит в Delphi EX2.
Вот такой пример, в справке Delphi EX2 ним:  
Код

procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
  { Hide the window and set its state variable to wsMinimized. }
  Hide();
  WindowState := wsMinimized;
 
  { Show the animated tray icon and also a hint balloon. }
  TrayIcon1.Visible := True;
  TrayIcon1.Animate := True;
  TrayIcon1.ShowBalloonHint;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var
  MyIcon : TIcon;
begin
  { Load the tray icons. }
  TrayIcon1.Icons := TImageList.Create(Self);
  MyIcon := TIcon.Create;
  MyIcon.LoadFromFile('icons/earth1.ico');
  TrayIcon1.Icon.Assign(MyIcon);
  TrayIcon1.Icons.AddIcon(MyIcon);
 
  MyIcon.LoadFromFile('icons/earth2.ico');
  TrayIcon1.Icons.AddIcon(MyIcon);
  MyIcon.LoadFromFile('icons/earth3.ico');
  TrayIcon1.Icons.AddIcon(MyIcon);
  MyIcon.LoadFromFile('icons/earth4.ico');
  TrayIcon1.Icons.AddIcon(MyIcon);
 
  { Set up a hint message and the animation interval. }
  TrayIcon1.Hint := 'Hello World!';
  TrayIcon1.AnimateInterval := 200;
 
  { Set up a hint balloon. }
  TrayIcon1.BalloonTitle := 'Restoring the window.';
  TrayIcon1.BalloonHint :=
    'Double click the system tray icon to restore the window.';
  TrayIcon1.BalloonFlags := bfInfo;
end;
 
procedure TForm1.TrayIcon1DblClick(Sender: TObject);
begin
 
  { Hide the tray icon and show the window,
  setting its state property to wsNormal. }
  TrayIcon1.Visible := False;
  Show();
  WindowState := wsNormal;
  Application.BringToFront();
end;


 
Я попробовал,  вроде работает. Но буду, еще тестить, поэтому тему не отмечаю как решонную.

PM MAIL ICQ GTalk   Вверх
Delvish
Дата 5.11.2011, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

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



ааа, ну тогда да, мы о разных вещах думаем smile
я в D-7 использовал сторонний компонент CoolTrayIcon с аналогичной задачей, потому про него и подумал. в приведенном Вами посте пример выглядит рабочим, с ним тоже проблем не должно возникать
PM MAIL   Вверх
BEST13
Дата 6.11.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Delvish,  Пасиб, знаю уже протестировал.
PM MAIL ICQ GTalk   Вверх
ZBugz
Дата 7.11.2011, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

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



А у меня по другому написанно smile И пашет...

Добавлено через 6 минут и 49 секунд
Ну  про это я думаю понятно...
Код

Application.ShowMainForm := False;
......................
MainForm.Show;



PM MAIL   Вверх
Akella
Дата 7.11.2011, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Мне кажется, что есть зависимость от версии Delphi.
У меня D2007. Использую стандартную компоненту TrayIcon.

Код

procedure TfmMain.TrayIcon1DblClick(Sender: TObject);
begin
//показываем форму
  ShowWindow(Application.Handle, SW_SHOW);
  Application.Restore;
  fmMain.Show;
  Application.ShowMainForm := True;
  ShowWindow(self.Handle, SW_SHOW);
end;



Код

procedure TfmMain.pmHideClick(Sender: TObject);
begin
//прячем форму
  ShowWindow(Application.Handle, sw_Hide);
  ShowWindow(self.Handle, sw_Hide);
end;


в файле проекта (*.dpr) должна присутствовать строка: Application.MainFormOnTaskbar := true;


PM MAIL   Вверх
BEST13
Дата 7.11.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Akella, возможно вы и правы, может есть  различия в версиях.
PM MAIL ICQ GTalk   Вверх
ZBugz
Дата 7.11.2011, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

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



Цитата

Мне кажется, что есть зависимость от версии Delphi.
У меня D2007.

Точно знаю что в XE и XE2 уже старый код не работал, поэтому и переписывал, как выше написал.
PM MAIL   Вверх
Akella
Дата 8.11.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(BEST13 @ 7.11.2011,  15:10)
Akella, возможно вы и правы, может есть  различия в версиях.

Различия в этой строке: Application.MainFormOnTaskbar := true;

Добавлено через 1 минуту и 22 секунды
Там ещё есть фишки вот в чем: нужно ли сворачивать ВСЕ открытые формы приложения при сворачивании главной формы или только лишь одну главную форму нужно сворачивать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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