Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.015 c
4-1113303401
Stalker01
2005-04-12 14:56
2005.06.06
Скрыть папку


6-1111530471
ALex B.
2005-03-23 01:27
2005.06.06
NetUseAdd


1-1116871645
Dmitry
2005-05-23 22:07
2005.06.06
Проблемы с цветовыми схемами Windows


9-1110556718
VolanD666
2005-03-11 18:58
2005.06.06
Русская душа тянется к ХАЛЯВЕ...


1-1116670304
Eldar
2005-05-21 14:11
2005.06.06
Добавление, а не замена текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский