глюк с MINIMIZE формы
От: ed_30  
Дата: 03.10.03 10:36
Оценка:
Добрый день.

Вопрос, оговоренный кучу раз... но вот столкнулся с такой проблемой. Процедура проверки запуска второй копии приложения.

program Project1;
uses
  Windows,
  Forms,
  Dialogs,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

var
  HM: THandle = 0;
  PrevInstWnd: HWND;

function CheckForInstance: Boolean;
var
  HW: THandle;
begin
  HM := OpenMutex(MUTEX_ALL_ACCESS, False, 'MyMutex');
  Result := True;
  if HM <> 0 then begin
    Result := False;
    HM := 0;
  end else HM := CreateMutex(nil, False, 'MyMutex');
end;


begin
  if not CheckForInstance then begin
    PrevInstWnd := FindWindow('TForm1', 'Form1');
    ShowWindow(PrevInstWnd, SW_RESTORE);
    SetForegroundWindow(PrevInstWnd);
    Halt;
  end;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  if HM <> 0 then ReleaseMutex(HM);
end.

Минимизирую первую копию. Пытаюсь запустить вторую. Все замечательно работает. Вторая копия не появляется. Но после Restore первой копии, не могу ее (первую копию) минимизировать кнопкой формы:xz:. Вставил в форму такой обработчик.

  TForm1 = class(TForm)
  private
    { Private declarations }
    procedure WMGetSysCommand(var Message :TMessage); message WM_SYSCOMMAND;
  public
    { Public declarations }
  end;

procedure TForm1.WMGetSysCommand(var Message : TMessage) ;
begin
  if Message.wParam = SC_MINIMIZE then begin
    ShowWindow(Application.Handle, SW_MINIMIZE);
    ShowMessage('!');
  end else inherited;
end;


MessageDlg показывает, но форма не минимизируется. Как быть?

Заранее спасибо за ответы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.