Outlook Express: "Ваше сообщение не может быть отправлено, так как работник ФСБ, проверяющий вашу почту временно отсутствует!"
У Вас возникла необходимость создать многооконное приложение, но не хочется захламлять экран большим количеством окошек ? Создайте формы как обычно, но в каждой форме, за исключением основной, установите BorderStyle=bsNone. Затем на основную форму перетащите панель которая будет управлять заполнением Ваших форм данными и полями ввода. В Основной форме нужно добавить примерно такой код:
acXxxxx - это действие, которое будет выполняться при нажатии на элемент (пункт меню, кнопка, акселератор и т.д.) ассоциированный с этим действием через свойство Action.
private// используется для заполнения всего экранаprocedure WMSettingChange(var Msg: TMessage); message WM_SETTINGCHANGE;
public
ActiveDetailForm: TForm; // Форма, которая активна в данный моментprocedure SetActiveDetailForm(F: TForm; ParentControl: TWinControl);
end;
var
frmIMMain: TfrmIMMain;
implementationuses
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;
beginif (Msg.WParam=SPI_SETWORKAREA) thenbegin
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;
// показываем форму списка Softwareprocedure TfrmIMMain.acSoftwareListExecute(Sender: TObject);
beginif (Sender is TAction) thenbegin
(Sender as TAction).Checked:=True;
fcbSoftList.Down:=True;
end;
//paWorkArea это панель, которая использется, как управляющая для форм
SetActiveDetailForm(frmIMSoftList, paWorkArea);
end;
// показываем форму "Оборудование"...procedure TfrmIMMain.acEquipmentDetailsExecute(Sender: TObject);
beginif (Sender is TAction) thenbegin
(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);
beginif ActiveDetailForm<>F thenbeginif Assigned(ActiveDetailForm) then
ActiveDetailForm.Hide;
//следующие две линии делают то, что нам нужно...
F.Parent:=ParentControl;
F.Align:=alClient;
ActiveDetailForm:=F;
F.Show;
end;
end;
procedure TfrmIMMain.FormActivate(Sender: TObject);
begin//устанавливаем форму по умолчанию при запуске.ifnot Assigned(ActiveDetailForm) then
acEquipmentDetailsExecute(acEquipmentDetails);
end;
Перевод:
Это приложение на языке Delphi, которое стремится создать клиент электронной почты, похожий на Outlook, с множеством форм и панелями для управления разными задачами. Код, предоставленный, является начальным пунктом, но он lacks some важная функциональность.
Распределение кода:
WMSettingChange procedure: Это обработчик Windows-сообщения, который обновляет границы формы при изменении разрешения экрана или рабочей области.
FormCreate procedure: Это инициализирует основную форму и устанавливает ее границы в соответствии с доступной рабочей областью на экране.
Action procedures: Эти обработчики событий для различных действий (например, "Список программного обеспечения" и "Детали оборудования"). Когда действие запускается, оно устанавливает соответствующую форму как активную и делает ее видимой.
SetActiveDetailForm procedure: Это метод, который устанавливает новую активную детальную форму и обновляет ее родительский контроль, выравнивание и видимость.
Некоторые предложения по улучшению кода:
Рассмотрите использование более robust способа управления формами, например, с помощью TFrame или TFormCollection, вместо использования множества форм с разными действиями.
Вместо жесткого кодирования имен действий рассмотрите использование enum или списка действий для улучшения maintainability и flexibility кода.
Можете добавить некоторые обработчики ошибок для случаев, когда активная детальная форма не устанавливается правильно.
Рассмотрите добавление более функциональности в WMSettingChange procedure, например, обновления других форм и контролов при изменении разрешения экрана.
Чтобы создать более Outlook-напоминающее пользовательское интерфейсе, вы можете рассмотреть реализацию следующих функций:
Сайдбар или панель навигации с кнопками или меню, позволяющими пользователям переключаться между различными видами (например, почта, контакты, календарь).
Основная область содержимого, отображающая активную форму.
Панели инструментов и меню, предоставляющие дополнительные функциональности (например, отправка электронной почты, создание нового контакта).
Помните о соблюдении лучших практик разработки Delphi, таких как использование описательных имен переменных, разделение кода на логические блоки и тестирование приложения тщательно.
Создание приложения наподобие MS Outlook: создайте формы как обычно, а затем на основную форму перетащите панель, управляющую заполнением форм данными и полями ввода.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.