11.01.2007, 12:44 | #1 |
Участник
|
Как программно передвинуть контрол?
Здравствуйте.
Меняю стандартную форму DocuView, нужно в init программно изменить нижнюю часть формы, а именно добавить туда Tab с несколькими закладками. Это я делаю без проблем. Но нужно на одну из этих вкладок перенести контрол HtmlView - не подскажите как это сделать? |
|
11.01.2007, 13:46 | #2 |
Участник
|
X++: public void init() { FormTabControl tab; FormTabPageControl tabPage; FormActiveXControl html; ; super(); tab = this.design().addControl(FormControlType::Tab, "Tab"); tab.widthMode(1); tab.heightMode(1); tabPage = tab.addControl(FormControlType::TabPage, "Page1"); tabPage.widthMode(1); tabPage.heightMode(1); tabPage.caption("HTML View"); html = tabPage.addControl(FormControlType::ActiveX, "HTMLView"); html.widthMode(1); html.heightMode(1); html.className("Shell.Explorer"); html.Navigate("c:\\Temp\\Книга1.htm"); tabPage = tab.addControl(FormControlType::TabPage, "Page1"); tabPage.widthMode(1); tabPage.heightMode(1); tabPage.caption("Просто Tab Page"); }
__________________
Axapta v.3.0 sp5 kr2 |
|
11.01.2007, 13:55 | #3 |
Участник
|
Там на форме DocuView уже есть контрол HTMLView. Я хочу именно передвинуть его т.к. на нем определены методы и он в том месте где он находиться в стандарте мне не нужен.
А этот код: Цитата:
html = tabPage.addControl(FormControlType::ActiveX, "HTMLView");
|
|
11.01.2007, 14:08 | #4 |
Участник
|
Можно.
Но для этого вам нужно отключить авторазмещение элементов на форме. Что сразу же выключит функциональность, связанную morphX (роли, безопасность, лицензии, доработки). Если вы так сделаете, вас буду проклинать все последующие программисты, которые будут работать с вашей формой. Как отключить авторазмещение см. форму tutorial_Form_freeform Про безопасность см. http://axapta.mazzy.ru/screenshots/common/example.html |
|
11.01.2007, 14:13 | #5 |
Участник
|
Т.е. то что так просто делается drag&drop'ом при создании формы так трудно реализовать программно?
Цитата:
Но для этого вам нужно отключить авторазмещение элементов на форме.
|
|
11.01.2007, 14:14 | #6 |
Участник
|
А moveControl что делает? Название уж больно подходящее но не перемещает...
Может еще можно как-то изменить containerId? |
|
11.01.2007, 14:26 | #7 |
Участник
|
Цитата:
Цитата:
Вы либо выключите авторазмещение и получите возможность управления положением (но вам нужно будет управлять положением всегда). Либо включите авторазмещение, но тогда теряете возможность управления положением. |
|
11.01.2007, 14:33 | #8 |
Участник
|
mazzy помоему Вы не совсем поняли мою задачу
Вот когда аторазмещение включено я же все равно могу в среде разработки взять и передвинуть контролы(в дереве design формы) - поменять их порядок или перетащить stringedit из одной группы в другую например... Т.е. мне не нужно задавать произвольное положение по координатам (как в Делфи например) мне фактически нужно сменить порядок в дереве. З.Ы. Мою задачу я уже решил иначе, без перемещений. Но вопрос открыт - для развития |
|
11.01.2007, 14:44 | #9 |
Участник
|
Не можете.
|
|
11.01.2007, 14:52 | #10 |
Участник
|
Мы наверное все же о разных вещах говорим
Я только что передвинул и все работает. |
|
11.01.2007, 15:01 | #11 |
Участник
|
Цитата:
Посмотрите работает ли авторазмещения для вашего передвинутого Для того, чтобы передвинуть контрол, у свойства Top и Left надо выключить Auto и поставить любое число. Выключение auto эквивалентно отключению авторазмещенния. Для того, чтобы вручную изменять размер, у свойства Width и Heght надо выключить Auto и поставить любое число. Выключение auto в этих свойствах эквиваленто отключению функции автоматического подбора размера контрола. Еще раз: drag&drop выключает авторазмещение. |
|
11.01.2007, 15:24 | #12 |
Участник
|
Цитата:
Что ж, скройте другие контролы.
Посмотрите работает ли авторазмещения для вашего передвинутого Последний раз редактировалось madm; 11.01.2007 в 15:35. |
|
11.01.2007, 15:27 | #13 |
Участник
|
Цитата:
2 madm: Нет, после открытия формы вы не можете менять что-либо в дизайне этой формы. Дальше см. ответ mazzy |
|
11.01.2007, 15:36 | #14 |
Участник
|
|
|
11.01.2007, 15:40 | #15 |
Участник
|
Посыпаю голову пеплом!!!
Спасибо, я действительно не правильно понял... Переместить в дереве... Ужас какой-то... Перемещать программно в открытых формах можно не в дереве AOT, а в пользовательских настройках. См. Правую кнопку мыши, Настройка. Но опять же для некоторых контролов и такое перемещение может быть запрещено в свойствах контрола. |
|
17.01.2007, 13:10 | #16 |
Developer
|
Цитата:
Код: void init() { ... // test --> FormTabControl newFormTabControl; FormTabPageControl newFormTabPageControl; // test <-- ... super(); ... // test --> // Overview и HtmlView - контролы формы с AutoDeclaration = Yes, т.е. можно ссылатся на них в коде. Иначе использовать element.design().controlName(ControlName) или element.design().control(control::ControlName) newFormTabControl = Overview.addControl(FormControlType::Tab, "NewTab"); newFormTabControl.heightMode(FormHeight::ColumnHeight); newFormTabControl.widthMode(FormWidth::ColumnWidth); newFormTabPageControl = newFormTabControl.addControl(FormControlType::TabPage, "NewTabPage"); newFormTabPageControl.caption("NewTabPage"); newFormTabPageControl.moveControl(HtmlView.id()); // test <-- } P.S. Делал подобное и после Run(). Кроме изменения размеров и перерисовки формы ничего побочного не выскакивало (тут уж от специфичности кода в ините и ран формы все зависит) |
|
|
За это сообщение автора поблагодарили: mazzy (5), DTD (1), madm (1), SergeyAY (0). |
18.01.2007, 19:32 | #17 |
Участник
|
Да Валентин именно это я и хотел получить. Странно но я писал подобный код и у меня он не работал... Попробую Ваш как-нибудь. Спасибо!
|
|