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;