Главная страница
    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.013 c
14-1116265826
Nous Mellon
2005-05-16 21:50
2005.06.06
Онлайн-бизнес


14-1115453410
Kolan
2005-05-07 12:10
2005.06.06
Класные спутниковые карты. От Google


3-1114757906
UVV
2005-04-29 10:58
2005.06.06
Ehlib, а можно ли


14-1116636141
Максим О.
2005-05-21 04:42
2005.06.06
Помогите с Dephi 8


1-1116704671
violla
2005-05-21 23:44
2005.06.06
Проблема с MDI окнами!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский