====== Как сделать изменение высоты окна пропорционально его ширине? ====== MODULE MyDemo5; IMPORT Views, Properties, Ports, HostWindows, Windows, Documents; TYPE View = POINTER TO RECORD (Views.View) END; WinHook = POINTER TO RECORD (HostWindows.Hook) oldHook: HostWindows.Hook; window: HostWindows.Window; END; PROCEDURE (hook: WinHook) Resize (w, h: INTEGER); BEGIN h := w; (* тут задаем правило, сейчас пропорция 1:1 *) hook.window.SetSize(w, h); IF hook.oldHook # NIL THEN hook.oldHook.Resize(w, h) END END Resize; PROCEDURE (hook: WinHook) Activate (on: BOOLEAN); BEGIN IF hook.oldHook # NIL THEN hook.oldHook.Activate(on) END END Activate; PROCEDURE (hook: WinHook) Focus (on: BOOLEAN); BEGIN IF hook.oldHook # NIL THEN hook.oldHook.Focus(on) END END Focus; PROCEDURE (v: View) Restore (f: Views.Frame; l,t,r,b: INTEGER); BEGIN f.DrawOval(l, t, r, b, -1, Ports.red) END Restore; PROCEDURE (v: View) HandlePropMsg (VAR msg: Properties.Message); BEGIN WITH msg: Properties.SizePref DO IF msg.w = Views.undefined THEN msg.w := 40 * Ports.mm; msg.h := msg.w; END | msg: Properties.ResizePref DO msg.horFitToWin := TRUE; msg.verFitToWin := TRUE; ELSE END END HandlePropMsg; PROCEDURE Open*; VAR v: View; hook: WinHook; w: Windows.Window; d: Documents.Document; BEGIN NEW(v); d := Documents.dir.New(v, Views.undefined, Views.undefined); w := Windows.dir.New(); Windows.dir.OpenSubWindow(w, d, {}, "Эмулятор"); NEW(hook); hook.window := w(HostWindows.Window); hook.oldHook := w(HostWindows.Window).hook; w(HostWindows.Window).hook := hook; END Open; END MyDemo5.