Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUM ORACLE F.A.Q ORACLE TUTORIELS ORACLE TUTORIELS SQL SCRIPTS SQL LIVRES ORACLE QUIZ BLOG ORACLE

Designer -> génération Forms : une procédure de placement d'item

Juillet 2004

Par SheikYerbouti (Page d'accueil)
 

procédure PL/SQL Move_item()


Introduction
1. Démonstration
Remerciements


Introduction


Lors d'une génération d'écran Forms depuis Designer, il n'est pas toujours possible de placer les éléments exactement à l'endroit voulu.


Voici une procédure qui va permettre de placer très exactement un item par rapport à un autre

Cette procédure accepte 4 paramètres :

  • L'item de référence (VARCHAR2) item utilisé comme point de départ
  • L'item à déplacer (VARCHAR2)
  • La position horizontale souhaitée (VARCHAR2) qui peut être 'L' (left) où 'R' (right)
  • La position verticale souhaitée (VARCHAR2) qui peut être 'F' (floor), 'C' (ceil), 'T' (top), 'B' (bottom)

Les paramètres position horizontale et/où verticale acceptant également un offset positif ou négatif exprimé en pixels


1. Démonstration


Voici une copie d'écran de la forme telle qu'elle pourrait être générée par Designer

Et voici le block PL/SQL appelé depuis le trigger WHEN-BUTTON-PRESSED du bouton Reference item
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;
Puis la copie d'écran de la forme après l'appel de la procédure move_item()


Cette procédure est indépendante du système de coordonnées et fonctionne indistinctement selon que vos écrans sont en CHARACTERS, INCHES, POINTS ou CENTIMETRES

Si vous souhaitez que l'item :BL.BT7 soit positionné à droite de l'item BL.BTREF+ 20 pixels entrez :

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


Voici le code de la procedure Move_item()
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;

Qu'il suffit de copier dans une de vos librairies PL/SQL attachée à votre forme de référence


Remerciements


Chaleureux remerciements à Developpez.com et à l'équipe SGBD.



Responsable bénévole de la rubrique Oracle : Vincent Rogier - Contacter par EMail :
Vos questions techniques : forum d'entraide Oracle - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.