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; const NAVHOME = 0; NAVLOGIN = 1; NAVZOEKPRODUCTEN = 2; type INavigator = interface ['{1648577B-6F43-4C3D-9122-F4F74D998611}'] procedure NavigeerNaar(schermId: Integer); end; TControlArray = Array of TControl; TFormMain = class(TForm, INavigator) PanelMain: TPanel; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private FAppContext: TApplicationContext; FUserAgent: TUserAgent; FProductsAgent: TProductsAgent; public procedure NavigeerNaar(schermId: Integer); end; TCustomControl = Class(TControl) End; var FormMain: TFormMain; implementation uses Subscherm, NavGridPanel, Util, LogInScherm, ZoekProductenScherm, GebruikerScherm, GevondenProductenScherm, ProductDetailScherm; {$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(); FUserAgent := TUserAgent.Create(); FProductsAgent := TProductsAgent.Create(); { TODO -cMain: Wat doet dit in de originele applicatie?: fUiContext.ImagesScherm := TImagesScherm.Create(self); } { TODO -cMain: Kijken of "VerwerkParamStrings;" nodig is } PanelMain.Parent := Self; PanelMain.Align := TAlign.alClient; Self.NavigeerNaar(NAVLOGIN); end; procedure TFormMain.NavigeerNaar(schermId: Integer); var NieuwScherm: TControl; NavGridPanelStandard: TNavGridPanelStandard; i: Integer; 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. for i := 0 to PanelMain.ControlCount - 1 do TUtil.FreeControlChildrenRec(PanelMain.Controls[i]); case schermId of NAVHOME, NAVZOEKPRODUCTEN: begin { TODO -cUI : Onderzoeken of 'TSplitter' een beter alternatief is dan volledig een gridview } // Gebruikersgegevens scherm, zoekscherm, resultaten en detail scherm inladen. NavGridPanelStandard := TNavGridPanelStandard.Create(PanelMain); NieuwScherm := NavGridPanelStandard; FProductsAgent.LaadUIInstellingen(FAppContext.UserContext, FAppContext.UiInstellingenContext); // Gebruikersgegevens scherm bovenaan // Zoekscherm daaronder links // Resultaten scherm daaronder links // Rechts is helemaal voor detail scherm NavGridPanelStandard.Init(TFormGebruiker.Create(NavGridPanelStandard, Self, FAppContext, FAppContext.UserContext, FUserAgent), TFormZoekProducten.Create(NavGridPanelStandard, Self, FAppContext, FProductsAgent), TFormGevondenProducten.Create(NavGridPanelStandard, Self, FAppContext, FAppContext.ProductsContext, FProductsAgent), TFormProductDetail.Create(NavGridPanelStandard, Self, FAppContext, FAppContext.ProductDetailContext)); end; NAVLOGIN: NieuwScherm := TFormLogin.Create(PanelMain, Self, FAppContext, FUserAgent); else Exception.Create('SchermID: ' + IntToStr(schermId) + ' is onbekend'); NavigeerNaar(NAVHOME); exit; end; NieuwScherm.Parent := PanelMain; NieuwScherm.Align := alClient; NieuwScherm.Show; end; end.