Image 将形状/图像添加到Dynamics AX 2009表单的最佳/更简单的方法?

Image 将形状/图像添加到Dynamics AX 2009表单的最佳/更简单的方法?,image,axapta,shapes,x++,dynamics-ax-2009,Image,Axapta,Shapes,X++,Dynamics Ax 2009,我想在表格中添加一些彩色方形,以便显示图例。由于我没有遇到任何在形状中添加颜色的方法,我已经求助于将形状创建为图像,将它们作为资源加载,目前正在尝试将它们加载到表单中……尽管对于简单的单色正方形来说,这似乎是一个冗长的解决方法 首先,有没有办法将给定颜色的基本形状添加到AX形状中?否则,有没有更简单的方法将映像添加到表单中而不必复制CompanyImage(或CompanyInfo)表单 注意:我希望将映像存储在AX中,而不是通过文件路径将映像链接到本地计算机上的映像。您可以将映像作为容器(BL

我想在表格中添加一些彩色方形,以便显示图例。由于我没有遇到任何在形状中添加颜色的方法,我已经求助于将形状创建为图像,将它们作为资源加载,目前正在尝试将它们加载到表单中……尽管对于简单的单色正方形来说,这似乎是一个冗长的解决方法

首先,有没有办法将给定颜色的基本形状添加到AX形状中?否则,有没有更简单的方法将映像添加到表单中而不必复制CompanyImage(或CompanyInfo)表单


注意:我希望将映像存储在AX中,而不是通过文件路径将映像链接到本地计算机上的映像。

您可以将映像作为容器(BLOB)存储在数据库中,并在窗体或报表上显示:


您可以将图像作为容器(BLOB)存储在数据库中,并将其显示在表单或报表中:


您可以使用绘制简单形状。 以下是一个简单的示例:

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的内容被重画时,您的形状也会被重画。
您还可以使用
setTimeout
强制以(短的)固定时间间隔重新绘制形状,就像俄罗斯方块教程所做的那样(查看
cycle
方法),但对于静态内容来说,这可能会有点过头

你现在应该有这个


您可以使用绘制简单形状。 以下是一个简单的示例:

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的内容被重画时,您的形状也会被重画。
您还可以使用
setTimeout
强制以(短的)固定时间间隔重新绘制形状,就像俄罗斯方块教程所做的那样(查看
cycle
方法),但对于静态内容来说,这可能会有点过头

你现在应该有这个


这可能是一个简单的解决方法,但这就是我所做的一项更改。因为您想将其用于图例,所以只需添加一个按钮并将属性设置为平面,然后为其指定颜色和文本。作为一个传奇,这应该足够好了。

这可能是一个简单的解决办法,但这就是我为其中一个更改所做的。因为您想将其用于图例,所以只需添加一个按钮并将属性设置为平面,然后为其指定颜色和文本。作为一个图例,这应该足够好。

这取决于您要添加的形状,但对于简单的形状,您可以使用。你可以以表单中的俄罗斯方块教程为例,给了WinGDI类一次机会,但由于某种原因,矩形没有出现。我尝试锁定和解锁我添加到的窗口控件(根据俄罗斯方块的例子),但没有成功。最后,我求助于创建图片框,并适当设置它们的背景颜色和大小。不幸的是,除了俄罗斯方块教程之外,Axapta似乎没有太多的WinGDI“教程”。感谢所有相同的@PierreIt,这取决于您想要添加的形状,但对于简单的形状,您可以使用。你可以以表单中的俄罗斯方块教程为例,给了WinGDI类一次机会,但由于某种原因,矩形没有出现。我尝试锁定和解锁我添加到的窗口控件(根据俄罗斯方块的例子),但没有成功。最后,我求助于创建图片框,并适当设置它们的背景颜色和大小。不幸的是,除了俄罗斯方块教程之外,Axapta似乎没有太多的WinGDI“教程”。还是谢谢你,皮埃尔