如何在Openedge中使现有帧响应,进度4gl

时间:2017-09-25 10:53:10

标签: openedge progress-4gl

我有一个正在开发的旧桌面应用程序4gl。进度窗口中包含一个框架现在我的任务是使框架响应,即根据其容器窗口的大小,框架应该动态调整大小。是它可能在进行任何解决方法将不胜感激。谢谢

2 个答案:

答案 0 :(得分:0)

一旦框架“实现”,你就无法改变它的高度或宽度。

在此之前,您可以通过框架手柄操纵几何体。

要在显示框架后更改内容,您基本上需要构建一个新框架来替换旧框架。

答案 1 :(得分:0)

我假设您不拥有源代码。如果您的窗口没有设置为RESIZE,那么真的没有运气。

否则,我创建了这个简单的程序,它可以操作窗口和它内部的框架。现在请记住:所有字段都必须在框架内手动重新定位。您还可能希望在运行之前将session:suppress-warnings设置为YES,因为每次窗口小部件都不适合框架时,OpenEdge会让您知道它。您可能需要循环框架的字段组中的所有对象,以实现它。并且记得要填充侧标签手柄以移动它们,否则填充本身会移动,但文本会保留。这是一项很多工作。 所以不用多说,代码:

DEFINE VARIABLE hProgram AS HANDLE      NO-UNDO.
DEFINE VARIABLE hWindow AS HANDLE      NO-UNDO.
DEFINE VARIABLE hFrame AS HANDLE      NO-UNDO.
run <ProgramNameGoesHere> persistent set hProgram.
run enable_UI in hProgram.
assign hWindow = hProgram:current-window
       hFrame  = hWindow:first-child.

/* Resize Variables */
DEFINE VARIABLE dWinXC AS DECIMAL     NO-UNDO.
DEFINE VARIABLE dWinYC AS DECIMAL     NO-UNDO.
/* /Resize Variables */

ON WINDOW-RESIZED OF hWindow 
DO:
  /* Defining a minimum size here */
  if hWindow:width-chars  < 74 or 
     hWindow:HEIGHT-CHARS < 22 then return no-apply.

  run piResize.
END.

procedure piResize:
def var dXC    AS DECIMAL NO-UNDO.
def var dYC    AS DECIMAL NO-UNDO.

/**--------------------------------- Screen Size ----------------------------**/
assign dXC                        = dWinXC - hWindow:width-chars
       dYC                        = dWinYC - hWindow:height-chars
       dWinXC                     = hWindow:width-chars
       dWinYC                     = hWindow:HEIGHT-CHARS
/**-------------------------- Objects on Screen -----------------------------**/
       hFrame:width  = hWindow  :WIDTH
       hFrame:height = hWindow  :HEIGHT no-error.
/**-------------------------------- Frame Sizes -----------------------------**/
     ASSIGN hFrame:width  = hWindow:width
            hFrame:height = hWindow:HEIGHT no-error.

end procedure.

wait-for 'close' of hProgram.

现在,我不知道这对你有什么好处,因为你可能不会随意干扰行为。请注意,包含触发器会覆盖之前的任何内容(因为您的窗口没有调整大小,我认为它不会对其造成伤害。但对于已经有事件过程的窗口小部件执行此操作会导致它停止执行操作它目前有(除非你可以编码,但我再也不认为你有代码)。 我为代码不仅仅是Stack Overflow喜欢的天才补丁而道歉,但这是一个复杂的问题。希望它有所帮助。

哦,这是使用Progress 10.2B制作的。我想如果你的代码在v8之前,你可能会运气不好。