Следующий текст убирает команду закрыть из системного меню и одновременно делает серой кнопку закрыть в заголовке формы:
procedure TForm1.FormCreate(Sender: TObject);
var hMenuHandle:HMENU;
begin
hMenuHandle := GetSystemMenu(Handle, FALSE);
IF (hMenuHandle <> 0) THEN DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
Немедленный TrayIcon после старта приложения
Нужно чтобы при запуске приложения сразу исчезала с экрана главная форма и появлялась TrayIcon. В Ваших «Советы по Дельфи» на данный вопрос я нашел два решения (раздел Классы/TForm) к сожалению ни одно решения на моем компьютере не работало :-(. В связи с этим было решено продолжить поиск, и решение было найдено:
На Главную форму приложения помещаем компонент (TEdit или другой любой, который может иметь фокус), затем устанавливаем свойства:
Visible:=True;
TabOrder:=0;
В обработчик события OnEnter записываем (этот код взял из «Советов по Дельфи»):
Application.Minimize;
ShowWindow(Application.Handle, SW_HIDE);
Button1.SetFocus; //Устанавливаем фокус на другой компонент формы (у меня был Button1 )
Edit1.Visible:=False; //Делаем добавочный компонент невидимым – т.к. он больше нам не нужен
Механизм работы:
При запуске приложения создается форма и фокус получает компонент со свойством TabOrder:=0, при получении фокуса вызывается процедура OnEnter для нашего компонента и происходит скрытие формы.
Для восстановления формы необходим код:
ShowWindow(Application.Handle, SW_RESTORE);
Application.Restore;
Для реализации TrayIcon был использован компонент TRxTrayIcon из библиотеки RxLib ver.2.75 Данное решение имеет один недостаток – незначительное мерцание формы при ее сворачивании.