OK, Pierre - Here comes a set of window.Move events that try to reduce amount of redraw activity.
When user moves the window around your window risks being hit with a Move event for every single pixel-move. That's potentially hundreds if not thousands per second. Performance is critical for the code you write.
My first workaround was brute force attack. Draw everything every time. Potentially costly for CPU/GPU. I therefore added two tuned versions. I'm unsure if option C is faster than B at all. Option C may even fail to redraw for "Always Show List". You will need to test your app if you decide to try out option C.
Option A: Brute Force
// event ue_move (EventID: pbm_move) on MDI Frame
SetRedraw(true)
Option B: Draw only DataWindow having focus
GraphicObject returned from GetFocus has no SetRedraw function. Code has to typecast.
GetFocus in many cases return NULL . For performance separate from IsValid.
// event ue_move (EventID: pbm_move) on MDI Frame
graphicObject goFocus
DataWindow dw
goFocus = GetFocus()
if IsNull(goFocus) then return
if not IsValid(goFocus) then return
if TypeOf(goFocus) = DataWindow! then
dw = goFocus
dw.SetRedraw(true)
end if
Option C: Draw only when current column inside DataWindow is DDDW
Describe call returns "?" for non-DDDW column and "!" for invalid syntax.
// event ue_move (EventID: pbm_move) on MDI Frame
graphicObject goFocus
goFocus = GetFocus()
if IsNull(goFocus) then return
if not IsValid(goFocus) then return
if TypeOf(goFocus) = DataWindow! then
DataWindow dw
dw = goFocus
if Pos(dw.Describe(dw.GetColumnName() + ".dddw.Name"), "!?") = 0 then
dw.SetRedraw(true)
end if
end if
I didn't try with setRedraw(), but when the mouse pointer come back over the dddw item, the list suddenly come back to stick on it :-) !