Читать «Виртуальная библиотека Delphi» онлайн - страница 111

Unknown

    Refresh;

  end;

end;

procedure TForm1.ShowTitlebar;

var

  Save: Longint;

begin

  if BorderStyle = bsNone then Exit;

  Save := GetWindowLong(Handle, GWL_STYLE);

  if (Save and WS_CAPTION) <> WS_CAPTION then

  begin

    case BorderStyle of

      bsSingle, bsSizeable:

        SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or WS_BORDER);

      bsDialog:

        SetWindowLong(Handle, GWL_STYLE, Save or WS_CAPTION or DS_MODALFRAME or WS_DLGFRAME);

    end;

    Height := Height + GetSystemMetrics(SM_CYCAPTION);

   Refresh;

  end;

end;

24. Как сделать приложение модальным?

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

Ok, пара предложений на эту тему:

1. Создайте форму, занимающую весь экран (maximized) без системных кнопок (Maximize, Minimize, System)

2. В обработчике FormDeactivate для формы вызовите метод SetFocus — это предотвратит Ctrl+Esc:

Form1.SetFocus;

3. В обработчике события FormActivate, нужно присвоить метод Deactivate для приложения:

Application.OnDeactivate := FormDeactivate;

4. Создайте всплывающее меню TPopupMenu с единственным пунктом. В свойствах данного компонента нужно установить Visible=False. Создайте процедуру для этого пункта меню, и в теле поставьте две фигурные скобки {} (для того, чтобы Delphi не удалил эту процедуру)

5. Присвойте созданное Popup-меню форме (св-во PopupMenu)

6. Задайте горячую клавишу (shortcut) для Popup-меню в методе FormActivate как показано ниже:

NullItem1.ShortCut := ShortCut(VK_Tab, [ssAlt]);

(NullItem1 нужно заменить на название созданного вами объекта — пункта меню)

Шаги 4-6 предотвращают переход на приложение по Alt-Tab.

25. Как изменить шрифт у Application.Title (заголовка приложения)?

Никак. Это ограничение Windows — вы не можете изменить шрифт ни у одного заголовка ни у приложения, ни у окна. Для окна можно предложить следующее — создать свое окно без заголовка (Caption) и рамки, которое будет само выводить нужную надпись нужным шрифтом и одновременно будет способно изменять свои размеры.

26. Каким образом (желательно не специфичным для Delphi) узнать, открыто меню или нет?

Вот так:

type

  TForm1 = class(TForm)

    MainMenu1: TMainMenu;

    Item01: TMenuItem;

    Item11: TMenuItem;

    Item21: TMenuItem;

  private

    { Private declarations }

  public

    procedure WMMenuSelect(var M: TWMMenuSelect); message WM_MENUSELECT;

  end;

implementation

{$R *.RES}

procedure TForm1.WMMenuSelect(var M: TWMMenuSelect);

begin

  inherited;