Die folgende Routine ist seit faceVALUE Version 3.1 automatisch verfügbar, wenn Userwindows benutzt werden. Mit ihr läßt sich ermitteln, in welcher (Außen-)Größe (w&,h&) ein Fenster geöffnet werden muß, um eine bestimmte Innengröße zu erzielen (ww&,wh&). Dazu muß, wie bei win_open(), zusätzlich übergeben werden, von welchem Typ das Fenster ist (kind%), ob ein Baum darin angezeigt werden soll (tree&) und ob das Fenster ikonifiziert werden kann (icon&).
'
PROCEDURE win_calc_wh(kind%,tree&,icon&,ww&,wh&,VAR w&,h&) !call
LOCAL kind&,tree%,usrtype&,off_x&,off_y&,x&,y&
IF icon&=-1
LET kind%=BCLR(kind%,30)
ENDIF
LET kind%=BCLR(kind%,13)
LET kind%=BCLR(kind%,14)
LET kind&=WORD{V:kind%}
LET off_x&=0
LET off_y&=0
LET usrtype&=WORD{V:kind%+2}
IF BTST(usrtype&,0)
LET tree%=@xrsrc_gaddr(0,tree&)
IF BTST(usrtype&,1)
LET off_y&=OB_H(tree%,1)+1
ELSE IF BTST(usrtype&,2)
LET off_x&=OB_W(tree%,1)+1
ELSE IF BTST(usrtype&,5)
LET off_y&=OB_H(tree%,2)
ENDIF
ENDIF
~WIND_CALC(0,kind&,0,0,ADD(ww&,off_y&),ADD(wh&,off_y&),x&,y&,w&,h&)
RETURN
|