Delphi

КОМПЬЮТЕРНЫЕ КУРСЫ "ПОИСК"

[Главная страница] [Delphi] [Контакты]

Значки границы


Значки границы

Важный элемент формы — присутствие значков на его границе. По умолчанию окно имеет маленький значок, подключенный к системному меню, сворачивающую кнопку, разворачивающую кнопку и закрывающую кнопку. С помощью свойства Borderlcons, имеющего четыре возможных значения (biSystemMenu, biMinimize, biMaximize и biHelp), можно задавать различные параметры.

Пример BIcons демонстрирует поведение формы с различными значками границы и порядок изменения этого свойства во время выполнения. Форма примера очень проста: она включает только раскрывающееся меню с четырьмя пунктами, по одному для каждого из возможных элементов набора значков границы. Единый метод для этих четырех команд , который читает метки на пунктах меню для определения значения свойства Borderlcons. Поэтому этот код является также хорошим упражнением при работе с наборами:

procedure TForm1.SetIcons(Sender: TObject);
var
  BorIco: TBorderIcons;
begin
  (Sender as TMenuItem).Checked := not (Sender as TMenuItem).Checked;
  if SystemMenu1.Checked then
    BorIco := [biSystemMenu]
  else
    BorIco := [];
  if MaximizeBox1.Checked then
    Include (BorIco, biMaximize);
  if MinimizeBox1.Checked then
    Include (BorIco, biMinimize);
  if Help1.Checked then
    Include (BorIco, biHelp);
  BorderIcons := BorIco;
end;

При выполнении примера BIcons можно легко устанавливать и удалять различные визуальные элементы границы формы. При зтом вы сразу увидите, что некоторые из этих элементов тесно связаны: при удалении системного меню исчезают все значки границы; при удалении сворачивающей или раскрывающей кнопки она становится затененной; если удалить обе эти кнопки, они исчезают. Заметьте также, что в двух последних случаях автоматически блокируются соответствующие элементы системного меню. Это стандартное поведение для любого приложения Windows. Если раскрывающая и сворачивающая кнопки отключены, можно активизировать кнопку Help.

Исходный код здесь.

Источник:Кэнту М. Delphi 7:Для профессионалов


 

Регистрация горячей клавиши


Рассмотрим пример окна, обрабатывающего не предусмотренное VCL сообщение, в качестве которого используем WM_HOTKEY. Это сообщение посылается окну посредством зарегистрированной в Windows горячей клавиши, что позволяет программе реагировать на нее, даже не имея фокуса ввода:

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    // Объявляем процедуру-обработчик
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
   // Регистрируем горячую клавишу Ctrl+Alt+F5
   RegisterHotKey(Handle, 0, MOD_CONTROL or MOD_ALT, VK_F5);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Отменяем регистрацию горячей клавиши
   UnRegisterHotKey(Handle, 0);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
   // Эта процедура вызывается при получении окном
   // сообщения WM_HOTKEY
   inherited;  // Даем форме обработать сообщение,
               // если у нее уже есть его обработчик
   Beep;       // Выполняем дополнительные действия
end;

Хочется обратить ваше внимание на вызов унаследованного обработчика в методе WMHotKey. Если вы не уверены, что хотите запретить обработку предком подобного сообщения, — всегда вызывайте унаследованный обработчик. В противном случае вы рискуете помешать VCL обрабатывать сообщения. Например, написав свой обработчик WM_PAINT и не вызвав в нем унаследованный, вы полностью заблокируете перерисовку формы средствами VCL.

Источник: Анатолий Тенцер. Delphi и Windows API . КомпьютерПресс 8'2001