2013-04-25 3 views
1

Я хотел бы добавить несколько цветных квадратных фигур в форму, чтобы отобразить легенду. Поскольку я не сталкивался с каким-либо способом добавления цветных фигур, я прибегал к созданию фигур как изображений, загрузке их в качестве ресурсов и в настоящее время пытаюсь загрузить их в форму ... хотя это кажется длинным обходной путь для простого одноцветного квадрата.Лучший/простой способ добавить форму/изображение в форму Dynamics AX 2009?

Прежде всего, есть ли способ добавить основную форму заданного цвета в форму AX? В противном случае, есть ли более простой способ добавления изображения в форму без повторной копии формы CompanyImage (или CompanyInfo)?

ПРИМЕЧАНИЕ. Я хочу, чтобы изображение было сохранено в пределах AX и не имело изображения, связанного путем файла с изображением на локальном компьютере.

+1

Это зависит от формы, которую вы хотите добавить, но для простых вы можете использовать [класс WinGdi] (http://msdn.microsoft.com/en-us/library/aa869106%28v=ax.50%29 .aspx). Вы можете посмотреть учебник тетриса в формах для примера. – Pierre

+0

Выиграл класс WinGDI, но по какой-то причине прямоугольники не появлялись. Я попытался заблокировать и разблокировать управление окном, которое я добавлял (согласно примеру тетриса), но безрезультатно. В итоге я прибегал к созданию ящиков для изображений и соответствующим образом задавал их цвет фона и размер. К сожалению, кроме учебника по тетрису, для Axapta, похоже, не слишком много обучающих программ WinGDI. Спасибо всем тем же @Pierre – GroomedGorilla

ответ

2

Вы можете рисовать простые фигуры с WinGDI Class. Вот простой пример:

void drawShapes() 
{ 
    WinGDI winGDI; 
    Int brush, height, width; 
    ; 

    //myWindow being the FormWindowControl 
    height = myWindow.heightValue()/2; 
    width = myWindow.widthValue()/2; 

    myWindow.lockDC(); 

    winGDI = new WinGDI(myWindow.hDC()); 

    brush = winGdi.createSolidBrush(WinAPI::RGB2int(0, 0, 255)); 
    winGDI.fillRect(0, 0, width, height, brush); 
    winGDI.deleteObject(brush); 

    winGDI.ellipse(0, 0, width, height); 

    brush = winGdi.createSolidBrush(WinAPI::RGB2int(255, 0, 0)); 
    winGDI.fillRect(width, height, 2*width, 2*height, brush); 
    winGDI.deleteObject(brush); 

    myWindow.UnlockDC(); 
} 

Я предполагаю, что вы получили что-то подобное.

Теперь, если вы просто назовете его один раз в форме init формы, чертеж будет удален, как только вызывается метод управления окном paint (и он называется довольно часто).

Таким образом, самый простой способ - вызвать его в методе paint окна. Таким образом, каждый раз, когда содержимое myWindow перерисовывается, ваши формы тоже.
Вы также можете принудительно выполнить перерисовку фигур на (коротком) регулярном временном интервале, например, в учебнике Tetris (см. Метод cycle) с использованием setTimeout, но это может быть излишним для статического содержимого.

Теперь вы должны иметь этот

Output

1

Вы можете хранить изображения в качестве контейнеров (BLOB) на базе данных и показать их на форму или отчет:

How to: Add an Image to a Form

0

Это может быть простой обходной путь, но это то, что я сделал для одного из моих изменений. Поскольку вы хотели использовать его для легенды, вы можете просто добавить кнопку и установить свойство как плоское, дать ему цвет и текст. Это должно быть достаточно хорошо, как легенда.