`
Par2: Snappier window repaints 1999-06-12 -- Jerry Norman 1. My overall approach is to hide a window during the time that Clarion is painting it, then unhide it so that it appears to "snap" onto the window. I learned it is necessary to hide (or close) the last child window after opening a new child window. Otherwise, the underlying window can be seen during resize activity and when you close your application, and it needs to be closed anyway before it can be reselected. This is because when Clarion opens a new window it doesn't go straight to the maximized state - it first paints in a normal size and then expands to the maximized state. BTW, for this application I am limiting my child windows to a single thread each. 2. To accomplish the hiding on initial load I put Self{PROP:Hide} = True in the ThisWindow.Init embed directly after Open the window. Note this does not work for an existing window that you are reselecting. I take care of that in 4 below. 3. Then, in ThisWindow.TakeSelected embed I put POST(Event:GainFocus,,,) after the parent call. 4. In the WindowEvents GainFocus embed (priority 5000) I put the following: Self{PROP:Maximize} = True IF glo:Thread:BrwNte SETTARGET(,glo:Thread:BrwNte) TARGET{PROP:Hide} = True END IF glo:Thread:BrwBus SETTARGET(,glo:Thread:BrwBus) TARGET{PROP:Hide} = True END SETTARGET(,glo:Thread:BrwPrj) Elsewhere, when I open a child window I assign the thread() to the appropriate glo:Thread variable, or if it is already open I post a GainFocus event to the thread. The above code hides whichever window is being overlaid by this newly selected window. I orginally thought I could just hide a window when it lost focus but this creates interesting results when the user selects another window outside your application Printed November 21, 2024, 10:33 am This article has been viewed/printed 35207 times. |