【发布时间】:2020-03-12 09:30:26
【问题描述】:
您好,我目前正在寻找一种方法来显示带有图标和标签的按钮。
我希望图标在左侧,标签在图标右侧左对齐。
我认为这在 opensge 中是不可能的,但也许有人对此有想法。
我使用的是 abl-frame,按钮需要动态生成
【问题讨论】:
-
从未做过,但我很确定您可以将 ABL 框架嵌入到 .Net 表单中以将更改降至最低。
标签: openedge progress-4gl
您好,我目前正在寻找一种方法来显示带有图标和标签的按钮。
我希望图标在左侧,标签在图标右侧左对齐。
我认为这在 opensge 中是不可能的,但也许有人对此有想法。
我使用的是 abl-frame,按钮需要动态生成
【问题讨论】:
标签: openedge progress-4gl
我有一个非常丑陋的解决方案给你:
创建包含按钮整个面的图像。包括图标和文字。也许不是一个漂亮的解决方案,但您不需要使用 .Net。
基本上它只会为按钮添加IMAGE-UP 属性。
DEFINE BUTTON BUTTON-3
IMAGE-UP FILE "c:/temp/button.png":U
LABEL "Button 3"
SIZE 48 BY 4.29.
按钮.png:
将该图像添加到您的按钮。
结果:
如果您需要根据对比度设置不同的图片,则需要检查注册表以进行对比度设置。可以这样做:
DEFINE VARIABLE cContrast AS CHARACTER NO-UNDO.
LOAD "Control Panel" BASE-KEY "HKEY_CURRENT_USER".
USE "Control Panel".
GET-KEY-VALUE SECTION "Accessibility\HighContrast" KEY "Flags" VALUE cContrast.
UNLOAD "Control Panel".
IF cContrast = "126" THEN
MESSAGE "Low contrast" VIEW-AS ALERT-BOX.
ELSE IF cContrast = "127" THEN
MESSAGE "High contrast" VIEW-AS ALERT-BOX.
【讨论】:
如果您使用的不是完全过时的 Progress OpenEdge 版本,那么您可以使用 .Net 控件,Progress Developer Studio for OpenEdge (PDSOE) 中的可视化设计器将允许您将以下内容拖放到一起:
这会生成以下源代码(您也可以使用它来生成表单创建):
USING Progress.Lang.*.
USING Progress.Windows.Form.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS button INHERITS Form:
DEFINE PRIVATE VARIABLE button1 AS System.Windows.Forms.Button NO-UNDO.
DEFINE PRIVATE VARIABLE components AS System.ComponentModel.IContainer NO-UNDO.
CONSTRUCTOR PUBLIC button ( ):
SUPER().
InitializeComponent().
THIS-OBJECT:ComponentsCollection:ADD(THIS-OBJECT:components).
CATCH e AS Progress.Lang.Error:
UNDO, THROW e.
END CATCH.
END CONSTRUCTOR.
METHOD PRIVATE VOID InitializeComponent( ):
/* NOTE: The following method is automatically generated.
We strongly suggest that the contents of this method only be modified using the
Visual Designer to avoid any incompatible modifications.
Modifying the contents of this method using a code editor will invalidate any support for this file. */
@VisualDesigner.FormMember (NeedsInitialize="true").
DEFINE VARIABLE resources AS Progress.Util.ResourceManager NO-UNDO.
resources = NEW Progress.Util.ResourceManager("button").
THIS-OBJECT:button1 = NEW System.Windows.Forms.Button().
THIS-OBJECT:SuspendLayout().
/* */
/* button1 */
/* */
THIS-OBJECT:button1:Image = CAST(resources:GetObject("button1.Image"), System.Drawing.Image).
THIS-OBJECT:button1:ImageAlign = System.Drawing.ContentAlignment:MiddleLeft.
THIS-OBJECT:button1:Location = NEW System.Drawing.Point(13, 212).
THIS-OBJECT:button1:Name = "button1".
THIS-OBJECT:button1:Size = NEW System.Drawing.Size(108, 42).
THIS-OBJECT:button1:TabIndex = 0.
THIS-OBJECT:button1:Text = "Exit".
THIS-OBJECT:button1:TextAlign = System.Drawing.ContentAlignment:MiddleRight.
THIS-OBJECT:button1:UseCompatibleTextRendering = TRUE.
THIS-OBJECT:button1:UseVisualStyleBackColor = TRUE.
/* */
/* button */
/* */
THIS-OBJECT:ClientSize = NEW System.Drawing.Size(292, 266).
THIS-OBJECT:Controls:Add(THIS-OBJECT:button1).
THIS-OBJECT:Name = "button".
THIS-OBJECT:Text = "button".
THIS-OBJECT:ResumeLayout(FALSE).
CATCH e AS Progress.Lang.Error:
UNDO, THROW e.
END CATCH.
END METHOD.
DESTRUCTOR PUBLIC button ( ):
END DESTRUCTOR.
END CLASS.
默认情况下,拖放方法还会创建一个 resx 文件,该文件是一个包含所用资源的 xml 文件,图像在其中编码:
<data mimetype="application/x-microsoft.net.object.bytearray.base64" name="button1.Image" type="System.Drawing.Bitmap, System.Drawing">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wgAADsIBFShKgAAAAJFJREFUOE/N0EEOgCAMRFEP4tL738wz1CaDQYa2FmThX5FIH8gmi/otdO4HFtNV
aNSikfproxZtbt4ob/Xb+LEzkHmeAcWW95Uh5O0OjslCIDxFsyHtORMTyIU0DGcULYK0pKK93AjK/I3o
Ip+gsrojuo+hYCC2Gig+E3lchTIKMq0Ceed49fvtx860DKIWQSIXxapUG1GIZgoAAAAASUVORK5CYII=
</value>
使用代码生成表单时,您不需要 resx 文件,并且可以从文件系统加载图像等。
【讨论】: