КОМПЬЮТЕРНЫЕ КУРСЫ "ПОИСК"
[Главная страница] [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