我在DM对话框中广泛使用了图形元素,主要用于视觉反馈。尽管我已经在GMS1和GMS2中成功使用了它们,但是我还没有使它们在GMS3中正确运行。我想知道我是否部署不正确。下面的示例脚本说明了我的两个主要问题,即图形元素的大小与其关联的位图之间的不匹配,以及位图值为240或RGB(240,240,240)的奇怪的对比度映射(黑色):
class ModelessDialogWithGraphic : UIFrame
{
Object Init(Object self)
{
TagGroup dialogSpec = DLGCreateDialog("");
TagGroup dialogItems = dialogSpec.DLGGetItems();
Number graphicW = 256;
Number graphicH = graphicW / 4;
Image graphicImage := RealImage("Graphic Image", 4, graphicW, graphicH);
graphicImage = icol;
// Add labeled box with graphic
TagGroup boxSpec = DLGCreateBox("Graphic");
TagGroup boxItems = boxSpec.DLGGetItems();
TagGroup graphicSpec = DLGCreateGraphic(graphicW, graphicH);
graphicSpec.DLGAddBitMap(graphicImage);
boxItems.DLGAddElement(graphicSpec);
dialogItems.DLGAddElement(boxSpec);
return self.super.Init(dialogSpec);
}
}
void main()
{
Object dialog = Alloc(ModelessDialogWithGraphic).Init();
dialog.Display("Dialog Graphic Test");
}
main();
至少在GMS 3.4中,位图似乎仅填充指定图形区域的左上四分之一。但是,此问题很复杂,因为我观察到的行为似乎随着Windows显示缩放选项和特定版本的Windows而改变。目前,借助GMS 3.4和最新的Win10更新,我发现以下更改的Init方法提供了可服务的(尽管很丑)的解决方法:
Object Init(Object self)
{
TagGroup dialogSpec = DLGCreateDialog("");
TagGroup dialogItems = dialogSpec.DLGGetItems();
Number graphicW = 256;
Number graphicH = graphicW / 4;
Image graphicImage := RealImage("Graphic Image", 4, graphicW, graphicH);
graphicImage = icol;
graphicImage = (graphicImage == 240) ? 241 : graphicImage
// Add labeled box with graphic
Number scaler = 0.5;
TagGroup boxSpec = DLGCreateBox("Graphic");
TagGroup boxItems = boxSpec.DLGGetItems();
TagGroup graphicSpec = DLGCreateGraphic(scaler * graphicW, scaler * graphicH);
graphicSpec.DLGAddBitMap(graphicImage);
boxItems.DLGAddElement(graphicSpec);
dialogItems.DLGAddElement(boxSpec);
return self.super.Init(dialogSpec);
}
但是,我担心这些解决方法可能会在将来的GMS版本中中断。有没有人找到更好或更正确的方法来在GMS3中部署对话框图形?
Windows10 dpi对应用程序的缩放比例的确确实引起了许多错误绘制的UI问题。其中一些要求更改dpi后重新启动应用程序,但其中一些是“永久性的”。
我认为您提到的两个问题是错误,应该在Gatan software issue reporting网站上报告。
您的静态“缩放”解决方案确实太脆弱了,因为需要为不同的显示dpi设置确定缩放的确切值。我目前尚不清楚脚本命令,该命令可能会在此阶段为您提供此信息。
关于将颜色替换为透明的颜色:如果我不得不猜测,那么一直都是这样,但是确切的颜色代表了GMS 2中的背景色,而不再是GMS 3中的背景色。也是GMS 3版本的监督/错误,应报告。