【问题标题】:Button with Icon and Label带有图标和标签的按钮
【发布时间】:2020-03-12 09:30:26
【问题描述】:

您好,我目前正在寻找一种方法来显示带有图标和标签的按钮。

我希望图标在左侧,标签在图标右侧左对齐。

我认为这在 opensge 中是不可能的,但也许有人对此有想法。

我使用的是 abl-frame,按钮需要动态生成

【问题讨论】:

  • 从未做过,但我很确定您可以将 ABL 框架嵌入到 .Net 表单中以将更改降至最低。

标签: openedge progress-4gl


【解决方案1】:

我有一个非常丑陋的解决方案给你:

创建包含按钮整个面的图像。包括图标和文字。也许不是一个漂亮的解决方案,但您不需要使用 .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.

【讨论】:

  • :-) 我们将它用于我们的经典按钮。对于不同语言的不同图像,我们甚至有一个按钮图像生成器,它将获取图像、添加翻译文本、剪切并将其保存到图像文件中......(在 C# 中剪切)
  • @StefanDrissen 这可能有点骇人听闻,但它确实有效! :-)
  • 这就是我们之前使用的方法,不幸的是这种方法不适用于 windows 的高对比度功能。我们的客户之一是色盲,因此我们需要显示用户在 Windows 中配置的颜色。我们也不能创建高对比度的图像,因为我们有一组我必须使用的已定义图标。还是谢谢你。
  • 为什么不能创建一组额外的高对比度图像?检查注册表(或其他)或数据库设置以选择图标集 A 或图标集 B,它与此解决方案的其余部分一样 hacky。
【解决方案2】:

如果您使用的不是完全过时的 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 文件,并且可以从文件系统加载图像等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 2014-08-30
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2016-09-03
    相关资源
    最近更新 更多