unit Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, ApplicationContext, UserAgent, ProductsAgent, ConfigAgent, Navigator; type TControlArray = Array of TControl; TFormMain = class(TForm, INavigator) PanelMain: TPanel; PanelGebruiker: TPanel; PanelTestOmgeving: TPanel; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private FAppContext: TApplicationContext; FConfigAgent: TConfigAgent; FUserAgent: TUserAgent; FProductsAgent: TProductsAgent; public procedure NavigeerNaar(schermId: Integer); end; var FormMain: TFormMain; implementation uses Util, LogInScherm, NavProductScherm, GebruikerScherm; {$R *.dfm} // Dit event wordt altijd aangeroepen, OnClose niet procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin FUserAgent.GebruikerAfmelden(FAppContext.UserContext); // Antwoord wordt genegeerd end; procedure TFormMain.FormCreate(Sender: TObject); begin FAppContext := TApplicationContext.Create(); FConfigAgent := TConfigAgent.Create(); FConfigAgent.LaadConfigWaarden(Application.ExeName, FAppContext.ConfigsContext); FUserAgent := TUserAgent.Create(FAppContext.ConfigsContext.UserServerUrl); FProductsAgent := TProductsAgent.Create(FAppContext.ConfigsContext.SelectServerUrl, FAppContext.ConfigsContext.OptiServerUrl); // Panel voor productiestatus tonen indien nodig PanelTestOmgeving.Visible := not FAppContext.ConfigsContext.IsProductieOmgeving; // Form gebruiker aanmaken bij creatie with TFormGebruiker.Create(PanelGebruiker, Self, FAppContext, FAppContext.UserContext, FUserAgent) do begin Parent := PanelGebruiker; Align := alClient; Show; end; Self.NavigeerNaar(NAVLOGIN); end; procedure TFormMain.NavigeerNaar(schermId: Integer); var NieuwScherm: TControl; begin Application.ProcessMessages; // Interrupts the execution of an application so that it can process the message queue. // Volgende subscherm laden in panel // PanelMain behouden we altijd, the children can be free. TUtil.FreeControlChildren(PanelMain); case schermId of NAVHOME, NAVPRODUCTEN: begin NieuwScherm := TFormProductNav.Create(PanelMain, Self, FAppContext, FUserAgent, FProductsAgent); PanelGebruiker.Visible := true; end; NAVLOGIN: begin NieuwScherm := TFormLogin.Create(PanelMain, Self, FAppContext, FUserAgent); PanelGebruiker.Visible := false; end; else Exception.Create('SchermID: ' + IntToStr(schermId) + ' is onbekend'); NavigeerNaar(NAVHOME); exit; end; NieuwScherm.Parent := PanelMain; NieuwScherm.Align := alClient; NieuwScherm.Show; end; end.