unit GebruikerScherm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, ObserverPattern, UserAgent, Navigator, ApplicationContext, Subscherm; type TFormGebruiker = class(TFormSubscherm) LabelGebruikersnaam: TLabel; PanelLogIn: TPanel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure PanelLogInMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PanelLogInMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure PanelLogInClick(Sender: TObject); private FGebruikerSubject: TSubject; FGebruikerSubjectObserver: TSubjectObserver; FUserAgent: TUserAgent; procedure UpdateGui(Sender: TObject); public Constructor Create(AOwner: TComponent; Navigator: INavigator; ApplicationContext: TApplicationContext; GebruikerSubject: TSubject; UserAgent: TUserAgent); end; implementation {$R *.dfm} constructor TFormGebruiker.Create(AOwner: TComponent; Navigator: INavigator; ApplicationContext: TApplicationContext; GebruikerSubject: TSubject; UserAgent: TUserAgent); begin inherited Create(AOwner, Navigator, ApplicationContext); self.FGebruikerSubject := GebruikerSubject; self.FGebruikerSubjectObserver := TSubjectObserver.Create(); self.FGebruikerSubjectObserver.OnChange := UpdateGui; self.FUserAgent := UserAgent; end; procedure TFormGebruiker.FormCreate(Sender: TObject); begin FGebruikerSubject.RegisterObserver(FGebruikerSubjectObserver); end; procedure TFormGebruiker.FormDestroy(Sender: TObject); begin FGebruikerSubject.UnregisterObserver(FGebruikerSubjectObserver); end; procedure TFormGebruiker.UpdateGui(Sender: TObject); begin // Update with data from ApplicationContext LabelGebruikersnaam.Caption := self.ApplicationContext.UserContext.GebruikersNaam; end; // Indrukken van button simuleren op panel: http://www.festra.com/wwwboard/messages/1006.html procedure TFormGebruiker.PanelLogInClick(Sender: TObject); begin try FUserAgent.GebruikerAfmelden(self.ApplicationContext.UserContext); finally // Als logout mislukt, gewoon naar inlog scherm gaan. De gebruiker kan dan opnieuw inloggen. self.Navigator.NavigeerNaar(NAVLOGIN); end; end; procedure TFormGebruiker.PanelLogInMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin (Sender as TPanel).BevelOuter := bvLowered; end; procedure TFormGebruiker.PanelLogInMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin (Sender as TPanel).BevelOuter := bvRaised; end; end.