unit UnitUML; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TStorage=class; TController=class ; //базовый класс интерфейса TFormBase = class abstract (TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; //класс интерфейса TBorder = class (TFormBase) public _Controller: ^TController; procedure Connect(_Controller_: pointer); end; //клаcc контроллер TController=class public _Border: ^TBorder; _Storage: ^TStorage; procedure Connect(_Border_: pointer; _Storage_: pointer); procedure Exit; end; //класс хранилище TStorage=class public _Controller: ^TController; procedure Connect(_Controller_: pointer); procedure SaveCoordToFile(x,y: integer); end; var FormBase: TFormBase; Border: TBorder; Controller: TController; Storage: TStorage; implementation {$R *.dfm} // Зададим указатели на другие слои procedure TBorder.Connect(_Controller_: pointer); begin _Controller:=_Controller_; end; // Зададим указатели на другие слои procedure TController.Connect(_Border_: pointer; _Storage_: pointer); begin _Border:=_Border_; _Storage:=_Storage_; end; // Зададим указатели на другие слои procedure TStorage.Connect(_Controller_: pointer); begin _Controller:=_Controller_; end; //Сохраним координаты в файл procedure TStorage.SaveCoordToFile(x,y: integer); var f: TextFile; name,str: string; begin ShowMessage('Storage SaveToFile '+IntToStr(x)+' '+IntToStr(y)); name:='privet.txt'; AssignFile(f,name); ReWrite(f); str:=IntToStr(x)+' '+IntToStr(y); Write(f,str); CloseFile(f); end; //Обработчик кнопки выхода procedure TController.Exit; begin //ShowMessage('Controller Exit'); _Storage.SaveCoordToFile(Border.Left,Border.Top); Border.Close; end; //Вызовем процедуру контроллера выхода procedure TFormBase.Button1Click(Sender: TObject); begin Controller.Exit; ///Close; end; end.