Содержание материала

 

 

Здесь есть хитрость:

 

Нужно разместить все необходимые элементы управления в отдельной форме, которая должна отслеживать перемещение и изменение размеров основной формы. Данная форма будет всегда находится над областью заголовка основной формы.

 

Нижеприведенный проект включает в себя 2 формы и выпадающий список (combobox). После запуска программы список появляется в области заголовка главной формы. Два ключевых вопроса: 1) организация перехвата сообщения WM_MOVE главной формы; и 2) возвращение фокуса в главную форму после того, как пользователь нажмет на каком-либо элементе управления, способным иметь фокус (например, TComboBox, TButton и др.)

 

Я использую 32-битную Delphi 2.0 под Win95, тем не менее данный код должен работать с любой версией Delphi.

 

Вот исходный код главной формы:

Code:

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

   procedure FormResize(Sender: TObject);

   procedure FormShow(Sender: TObject);

   procedure FormHide(Sender: TObject);

private

   { Private declarations }

public

   { Public declarations }

   procedure WMMove(var Msg: TWMMove); message WM_MOVE;

end;

 

var

Form1: TForm1;

 

implementation

 

uses Unit2;

 

{$R *.DFM}

 

procedure TForm1.FormResize(Sender: TObject);

begin

with Form2 do

begin

   {Заменим мои магические числа реальной информацией SystemMetrics}

   Width := Form1.Width - 120;

   Top := Form1.Top + GetSystemMetrics(SM_CYFRAME);

   Left := ((Form1.Left + Form1.Width) - Width) - 60;

end;

end;

 

procedure TForm1.FormShow(Sender: TObject);

begin

Form2.Show;

end;

 

procedure TForm1.FormHide(Sender: TObject);

begin

Form2.Hide;

end;

 

procedure TForm1.WMMove(var Msg: TWMMove);

begin

inherited;

if (Visible) then

   FormResize(Self);

end;

 

end.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!