unit GevondenProductenScherm; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Data.DB, Data.Win.ADODB, ObserverPattern, Util, Subscherm, UserAgent, Main, ApplicationContext, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.DBCGrids; const GridColNamen: array [1 .. 6] of System.string = ('ProductNr', 'Tekst', 'Kol1', 'Kol2', 'Kol3', 'Kol4'); type TFormGevondenProducten = class(TFormSubscherm) ListViewProducten: TListView; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ListViewProductenSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); private FProductSubject: TSubject; FSubjectObserver: TSubjectObserver; procedure UpdateGui(Sender: TObject); public Constructor Create(AOwner: TComponent; Navigator: TFormMain; ApplicationContext: TApplicationContext; ProductSubject: TSubject); end; implementation {$R *.dfm} uses SelectService; constructor TFormGevondenProducten.Create(AOwner: TComponent; Navigator: TFormMain; ApplicationContext: TApplicationContext; ProductSubject: TSubject); begin inherited Create(AOwner, Navigator, ApplicationContext); self.FProductSubject := ProductSubject; self.FSubjectObserver := TSubjectObserver.Create(self); self.FSubjectObserver.OnChange := UpdateGui; end; procedure TFormGevondenProducten.FormCreate(Sender: TObject); var ColNaam: string; begin FProductSubject.RegisterObserver(FSubjectObserver); for ColNaam in GridColNamen do begin with ListViewProducten.Columns.Add do begin Caption := ColNaam; Alignment := taLeftJustify; Width := -1; end; end; end; procedure TFormGevondenProducten.FormDestroy(Sender: TObject); begin FProductSubject.UnregisterObserver(FSubjectObserver); end; procedure TFormGevondenProducten.ListViewProductenSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); begin ApplicationContext.ProductDetailContext.GeselecteerdProduct := Item.Data; end; procedure TFormGevondenProducten.UpdateGui(Sender: TObject); var Product: TProductInformatie; NieuwItem: TListItem; begin // Update with data from ApplicationContext for Product in ApplicationContext.ProductsContext.Producten do begin With ListViewProducten.Items.Add Do begin Caption := IntToStr(Product.ProductNr); // Deze casting geeft geen access violation SubItems.Add(Product.Tekst); SubItems.Add(Product.Kol1); SubItems.Add(Product.Kol2); SubItems.Add(Product.Kol3); SubItems.Add(Product.Kol4); Data := Product; end; end; end; end.