Инструменты пользователя

Инструменты сайта


blackbox:windowhook

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

blackbox:windowhook [2018/11/30 01:13] (текущий)
Строка 1: Строка 1:
 +====== Как сделать изменение высоты окна пропорционально его ширине?​ ======
  
 +
 +<​code>​
 +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.
 +</​code>​
blackbox/windowhook.txt · Последние изменения: 2018/11/30 01:13 (внешнее изменение)