Главная » 2009 » Ноябрь » 6 » Создание приложения наподобие MS Outlook
08:47
Создание приложения наподобие MS Outlook
У Вас возникла необходимость создать многооконное приложение, но не хочется захламлять экран большим количеством окошек ? Создайте формы как обычно, но в каждой форме, за исключением основной, установите BorderStyle=bsNone. Затем на основную форму перетащите панель которая будет управлять заполнением Ваших форм данными и полями ввода. В Основной форме нужно добавить примерно такой код: 

acXxxxx - это действие, которое будет выполняться при нажатии на элемент (пункт меню, кнопка, акселератор и т.д.) ассоциированный с этим действием через свойство Action.

TfrmIMMain

private

(*

используется для заполнения всего экрана

*)

procedure WMSettingChange( var Msg: TMessage);message WM_SETTINGCHANGE;

public

ActiveDetailForm: TForm;//Форма, которая активна в данный момент

procedure SetActiveDetailForm(F: TForm; ParentControl: TWinControl);

end;

var

frmIMMain: TfrmIMMain;

implementation

uses imdata, imSoftL, imSuppl, imEqDet, imDesk, imSpareP, imCateg,

imLocL, imUserL, imEqList, imEqByUsr, imImpBlb, imSftLic, imSupL,

imEqDetR, imRptPrm, imdmRep, imSftLicRepPrm, imSparePR, imSparePPrm,

imSftDetR, imSoftDetRPrmDlg;

{$R *.DFM}

function GetWindowsWorkArea: TRect;

begin

SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0);

end;

procedure TfrmIMMain.WMSettingChange( var Msg: TMessage);

var

R: TRect;

begin

if (Msg.WParam=SPI_SETWORKAREA) then

begin

R:=GetWindowsWorkArea;

SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);

end;

Msg.Result:=0;

end;

procedure TfrmIMMain.FormCreate(Sender: TObject);

var

R: TRect;

begin

// заполняем весь экран...

R:=GetWindowsWorkArea;

SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);

end;

// показываем форму списка Software

procedure TfrmIMMain.acSoftwareListExecute(Sender: TObject);

begin

if (Sender is TAction) then

begin

(Sender as TAction).Checked:=True;

fcbSoftList.Down:=True;

end;

//paWorkArea это панель, которая использется, как управляющая для форм

SetActiveDetailForm(frmIMSoftList, paWorkArea);

end;

// показываем форму "Оборудование"...

procedure TfrmIMMain.acEquipmentDetailsExecute(Sender: TObject);

begin

if (Sender is TAction) then

begin

(Sender as TAction).Checked:=True;

fcbEqDet.Down:=True;

end;

SetActiveDetailForm(frmIMEqDet, paWorkArea);

end;

// устанавливаем активную форму, чтобы выглядело как в MS outlook.......

// ParentControl это TPanel, но это может быть любой оконный элемент управления (который

имеет оконное свойство Handle)

procedure TfrmIMMain.SetActiveDetailForm(F: TForm; ParentControl:

TWinControl);

begin

if ActiveDetailForm<>F then

begin

if Assigned(ActiveDetailForm) then

ActiveDetailForm.Hide;

//следующие две линии делают то, что нам нужно...

F.Parent:=ParentControl;

F.Align:=alClient;

ActiveDetailForm:=F;

F.Show;

end;

end;

procedure TfrmIMMain.FormActivate(Sender: TObject);

begin

//устанавливаем форму по умолчанию при запуске.

if not Assigned(ActiveDetailForm) then

acEquipmentDetailsExecute(acEquipmentDetails);

end;

Источник: http://www.sources.ru
Категория: Программирование | Просмотров: 853 | Добавил: admin | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]