Код:
MODULE TestCont;
IMPORT log := StdLog, Containers, TextControllers, FormControllers;
PROCEDURE show*;
VAR c: Containers.Controller;
BEGIN
c := Containers.Focus();
WITH
| c : TextControllers.Controller DO log.String('text controller');
| c : FormControllers.Controller DO log.String('form controller');
ELSE log.String('unknown controller');
END;
log.Ln;
END show;
END TestCont.
(!) "StdCmds.OpenToolDialog('Test/Rsrc/Form.odc', 'test')"
(!) "StdCmds.OpenAuxDialog('Test/Rsrc/Form.odc', 'test')"
Создаю форму, размещаю на ней скопированный из буфера обмена новый текстовой документ, и создаю кнопку "Show" со ссылкой на "TestCont.show". Если форма открывается как OpenToolDialog, то при нажатии на кнопку на форме в лог пишется - "text controller". Форма, открытая с помощью OpenAuxDialog - в логе - "form controller". Стал искать в чем разница.
OpenAuxDialog вызывает процедуру StdDialog.Open(v, title, NIL, "", NIL, FALSE, TRUE, TRUE, FALSE, TRUE).
OpenToolWindow вызывает процедуру StdDialog.Open(v, title, NIL, "", NIL, TRUE, FALSE, TRUE, FALSE, TRUE)
Процедура StdDialog.Open выглядит так:
Код:
PROCEDURE Open* (v: Views.View; title: ARRAY OF CHAR;
loc: Files.Locator; name: Files.Name; conv: Converters.Converter;
asTool, asAux, noResize, allowDuplicates, neverDirty: BOOLEAN);
Этот вызов ведёт к вызову Windows.dir.Open(..., flags, ...), а дальше Views.SetRoot(..., flags, ...). В помощи к Views
Код:
flags-: SET
Флаги, специфичные для окна. Зарезервировано для будущего использования.
Как влияют флаги asTool и asAux, я так и не понял и не нашел. Может, сталкивался кто-нибудь и знает, почему так происходит?