Конференция ".Net" » Ошибка при выполнении inherited под .NET [D2005, WinXP]
 
  • av-mari © (26.02.07 11:09) [0]
    Добрый день! Пишу проект в Delphi2005 .NET. Код сворачивает прогу в трей. В приведенном ниже коде возникает ошибка "Object reference not set to an instance of an object" при попытке других действий с формой (перетаскивание, ресайзинг, закрытие) при выполнении inherited. В Win-приложении все нормально.
    Благодарю за ответы.

    type
     TForm1 = class(TForm)
       PopupMenu1: TPopupMenu;
       N1: TMenuItem;
       N3: TMenuItem;
       N2: TMenuItem;
       N4: TMenuItem;
       N5: TMenuItem;
       StatusBar1: TStatusBar;
       PageControl1: TPageControl;
       TabSheet1: TTabSheet;
       DBGrid1: TDBGrid;
       TabSheet2: TTabSheet;
       procedure N4Click(Sender: TObject);
       procedure FormCreate(Sender: TObject);
       procedure N1Click(Sender: TObject);
       procedure FormClose(Sender: TObject; var Action: TCloseAction);
       procedure N5Click(Sender: TObject);
       procedure ReViewExecute(Sender: TObject);
     protected
       procedure WMSYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND;
       procedure IconMouse(var Msg: TMessage); message WM_USER + 1;
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    Function ReadUserName:string;
    Procedure Ic(n:Integer;Icon:TIcon);

    implementation

    uses Data, NewZ;

    {$R *.nfm}
    // включить небезопасный код
    {$UNSAFECODE ON}

    procedure TForm1.WMSYSCOMMAND(var Msg: TMessage);
     begin
       if Msg.WParam = SC_MINIMIZE then
         begin
           Ic(1, Application.Icon); // Добавляем значок в трей
           Form1.Hide; // Скрываем форму
         end
       else
         inherited;// ОШИБКА
    end;

    procedure TForm1.IconMouse(var Msg: TMessage);
    var p: tpoint;
    begin
     GetCursorPos(p); // Запоминаем координаты курсора мыши
     case Msg.LParam of // Проверяем какая кнопка была нажата
       {Действия, выполняемый по одинарному или двойному щелчку левой кнопки мыши на значке.
       В нашем случае это ввод новой записи}
       WM_LBUTTONUP, WM_LBUTTONDBLCLK:
         begin
           Ic(3, Application.Icon); // Удаляем значок из трея
           Form1.N1Click(N1);// вводится новая запись
         end;
       WM_RBUTTONUP: {Действия, выполняемый по одинарному щелчку правой кнопки мыши}
         begin
           SetForegroundWindow(Handle); // Восстанавливаем программу в качестве переднего окна
           PopupMenu1.Popup(p.X, p.Y); // Заставляем всплыть TPopUp
           PostMessage(Handle, WM_NULL, 0, 0) // Обнуляем сообщение
         end;
     end;
    end;

    Procedure Ic(n:Integer;Icon:TIcon); unsafe;

    Var
     Nim: TNotifyIconData;
    begin
     With Nim do begin
       cbSize:=SizeOf(Nim);
       Wnd:=Form1.Handle;
       uID:=1;
       uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
       hicon:=Icon.Handle;
       uCallbackMessage:=wm_user+1;
       szTip:='Регистрация заявок';
     End;
     Case n OF
       1: Shell_NotifyIcon(Nim_Add,Nim);
       2: Shell_NotifyIcon(Nim_Delete,Nim);
       3: Shell_NotifyIcon(Nim_Modify,Nim);
     End
    end;
  • clickmaker © (26.02.07 13:16) [1]

    > В Win-приложении все нормально.

    а приведенный код - это какое приложение?
  • av-mari © (27.02.07 08:05) [2]
    Это приложение VCL .NET В D7 у меня тоже все ОК
  • DiamondShark © (01.03.07 19:36) [3]
    Это не приложение VCL .NET
  • имя (23.03.09 18:38) [4]
    Удалено модератором
  • имя (23.03.09 18:39) [5]
    Удалено модератором
 
Конференция ".Net" » Ошибка при выполнении inherited под .NET [D2005, WinXP]
Есть новые Нет новых   [118667   +47][b:0][p:0]