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