Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокирование крестика-выхода 
:(
    Опции темы
Ganoci
Дата 16.5.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 8.2.2008

Репутация: нет
Всего: нет



Ребят, подскажите пожалуйста как можно (если это возможно) заблокировать на форме в Delphi (конечно когда программа запущена) крестик-выход, т.к. имеется кнопка выхода?
При этом два других компонента (свернуть/развернуть) пускай останутся как есть...

Хорошо если этого крестика вобще не будет видно, но сойдет, чтобы он был неактивным.

PM MAIL   Вверх
Poseidon
Дата 16.5.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Можно просто отключить возможность закрытия окна по этому "крестику"

Код

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caNone;
end;


А вот диактивирование кнопки [X]
Код
procedure TForm1.FormCreate(Sender: TObject);
var
hwndHandle: THANDLE;
hMenuHandle: HMENU;
iPos: Integer;

begin
hwndHandle := FindWindow(nil, PChar(Caption));
if (hwndHandle <> 0) then
  begin
     hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
     if (hMenuHandle <> 0) then
     begin
       DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
       iPos := GetMenuItemCount(hMenuHandle);
       Dec(iPos);
         { Надо быть уверенным, что нет ошибки т.к. -1 указывает на ошибку }
       if iPos > -1 then
         DeleteMenu(hMenuHandle, iPos, MF_BYPOSITION);
     end;
  end;
end;


Это сообщение отредактировал(а) Poseidon - 16.5.2008, 13:35


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Qu1nt
Дата 16.5.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 18
Всего: 50



Код

procedure TForm1.FormCreate(Sender: TObject);
var
  hMenuHandle : HMENU;
begin
  hMenuHandle := GetSystemMenu(Handle, False);
  if (hMenuHandle <> 0) then
    DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;

Ы?
PM MAIL   Вверх
Poseidon
Дата 16.5.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Qu1nt, в твоем варианте появляется некрасивость в виде разделительной линии в системном меню окна. Нужно и его удалять, раз удаляешь пункт меню, который он отделяет.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Qu1nt
Дата 16.5.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 18
Всего: 50



Не заметил, получается немножко длиннее:
Код

procedure TForm1.FormCreate(Sender: TObject);
var
  hMenuHandle : HMENU;
begin
  hMenuHandle := GetSystemMenu(Handle, False);
  if hMenuHandle = 0 then
    Exit;
  DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
  if GetMenuItemCount(hMenuHandle) > - 1 then
    DeleteMenu(hMenuHandle, GetMenuItemCount(hMenuHandle) - 1, MF_BYPOSITION);
end;

PM MAIL   Вверх
Ganoci
Дата 16.5.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 8.2.2008

Репутация: нет
Всего: нет



Poseidon
Qu1nt 
Не вижу принципиальной разницы в результате.
Поэтому огромное вам спасибо!

Это сообщение отредактировал(а) Ganoci - 16.5.2008, 14:11
PM MAIL   Вверх
Poseidon
Дата 16.5.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Ganoci @  16.5.2008,  14:11 Найти цитируемый пост)
Не вижу принципиальной разницы в результате.
Разница в системном меню. Первый вариант Qu1nt выдавал вот такое меню:
user posted image

черта внизу - это разделитель. Он там лишний, т.к. по умолчанию он разделяет пункт "Закрыть" от всех остальных. Раз "Закрыть" удалили, то и этот разделитель тоже нужно бы удалить. Во втором варианте Qu1nt это исправил.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.