Форум: "Основная";
Текущий архив: 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.012 c