Кто-нибудь пробовал создать форму, подобную "отстегивающимся"
панелькам (FreeDoc)? Я попробовал и вот что получилось...
Код требует использования некоторых функций WinAPI. Описание всех WinAPI
функций доступны при нажатии F1 (электронная справка)...
Ну а теперь попробуем это создать (весь код занимает около 100 строчек)...
Ход работы:
Стартуйте новый проект, задайте свойству borderstyle формы значение bsNone,
добавьте панель, установите у нее свойство borderstyle равным значению bsSingle,
добавьте другую панель с любым заголовком, добавьте кнопку с подсказкой
'переключатель панели заголовка', вырежьте из данного совера код и вставьте его
в модуль, создайте обработчики трех событий панелей (MouseDown, MouseMove,
MouseUp) и один обработчик кнопки (Click). Надеюсь, что ничего не забыл... ;-)
Быстрее сделать это в Delphi, чем написать здесь... ;-)
У меня есть один коментарий отностительно вышеприведенного кода: данная
реализация сложней, чем она должна была быть. Все, что вы должны сделать - это
обработать системное сообщение wm_NCHitTest. Я приведу здесь код, который я
создал для Borland Tech Info, и который выполняет ту же функцию:
unit Dragmain;
interfaceuses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
privateprocedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
end;
var
Form1: TForm1;
implementation{$R *.DFM}procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begininherited; { вызвали наследованный дескриптор сообщения, }if M.Result = htClient then{ кликнув в области окна? }
M.Result := htCaption; { если так, то мы заставили Windows думать, }{ что это область заголовка. }end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
end.
Статья Плавающие панельки раздела Компоненты и Классы TPanel может быть полезна для разработчиков на delphi & pascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.