sql >> Databasteknik >  >> RDS >> Oracle

Fönsterhantering i Oracle D2k Forms

Fönsterhantering i Oracle D2k Forms

Det här avsnittet presenterar två mycket användbara tekniker för fönsterhantering i Oracle D2k Forms:att stänga ett aktivt fönster genom att klicka på den övre högra x-ikonen och ändra storlek, flytta om och stänga alla öppna aktiva fönster i ett formulär. Det förra är ett mycket uppskattat användarkrav som Oracle Forms saknar; det är i strikt överensstämmelse med alla vanliga Windows-program. Den andra tekniken är en generisk rutin för att minimera programmeringsansträngningen, såväl som slutanvändarens ansträngning, genom att stänga varje öppet fönster individuellt.

Stänga ett fönster med x-ikonen

Att stänga ett fönster genom att klicka på x-ikonen i det övre högra hörnet är en ofta nödvändig funktion och även standard Windows-funktionalitet. Även om denna teknik ignoreras av Formulär, kan du uppnå den med hjälp av några rader kod. För att göra det, skriv en NÄR-FÖNSTER-STÄNGD trigger och navigera ut genom fönstret eller avsluta formuläret vid behov genom att kontrollera efter :SYSTEM.EVENT_WINDOW. Till exempel, för att avsluta ett formulär genom att klicka på x när det aktiva fönstret är konsolfönstret (som vanligtvis är WINDOW1 ), proceduren p_close_window kan kodas enligt följande:
PROCEDURE p_close_window(p_window_name  VARCHAR2,

                         console_window VARCHAR2,

                         ret_code OUT NUMBER)

IS

   Win_id Window;

BEGIN

Win_id := FIND_WINDOW(p_window_name);

    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;



   IF NAME_IN('SYSTEM.EVENT_WINDOW') = p_window_name THEN

      IF console_window = 'Y'THEN

         DO_KEY('EXIT_FORM');

      ELSE

       SET_WINDOW_PROPERTY(win_id, VISIBLE, PROPERTY_FALSE);

      END IF;

      IF FORM_SUCCESS THEN

        Ret_code := 0;

      ELSE

        Ret_code := -1;

      END IF;

   END IF;



END;

Denna procedur är generisk i den meningen att den kan användas för att stänga vilket fönster som helst, inte bara konsolfönstret. En formulärspecifik nyckelutgång kan skrivas för att ta hand om någon speciell kontroll innan du stänger det specifika formuläret genom att klicka på x-ikonen.

Ändra storlek, flytta om och stänga alla fönster

Barnfönster med staplade dukar krävs mycket ofta i en form för att visa information som blir en del av det primära fönstret. Till exempel kan en urvalslista visas i det primära fönstret, och efterföljande detaljer och underdetaljer kan finnas i en eller flera staplade dukar som innehas av underordnade fönster. Dynamiskt ändra storlek, flytta eller stänga vart och ett av dessa fönster är viktigt när flera fönster måste visas samtidigt. Detta kräver en betydande mängd kod. Denna teknik tillhandahåller en generisk rutin för att ändra storlek på, omplacera och stänga ett givet fönster i en enda form, vilket sparar programmeraren den tid och ansträngning som krävs för att skriva den väsentliga koden som krävs. TipsHändelsefönstret bör ha close_allowed, ändra storlek_tillåtet, och move_allowed egenskaper inställda på Ja/True vid designtid. Detta är nödvändigt för att aktivera standardfunktionerna för stängning, storleksändring och ompositionering. Procedurer för storleksändring och omplacering av alla fönster kan skrivas på liknande rader:
PROCEDURE p_resize_window(p_window_name  VARCHAR2,

                          console_window VARCHAR2,

                          width NUMBER,

                          height NUMBER,

                          ret_code OUT NUMBER)

IS

   Win_id Window;

BEGIN



/* The window name, its target width, and its height are passed

as input parameters. Also, an additional parameter to identify whether

the window under consideration is a console window is passed as input. */



    Win_id := FIND_WINDOW(p_window_name);

/* If input window does not exist, exit the procedure and return –1 */



    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;

/* If the input window is the active window and is not the console window,

resize it to the specified width and height */



   IF NAME_IN('SYSTEM.EVENT_WINDOW') = p_window_name THEN

      IF console_window = 'Y'THEN

        NULL; /* CANNOT RESIZE CONSOLE WINDOW */

      ELSE

        RESIZE_WINDOW(win_id, WIDTH, HEIGHT);

      END IF;

      IF FORM_SUCCESS THEN

        Ret_code := 0;

      ELSE

        Ret_code := -1;

      END IF;

   END IF;



