Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 859

/ вопрос закрыт /

Приветствую, уважаемые эксперты!
Помогите с выполнением Лабы! По заданию нужно создать форму, у которой только кнопка "свернуть". Настраиваю для формы
biSystemMenu=false;
biMinimize=true;
biMaximize=false;
biHelp=false
Запускаю форму - нет ни одной кнопки. Что делать?

KwaK Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: KwaK (статус: Посетитель)
Вопрос отправлен: 25 декабря 2010, 09:31
Состояние вопроса: закрыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Здравствуйте, KwaK!
Если условия позволяют не удалить, а отключить ненужные кнопки, то сделай BorderIcons = [biSystemMenu,biMinimize,biMaximize], а потом в OnCreate:

procedure TForm1.FormCreate(Sender: TObject);
var
  hMenuHandle: HMENU;
begin
  inherited;
  // Отключение кнопки "закрыть" и "развернуть"
  hMenuHandle := GetSystemMenu(Handle, false);
  if hMenuHandle <> 0
    then begin
           DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
           DeleteMenu(hMenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);
         end;
end;

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 25 декабря 2010, 10:37
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 25 декабря 2010, 11:21; участников в обсуждении: 2.

25 декабря 2010, 09:39: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Лабораторный практикум » Delphi модератором min@y™

min@y™

min@y™ (статус: Доктор наук), 25 декабря 2010, 09:56 [#1]:

Если условия позволяют не удалить, а отключить ненужные кнопки, то сделай BorderIcons = [biSystemMenu,biMinimize,biMaximize], а потом в OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
var
  hMenuHandle: HMENU;
begin
  inherited;
  // Отключение кнопки "закрыть" и "развернуть"
  hMenuHandle := GetSystemMenu(Handle, false);
  if hMenuHandle <> 0
    then begin
           DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
           DeleteMenu(hMenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);
         end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
KwaK

KwaK (статус: Посетитель), 25 декабря 2010, 10:08 [#2]:

Прежде всего спасибо!
А проще нельзя? Меня сразу срежут на защите, для нас это слишком умно. Вообще решение простыми средствами возможно? (типа еще какое-то свойство поставить в True/false)?
min@y™

min@y™ (статус: Доктор наук), 25 декабря 2010, 10:18 [#3]:

Цитата (KwaK):

А проще нельзя?

Нет, нельзя. Кнопка "Закрыть" отключается только так.

Цитата (KwaK):

Меня сразу срежут на защите, для нас это слишком умно.

Это почему же? Скажешь, что нашёл решение в интернете.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
KwaK

KwaK (статус: Посетитель), 25 декабря 2010, 10:27 [#4]:

сделал BorderIcons = [biSystemMenu,biMinimize,biMaximize], вставил Ваш код (с учетом, что моя форма fmLab1 т.е.procedure TfmLab1.FormCreate(Sender: TObject);)
кнопка biMaximize все равно работает.
Сделал BorderIcons = [biSystemMenu,biMinimize] - теперь все отлично.
Вообще - это решение поставленной задачи, почему вы не написали в ответы?
min@y™

min@y™ (статус: Доктор наук), 25 декабря 2010, 10:37 [#5]:

Цитата (KwaK):

кнопка biMaximize все равно работает.

Странно, у меня эта кнопка не работает.

Цитата (KwaK):

Вообще - это решение поставленной задачи, почему вы не написали в ответы?

Потому что это было предварительно, а также потому, что у меня есть возможность преобразовать сообщение в ответ, что я сейчас и сделаю.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
KwaK

KwaK (статус: Посетитель), 25 декабря 2010, 10:51 [#6]:

все проверил -кнопка "развернуть" работает. Как переслать мой код?
min@y™

min@y™ (статус: Доктор наук), 25 декабря 2010, 10:55 [#7]:

Цитата (KwaK):

Как переслать мой код?

Пересылать не надо, можешь тут выложить.

Цитата (KwaK):

кнопка "развернуть" работае

Она действительно разворачивает окно или просто активна, но ничего не делает?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
KwaK

KwaK (статус: Посетитель), 25 декабря 2010, 11:01 [#8]:

Кнопка действительно разворачивает окно. Из трех кнопок "закрыть"-недоступна и нажатие на нее ничего не дает. Кнопки "минимизировать" и "развернуть" работают как положено. Вот полный код модуля
unit Switch;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons;

type
TfmLab1 = class(TForm)
Foto1: TImage;
Foto2: TImage;
btExit: TBitBtn;
laName: TLabel;
laBDay: TLabel;
laAdress: TLabel;
laStudent: TLabel;
btNoFotos: TButton;
btSwitch: TButton;
procedure btExitClick(Sender: TObject);
procedure btNoFotosClick(Sender: TObject);
procedure btSwitchClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
fmLab1: TfmLab1;
blnFoto: boolean;
implementation

{$R *.dfm}

procedure TfmLab1.btExitClick(Sender: TObject);
begin
close
end;

procedure TfmLab1.btNoFotosClick(Sender: TObject);
begin
foto1.Visible:=false;
foto2.Visible:=false;
end;

procedure TfmLab1.btSwitchClick(Sender: TObject);
begin
blnFoto:=not blnFoto;
if blnfoto then
begin
foto1.Visible:=true;
foto2.Visible:=false;
end
else
begin
foto2.Visible:=true;
foto1.Visible:=false;
end
end;

procedure TfmLab1.FormCreate(Sender: TObject);
var
hMenuHandle: HMENU;
begin
inherited;
// Отключение кнопки "закрыть" и "развернуть"
hMenuHandle := GetSystemMenu(Handle, false);
if hMenuHandle <> 0
then begin
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
DeleteMenu(hMenuHandle, SC_MAXIMIZE, MF_BYCOMMAND);
end;
end;
end.
min@y™

min@y™ (статус: Доктор наук), 25 декабря 2010, 11:13 [#9]:

У меня ОС Windows7, кнопка "развернуть" доступна, но не работает.
Код не смотрел, глаза режет.
И вообще, зачем нужно такое ограничение?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
KwaK

KwaK (статус: Посетитель), 25 декабря 2010, 11:21 [#10]:

Все вопрос закрыт. Я ставлю BorderIcons = [biSystemMenu,biMinimize] и все работает как надо, просто хотел до конца разобраться с кодом. У меня Windows XP. Еще раз спасибо

25 декабря 2010, 11:24: Вопрос закрыт (решение принял автор вопроса — KwaK): я полностью удовлетворен предложенным решением

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.04 сек.