Fenstergrößen berechnen


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