END;



PROCEDURE p_reposition_window(p_window_name VARCHAR2,

                              console_window VARCHAR2,

                              xpos number,

                              ypos NUMBER,

                              ret_code OUT NUMBER)

IS

   Win_id Window;

BEGIN

/* The window name and its target (x,y) position are passed as

input parameters. Also, an additional parameter to identify whether the window

under consideration is a console window is passed as input. */



     Win_id := FIND_WINDOW(p_window_name);



/* If the input window does not exist, exit the procedure and return –1 */



    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;

/* If the input window is the active window and is not the console window,

resize it to the specified width and height */



   IF NAME_IN('SYSTEM.EVENT_WINDOW') = p_window_name THEN

      IF console_window = 'Y'THEN

        NULL; /* CANNOT RESIZE CONSOLE WINDOW */

      ELSE

        MOVE_WINDOW(win_id, xpos, ypos);

      END IF;

      IF FORM_SUCCESS THEN

        Ret_code := 0;

      ELSE

        Ret_code := -1;

      END IF;

   END IF;



END;

De två föregående procedurerna och den som ges i föregående avsnitt kan generaliseras till en genom att lägga till en extra parameter med namnet action_type :
PROCEDURE p_action_window(p_window_name VARCHAR2,

                          console_window VARCHAR2,

                          action_type VARCHAR2,

          Width number, height number, xpos number, ypos number,

          ret_code OUT NUMBER,

)

IS

   Win_id Window;

   V_window_name VARCHAR2(40);

BEGIN



/* This procedure takes the action type (CLOSE, RESIZE or REPOSITION )

as an input parameter and calls the corresponding procedure

(p_close_window,

 p_rresize_window or p_reposition_window ) to perform that action.

Initially, it checks for the existence of the input window name */



Win_id := FIND_WINDOW(NAME_IN(p_window_name));



    IF ID_NULL(win_id) THEN

        Ret_code := -1;

        Return;

     END IF;

     IF (action_type = 'CLOSE') THEN

          P_close_window(p_window_name, console_window, ret_code);

      ESLIF (action_type = 'RESIZE') THEN

        P_resize_window(p_window_name, console_window, ret_code);

      ELSIF (action_type = 'REPOSITION')

        P_reposition_window(p_window_name, console_window, ret_code);

      END IF;

      IF FORM_SUCCESS THEN

          ret_code := 0;

       ELSE

          (ret_code = -1);

       END IF;

   END IF;



END;

Anropet till p_close_window kan ersättas av p_action_window enligt följande:
WHEN-WINDOW-CLOSED



DECLARE

    ret_code NUMBER;

BEGIN



p _action_window('WINDOW0'), 'Y','CLOSE', ret_code);

IF (ret_code <>  0) THEN

    MESSAGE('Error closing Console Window!');

    RAISE FORM_TRIGGER_FAILURE;

END IF;

END;

Koden för var och en av de tre procedurerna p_close_window, p_resize_window, och p_reposition_window kan anpassas för att hantera applikationsspecifik logik. Till exempel, koden för p_close_window proceduren kan anpassas för att innehålla anrop för att initiera explicit navigering ut från respektive fönster, såsom GO_ITEM eller GO_BLOCK, vilket kommer att göra det möjligt för det fönstret att stängas och även skicka en Vill du spara? varning vid väntande databasändringar. Dessutom, som ses i exemplet med att stänga konsolfönstret, EXIT_FORM kan vara till hjälp för att stänga alla fönster som initierar att avsluta en viss form. Tips Anropet till den inbyggda SET_WINDOW_PROPERTY med egenskapen VISIBLE inställd på FALSK stänger (döljer) fönstret endast om fönstret inte har några navigerbara objekt i sig eller fönsterstilen är Dokument. Om fönstret har minst ett navigerbart objekt i sig, eller fönsterstilen är Dialog, förblir fönstret visat om inte och tills användaren uttryckligen navigerar ut ur fönstret. Dessutom, om fönstret är modalt, är det enda sättet att avsluta genom explicit navigering. Detta kan skötas genom anpassning av p_close_window procedur enligt beskrivningen i föregående exempel.
  1. Hur man hittar skillnaden mellan två datum i MySQL

  2. NAME_IN inbyggt i Oracle D2k Forms

  3. Hur man installerar SQLite och SQLite Browser i Ubuntu

  4. Hur får man åtkomst till fjärrserver med lokal phpMyAdmin-klient?