Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.06;
Скачать: CL | DM;

Вниз

проблемы с закрытием приложения.   Найти похожие ветки 

 
syte_ser78 ©   (2005-05-19 22:49) [0]

Делаю следующее
Application.ShowMainForm:=False;

по онкреату главного окна делаю иконку в систрее -
procedure Tfrm_main.AddIcon;
begin
  with FIconData do
     begin
     cbSize := SizeOf(FIconData);
     Wnd := Self.Handle;
     uID := $BEDA;
     uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
     hIcon := Application.Icon.Handle;
     uCallbackMessage := WM_MYMESSAGEICON;
     StrCopy(szTip, PChar(Caption));
     end;
  Shell_NotifyIcon(NIM_ADD, @FIconData);
end;

по онклосу главной формы  -    
   Shell_NotifyIcon(NIM_DELETE, @FIconData);
   frm_main.Close;

в итоге -
invalid pointer operation

Подскажите что неверно?


 
Eraser ©   (2005-05-19 22:51) [1]

syte_ser78 ©

А трассировка что показывает?


 
syte_ser78 ©   (2005-05-19 22:54) [2]

тоже самое.
Плюс выскакиет окно - "Процессор" с содержимым регистров.


 
easy ©   (2005-05-19 23:00) [3]

примерно так написано?
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 close;
end;


 
syte_ser78 ©   (2005-05-19 23:07) [4]

Закрытие приложение происходит по онклику попапменю
procedure Tfrm_main.N2Click(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @FIconData);
  frm_main.Close;
end;


 
GanibalLector ©   (2005-05-20 01:01) [5]

Не помню где взял.Но использую часто ;)

Код:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls,ShellApi, Menus;

var
WM_MyNotifyIcon: Cardinal;

type
 TForm1 = class(TForm)
   pmIconTray: TPopupMenu;
   N11: TMenuItem;
   N21: TMenuItem;
   N31: TMenuItem;
   N1: TMenuItem;
   N12: TMenuItem;
   procedure FormCreate(Sender: TObject);
   procedure MyWndProc(var Message: TMessage); //процедура, перекрывающая
                                              //стандартную оконную процедуру
   procedure OnMinimize(Sender: TObject);
   procedure IconTray(aAction: Cardinal);
   procedure N11Click(Sender: TObject);
   procedure N31Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
 uses WinSPool;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
UniqueStr: String;
begin
Application.Title := Self.Caption;
UniqueStr := Application.Title+IntToStr(Application.Handle);
//Получаем уникальный номер Windows-сообщения.
WM_MyNotifyIcon := RegisterWindowMessage(PChar(UniqueStr));
WindowProc := MyWndProc;
Application.OnMinimize := OnMinimize;

end;

procedure TForm1.IconTray(aAction: Cardinal);
var
nid: TNotifyIconData;
begin
//Заполнение структуры
nid.cbSize := SizeOf(TNotifyIconData);    //Размер структуры
nid.Wnd := Self.Handle;                   //Окно назначения
nid.uID := 0;                             //Назначаем идентификатор иконке
nid.uCallBackMessage := WM_MyNotifyIcon;  //Процедура для обработки сообщений
nid.hIcon := Application.Icon.Handle;     //Это основная иконка приложения
StrPCopy(nid.szTip,"ops!!");    //Всплывающая подсказка (Hint)
//Признаки:
//  NIF_ICON    - используется поле nid.hIcon
//  NIF_MESSAGE - используется сообщение с номером nid.uCallBackMessage для обработки
//  NIF_TIP     - для иконки назначен Hint - всплывающая подсказка.
nid.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
case aAction of
  NIM_ADD:  Shell_NotifyIcon(NIM_ADD, @nid);        //Добавление иконки
  NIM_DELETE:  Shell_NotifyIcon(NIM_DELETE, @nid);  //Удаление иконки
  NIM_MODIFY:  Shell_NotifyIcon(NIM_MODIFY, @nid);  //Модификация иконки
end;
end;

procedure TForm1.MyWndProc(var Message: TMessage);
var
P: TPoint;
begin
//Обработка сообщения от иконки в SysTray
if Message.Msg = WM_MyNotifyIcon then
begin
  case Message.LParam of
    WM_LBUTTONDBLCLK :
      begin
        //Восстанавливаем приложение
        ShowWindow(Application.Handle,SW_RESTORE);
        //Восстанавливаем основную форму
        ShowWindow(Application.MainForm.Handle,SW_RESTORE);
        //Приложение - на передний план
        SetForegroundWindow(Application.MainForm.Handle);
        //Удаляем иконку
        IconTray(NIM_DELETE);
      end;
   
    WM_RBUTTONUP:
    begin
      //Считываем позицию курсора на экране
      GetCursorPos(P);
      //Приложение - на передний план
      SetForegroundWindow(Application.MainForm.Handle);
      //Показываем меню в позиции курсора
      pmIconTray.Popup(P.X, P.Y);
    end;
  end;
  //Заканчиваем обработку
  Message.Result := 0;
  Exit;
end;
//Обработка нажатия на кнопку свернуть в заголовке окна
if (Message.Msg=WM_SYSCOMMAND) and
   (Message.wParam = SC_MINIMIZE) then
begin
  //Добавляем иконку
  IconTray(NIM_ADD);
  //Скрываем основную форму
  ShowWindow(Application.MainForm.Handle,SW_HIDE);
  //Скрываем приложение
  ShowWindow(Application.Handle,SW_HIDE);
  //Заканчиваем обработку
  Message.Result := 0;
  Exit;
end;
//Не наше сообщение - вызываем стандартную процедуру окна
WndProc(Message);
end;

procedure TForm1.OnMinimize(Sender: TObject);
begin
 //Добавляем иконку
  IconTray(NIM_ADD);
  //Скрываем основную форму
  ShowWindow(Application.MainForm.Handle,SW_HIDE);
  //Скрываем приложение
  ShowWindow(Application.Handle,SW_HIDE);
  //Заканчиваем обработку
end;

procedure TForm1.N11Click(Sender: TObject);
begin
PostMessage(Application.MainForm.Handle,WM_MyNotifyIcon,0,WM_LBUTTONDBLCLK);
end;

procedure TForm1.N31Click(Sender: TObject);
begin
IconTray(NIM_DELETE);
close;
end;

end.




Страницы: 1 вся ветка

Текущий архив: 2005.06.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
4-1113392364
zsv
2005-04-13 15:39
2005.06.06
Выключение из ограниченной записи


3-1115110402
Руслан
2005-05-03 12:53
2005.06.06
Сортировка по calculated-полю


1-1116519720
yarkeyev
2005-05-19 20:22
2005.06.06
Выпадающее меню....


14-1116416994
alless
2005-05-18 15:49
2005.06.06
Файл .wma


14-1116411476
Arkady
2005-05-18 14:17
2005.06.06
Delphi 2005