28.08.2018, 12:34 | #1 |
Участник
|
Программно добавить картинку
Добрый день.
Пытаюсь программно добавить контрол на форму, вызываю следующий код после super в init на форме: X++: FormWindowControl ctrlImage; ; ctrlImage = groupImageList.addControl(FormControlType::Image, 'Image'); ctrlImage.dataSource(ItemImage_ds.id()); ctrlImage.dataField(fieldNum(ItemImage, Image)); ctrlImage.widthMode(FormWidth::ColumnWidth); ctrlImage.heightMode(FormHeight::ColumnHeight); Если контрол добавить через AOT и выставить dataSource и dataField, то картинка отрисовывается корректно. Если программно создать форму с этим контролом, то картинка отображается. Вопрос: Что нужно еще сделать, чтобы на форме начала отображаться картинка? если мы контрол добавляем программно. AXAPTA 2009 |
|
28.08.2018, 15:06 | #2 |
Участник
|
Заведите десяток invisible контролов. Когда надо можно сделать visible, поменять прочие свойства. Порядок следования тоже можно менять вызовом move()
Изврат, но чего не сделаешь. |
|
28.08.2018, 20:38 | #3 |
Участник
|
Не проверял. Предположение. Разные команды обновления не пробовали? Ну, на вскидку
ctrlImage.visible(true); ItemImage_ds.reread(); ItemImage_ds.refresh(); element.redraw(); Возможно, поможет еще сделать саму форму невидимой, добавить объект, затем отобразить форму
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
29.08.2018, 08:44 | #4 |
Участник
|
Я бы сначала попробовал заполучить картинку в объект image = new Image(), а потом передать его контролу: ctrlImage.image(image).
Ну и поигрался с методами colorScheme и backgroundColor. Еще смущают методы widthMode и heightMode, попробуйте выставить изначально конкретные размеры widthValue(32), heightValue(32). |
|
29.08.2018, 09:54 | #5 |
Участник
|
Если я правильно понял автора - там проблема воспроизводится именно в связке с датасорсом.
|
|
|
За это сообщение автора поблагодарили: demianimp (3). |
29.08.2018, 10:15 | #6 |
NavAx
|
Ткну пальцем в небо: когда програмно добавлено, то размер контрола 0 на 0.
|
|
29.08.2018, 10:42 | #7 |
Участник
|
Прикладываю картинку, чтобы было понятно что происходит.
Верхняя часть добавляется программно, нижнею часть добавил через AOT. |
|
29.08.2018, 10:47 | #8 |
Участник
|
Можете проект выложить?
__________________
Ivanhoe as is.. |
|
29.08.2018, 11:41 | #9 |
Участник
|
Выкладываю форму.
\Forms\FormItemImageTest\Data Sources\ItemImage - нужно указать таблицу, где есть картинка; \Forms\FormItemImageTest\Designs\Design\Window:AotImage - указать поле с картинкой; \Forms\FormItemImageTest\Methods\init - указать таблицу и поле, где находится картинка. |
|
29.08.2018, 11:42 | #10 |
Участник
|
Цитата:
|
|
29.08.2018, 13:28 | #11 |
Участник
|
Проверил вашу форму в ax2012 r3, у меня работает ваш код(и для типа поля контейнер и для типа поле числовой), т.е. картинка отображается, а у вас точно не отображается? Просто судя по скрину размер контрола, который видно в гриде существенно меньше самого рисунка, не может быть так что там есть отображение но только левый крайний угол картинки, при запуске формы вот так у меня(см. скриншот).
Но если например сделать вот так X++: ctrlImage.width(200); ctrlImage.height(200); X++: ctrlImage.image().resize(32,32, InterpolationMode::InterpolationModeBicubic);
__________________
Sergey Nefedov |
|
29.08.2018, 14:25 | #12 |
Участник
|
Цитата:
Сообщение от SRF
Проверил вашу форму в ax2012 r3, у меня работает ваш код(и для типа поля контейнер и для типа поле числовой), т.е. картинка отображается, а у вас точно не отображается? Просто судя по скрину размер контрола, который видно в гриде существенно меньше самого рисунка, не может быть так что там есть отображение но только левый крайний угол картинки, при запуске формы вот так у меня(см. скриншот).
Но если например сделать вот так X++: ctrlImage.width(200); ctrlImage.height(200); X++: ctrlImage.image().resize(32,32, InterpolationMode::InterpolationModeBicubic); |
|
29.08.2018, 16:38 | #13 |
Участник
|
Если вместо
X++: ctrlImage.dataSource(ItemImage_ds.id());
ctrlImage.dataField(fieldNum(ItemImage, Image)); X++: ctrlImage.imageResource(412); |
|
29.08.2018, 17:26 | #14 |
Участник
|
нашли решение
Нужно было делать через X++: groupImageList.addDataField(ItemImage_ds.id(), fieldNum(ItemImage, Image)); |
|
|
За это сообщение автора поблагодарили: Logger (3), Raven Melancholic (5). |