Designer -> Forms generation

 

Move_item PL/SQL procedure

 

Home page

 

 

Because, when you generate Oracle Forms application from Oracle Designer,

it is not always possible to place item at the exact position you want, this is a

PL/SQL procedure which will do the job for you at runtime.

 

 

This procedure accept 4 parameters :

 

The reference item (VARCHAR2) which is the item used to define the start display

The item to move (VARCHAR2) which is the item you want to move

The horizontal position (VARCHAR2) which can be ‘L’ (left) or ‘R’ (right)

The vertical position (VARCHAR2) which can be 'F' (floor), 'C' (ceil), 'T' (top), 'B' (bottom)

 

Horizontal and vertical arguments accept also a positive or a negative offset

specified in pixel

 

 

Demonstration

 

This is a hard copy of a Forms dialog

 

 

And here is the procedure called in the WHEN-BUTTON-PRESSED

 

PROCEDURE move_all IS

BEGIN

 

            Move_Item ( 'BL.BTREF','BL.BT1','L','C')   ;

            Move_Item ( 'BL.BTREF','BL.BT2','L','T')   ;

            Move_Item ( 'BL.BTREF','BL.BT3','L','F')   ;

            Move_Item ( 'BL.BTREF','BL.BT4','L','B')   ;

           

            Move_Item ( 'BL.BTREF','BL.BT5','R','C')   ;

            Move_Item ( 'BL.BTREF','BL.BT6','R','T')   ;

            Move_Item ( 'BL.BTREF','BL.BT7','R','F')   ;

            Move_Item ( 'BL.BTREF','BL.BT8','R','B')   ;

 

END;

 

 

Then the hard copy of the screen after the calls to the move_item() procedure

 

 

 

This procedure is coordinate-system independent so conversion is made

If your screen is in INCHES, POINTS or CENTIMETERS coordinate-system

 

If you want the :BL.BT7 item on the Right + 20 pixels from the reference item, enter :

 

Move_Item ( 'BL.BTREF','BL.BT7','R+20','F')   ;

 

 

Code of the Move_item() procedure

 

PROCEDURE Move_Item

      (

            PC$Item_Ref       in Varchar2,

            PC$Bouton         in Varchar2,

            PC$Horizontal     in Varchar2,

            PC$Vertical       in Varchar2

      ) IS

  --

  ------------------------------------------

  -- Positionning of item from another one

  ------------------------------------------

  --

  -- IN     : PC$Item_ref (reference item)

  --        : PC$Bouton (item to move)

  --        : PC$Horizontal ('L' on left, 'R' on right)

  --        : PC$Vertical ('F' floor, 'C' ceil, 'T' top, 'B' bottom)

  --

     

      -- Reference item --

      LN$PosX     Number;

      LN$PosY     Number;

      LN$Width    NUMBER;

      LN$Heigth   NUMBER;

      -- Item to move --

      LN$Bwidth   NUMBER;

      LN$Bheigth  NUMBER;

      LN$NewX     NUMBER;

      LN$NewY     NUMBER ;   

      -- Offset --

      LN$Pos      PLS_INTEGER ;

      LN$HOffset  NUMBER := 0 ;

      LN$VOffset  NUMBER := 0 ;

      -- Coordinate system --

      LC$Scoord   VARCHAR2(100) := Get_Form_Property( Name_in('system.current_form'), COORDINATE_SYSTEM ) ;

 

Begin

 

      -- Reference item --

      LN$PosX     := Get_Item_Property(PC$Item_Ref, X_POS );

      LN$PosY     := Get_Item_Property(PC$Item_Ref, Y_POS );

      LN$Width    := Get_Item_Property(PC$Item_Ref, WIDTH );

      LN$Heigth   := Get_Item_Property(PC$Item_Ref, HEIGHT );

 

      -- Item to move --

      LN$BWidth  := Get_Item_Property(PC$Bouton, WIDTH );

      LN$BHeigth := Get_Item_Property(PC$Bouton, HEIGHT );      

 

      -- Offsets --

      LN$Pos := Instr( PC$Horizontal, '-' ) ;

      If LN$Pos > 0 Then

            LN$HOffset := To_Number( Substr( PC$Horizontal, LN$Pos, 5 ) ) ;

      End if ;

      LN$Pos := Instr( PC$Horizontal, '+' ) ;

      If LN$Pos > 0 Then

            LN$HOffset := To_Number( Substr( PC$Horizontal, LN$Pos, 5 ) ) ;

      End if ;

     

      LN$Pos := Instr( PC$Vertical, '-' ) ;

      If LN$Pos > 0 Then

            LN$VOffset := To_Number( Substr( PC$Vertical, LN$Pos, 5 ) ) ;

      End if ;

      LN$Pos := Instr( PC$Vertical, '+' ) ;

      If LN$Pos > 0 Then

            LN$VOffset := To_Number( Substr( PC$Vertical, LN$Pos, 5 ) ) ;

      End if ;

     

      -- Conversion of offset in pixel --

      If LC$Scoord = 'INCHES' Then

             LN$HOffset := LN$HOffset * 0.0104 ;

             LN$VOffset := LN$VOffset * 0.0104 ;

      ElsIf LC$Scoord = 'POINTS' Then 

             LN$HOffset := LN$HOffset * 1.333 ;

             LN$VOffset := LN$VOffset * 1.333 ;

      ElsIf LC$Scoord = 'CENTIMETERS' Then 

             LN$HOffset := LN$HOffset * 0.0263 ;

             LN$VOffset := LN$VOffset * 0.0263 ;

      End if ;

     

      If Substr(PC$Horizontal,1,1) = 'L' Then -- on left

            If Substr(PC$Vertical,1,1) Not in ('B','T') Then

                  LN$NewX := LN$PosX - LN$BWidth ;

            Else

                  LN$NewX := LN$PosX ;

            End if ;

      Else -- on right

            If Substr(PC$Vertical,1,1) Not in ('B','T') Then

                  LN$NewX := LN$PosX + LN$Width ;

            Else

                  LN$NewX := LN$PosX + LN$Width - LN$BWidth ;

            End if ;

      End if ;

      LN$NewX := LN$NewX + LN$HOffset ;

     

      If Substr(PC$Vertical,1,1) = 'F' Then -- floor

            LN$NewY := (LN$PosY + LN$Heigth) - LN$BHeigth ;

      ElsIf Substr(PC$Vertical,1,1) = 'C' Then -- ceil

LN$NewY := LN$PosY ;

ElsIf Substr(PC$Vertical,1,1) = 'T' Then -- top

LN$NewY := LN$PosY - LN$BHeigth ;

      Else -- bottom

            LN$NewY := LN$PosY + LN$Heigth  ;

      End if ;

 

      LN$NewY := LN$NewY + LN$VOffset ;

     

      Set_Item_Property( PC$Bouton, POSITION, LN$NewX, LN$NewY ) ;

     

END;