I didn't implement full Model-GUI-Mediator approach, but built a stripped down version like following.
unit fcontrollink;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
TMyClass = class
public
Field1: string;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit1EditingDone(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FMyClass : TMyClass;
function getF1: string;
procedure setF1(s: string);
procedure setMyClass(mc: TMyClass);
public
property MyClass: TMyClass read FMyClass write setMyClass;
property F1: string read getF1 write setF1;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.Button1Click(Sender: TObject);
var
anmc : TMyClass;
begin
anmc := TMyClass.Create;
anmc.Field1 := 'string field 1';
MyClass := anmc;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if MyClass <> nil then ShowMessage('Field1 is :' + MyClass.Field1) ;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Randomize;
F1 := IntToStr(Trunc(Random(1000000)));
end;
procedure TForm1.Edit1EditingDone(Sender: TObject);
begin
F1 := trim(Edit1.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyClass := nil;
end;
function TForm1.getF1: string;
begin
if FMyClass <> nil then Result := FMyClass.Field1 else Result := '';
end;
procedure TForm1.setF1(s: string);
begin
if MyClass <> nil then MyClass.Field1:= s;
Edit1.Text := s;
end;
procedure TForm1.setMyClass(mc: TMyClass);
begin
if mc <> nil then begin
FMyClass := mc;
Edit1.Enabled := True;
Edit1.Text := FMyClass.Field1;
end
else Edit1.Enabled := False;
end;
end.
This mimicks the behavior of Model-GUI-Mediator just using "setting" properties.
When Button1 is clicked, a new object is assigned to TForm.FMyClass, and controls are filled.
When editing is done at the controls then the content of field is changed.
Button2 is to show the content of field content.
Button3 is for case of assigning values programmatically.
Well, this is probably the most BASIC of OOP. Anyway welcome any comments.