After I posted I kept thinking about how to code a Clone Procedure. I use CHOOSE() to store a List of PROPs to copy so it is easy to add one because thinking of 1 seems to makes me think of 2 more.
ComboClone PROCEDURE(LONG CloneFEQ,LONG NewX, LONG NewY, <*QUEUE FromQueue>)!,LONG,PROC
NewFEQ LONG,AUTO
X USHORT,AUTO
PropX LONG,AUTO
CODE
NewFEQ=CREATE(0,CREATE:dropcombo)
IF ~NewFEQ THEN RETURN 0.
SETPOSITION(NewFEQ,NewX,NewY)
IF ~OMITTED(FromQueue) THEN
NewFEQ{PROP:From}=FromQueue !From(queue)
ELSE
NewFEQ{PROP:From}=CloneFEQ{PROP:From} !From('Mr|Ms|Mrs')
END
LOOP X=1 TO 99 !Below PROPs to Clone from Original
PropX=CHOOSE(X,PROP:Drop,PROP:DropWidth,PROP:AlwaysDrop, PROP:Text,PROP:Format, |
PROP:Width,PROP:Height, PROP:Disable,PROP:Skip, |
PROP:Hide) !<-- Hide Must be Last
NewFEQ{PropX}=CloneFEQ{PropX}
WHILE PropX <> PROP:Hide !<-- Hide Must be Last
RETURN NewFEQ
Here’s the top of the program:
PROGRAM !Example - Revenge of the Clones
INCLUDE('KEYCODES.CLW')
INCLUDE('CbWndPreview.INC'),ONCE !Get from https://github.com/CarlTBarnes/WindowPreview
MAP
ComboTest PROCEDURE()
ComboClone PROCEDURE(LONG ClonedComboFEQ ,LONG NewX, LONG NewY, <*QUEUE FromQueue>),LONG,PROC
END
CODE
ComboTest()
ComboTest PROCEDURE()
qCombo QUEUE
sText CSTRING(256)
END
Window WINDOW('Combo CLONE Test WndPreview '),AT(,,395,224),CENTER,GRAY,AUTO,SYSTEM,FONT('Microsoft Sans Serif',8)
COMBO(@s20),AT(60,60,140,12),USE(?COMBO1),DROP(5),FROM(qCombo),FORMAT('150L(2)|[email protected]@')
STRING('ORIGINAL'),AT(10,60)
STRING('CLONE()'),AT(10,80)
STRING('CREATE()'),AT(10,100)
PROMPT('Cloned COMBO behaves oddly.<13,10>After pick from drop cannot Left/Right arrow entry.<13,10>DSrop with Mouse does not contra' & |
'ct on pick'),AT(10,145,370,40),USE(?PROMPT1)
BUTTON('Cl&ose'),AT(333,201,42,14),USE(?CancelButton),STD(STD:Close),SKIP
END
lCombo signed
lClone signed
lCreate signed
CbWndPrv CBWndPreviewClass
CODE
loop i# = 1 to 10
qCombo.sText = 'This is item #' & i# ; ADD(qCombo)
end
open(window)
lCombo = ?COMBO1
lClone = clone(0, ?COMBO1)
setPosition(lClone, 60, 80) ! ; lClone{PROP:Imm} = FALSE
lCreate=ComboClone(?COMBO1,60,100,qCombo)
CbWndPrv.Init(2)
ACCEPT
END
CLOSE(Window)