Александр К писал(а):
Там даже реализована возможность изменять размеры внедрённого отображения через innerView.context.SetSize (w, h). Кстати, когда я сам пробовал реализовать это, то в контексте реализовывал метод:
Код:
PROCEDURE (obj: Context) SetSize (w, h: INTEGER);
BEGIN
Properties.PreferredSize (obj.innerView, 50 * Ports.point, 60 * Ports.point, 100 * Ports.point, 200 * Ports.point, 55 * Ports.point, 150 * Ports.point, w, h);
Правда никакого эффекта не получил.
Тут немного иначе, контекст как разу нужен, чтобы вы из родительского вида указать размеры.
Типовая реализация такая:
Код:
PROCEDURE (c: Context) SetSize (w, h: INTEGER);
BEGIN c.w := w; c.h := h
END SetSize;
И потом из Restore уже перед установкой встроенных видов, передать их контекстам требуемые размеры.
Вот кусочек реального кода, который рисует у меня кнопки на панели инструментов:
Код:
PROCEDURE (v: PanelView) Restore* (f: Views.Frame; l_, t_, r_, b_: INTEGER);
VAR w, h, last: INTEGER; button: PanelButton; asc, dsc, fw: INTEGER;
BEGIN
v.context.GetSize(w, h);
f.DrawRect(0, 0, w, panelHeightPx * Ports.point, - 1, param.backgroundColor);
button := v.root;
WHILE button # NIL DO
button.context.SetSize(button.w * Ports.point, button.h * Ports.point);
Views.InstallFrame(f, button, button.x * Ports.point, button.y * Ports.point, 0, TRUE);
last := button.x * Ports.point + button.w * Ports.point;
button := button.next;
END;
fontStatus.GetBounds(asc, dsc, fw);
f.DrawString(last + 200 * Ports.point, h DIV 2 + (asc - dsc) DIV 2, param.statusColor, status, fontStatus)
END Restore;