добавь свойство-событие, сделай TViewer.Camera свойством и в обработчике write выполняй вызов события... Примерно так:| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type PCamera=^TCamera; TCamera=class x,y:integer; end;
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private { Private declarations } procedure OnAssignCameraToView(cam:PCamera); public { Public declarations } end;
type
TCameraAssignNotify = procedure (cam:PCamera) of Object;
TViewer=class a,b:integer; FCamera:PCamera; FOnAssignCamera: TCameraAssignNotify; procedure initialize; private procedure SetCamera(const Value: PCamera); procedure SetAssignCamera(const Value: TCameraAssignNotify); public property Camera : PCamera read FCamera write SetCamera; property OnAssignCamera : TCameraAssignNotify read FOnAssignCamera write SetAssignCamera; end;
var view:TViewer; cam:TCamera;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin cam:=TCamera.Create; View:=TViewer.Create; View.OnAssignCamera:=OnAssignCameraToView; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin View.Free; cam.Free; end;
{ TViewer }
procedure TViewer.initialize; begin ShowMessage('Initialize'); end;
procedure TViewer.SetAssignCamera(const Value: TCameraAssignNotify); begin FOnAssignCamera := Value; end;
procedure TViewer.SetCamera(const Value: PCamera); begin if FCamera<>Value then begin FCamera := Value; // Вариант 1 if Assigned(FOnAssignCamera) then FOnAssignCamera(Value); // Вариант 2 - Можно вызвать напрямую // initialize; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin View.Camera:=@cam; end;
procedure TForm1.OnAssignCameraToView(cam: PCamera); begin View.initialize; end;
end. |
|