sql >> Databáze >  >> RDS >> Oracle

Správa oken v Oracle D2k Forms

Správa oken ve formulářích Oracle D2k

Tato část představuje dvě velmi užitečné techniky správy oken v Oracle D2k Forms:zavření aktivního okna kliknutím na ikonu x vpravo nahoře a změna velikosti, přemístění a zavření jakéhokoli otevřeného aktivního okna ve formuláři. První jmenovaný je velmi ceněným požadavkem uživatele, který Oracle Forms postrádá; je v přísné shodě s jakoukoli standardní aplikací Windows. Druhá technika je obecná rutina, která minimalizuje úsilí při programování a také úsilí koncového uživatele při zavírání každého otevřeného okna jednotlivě.

Zavření okna pomocí ikony x

Zavření okna kliknutím na ikonu x v pravém horním rohu je často požadovaná funkce a také standardní funkce Windows. Ačkoli tuto techniku ​​Forms ignorují, můžete ji dosáhnout pomocí několika řádků kódu. Chcete-li tak učinit, napište WHEN-WINDOW-CLOSED spustit a opustit okno nebo opustit formulář podle potřeby kontrolou :SYSTEM.EVENT_WINDOW. Chcete-li například opustit formulář kliknutím na x, když je aktivním oknem okno konzoly (což je obecně OKNO1 ), postup p_close_window lze kódovat následovně:
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;

Tento postup je obecný v tom smyslu, že jej lze použít k zavření libovolného okna, nejen okna konzoly. Lze zapsat klíčový výstup specifický pro formulář, který se postará o jakoukoli speciální kontrolu před zavřením konkrétního formuláře kliknutím na ikonu x.

Změna velikosti, přemístění a zavření libovolného okna

Podřízená okna obsahující naskládaná plátna jsou velmi často vyžadována ve formě pro zobrazení informací, které se stanou součástí primárního okna. Například výběrový seznam může být zobrazen v primárním okně a následné podrobnosti a dílčí detaily se mohou objevit v jednom nebo více naskládaných pláten držených podřízenými okny. Dynamická změna velikosti, přemístění nebo zavření každého z těchto oken je zásadní, když musí být zobrazeno více oken současně. To vyžaduje značné množství kódu. Tato technika poskytuje obecnou rutinu pro změnu velikosti, přemístění a zavření jakéhokoli daného okna v jediném formuláři, čímž programátorovi šetří čas a úsilí nutné k napsání podstatného požadovaného kódu. TipOkno události by mělo mít close_allowed, změna_povolena, a move_allowed vlastnosti nastaveny na Ano/True v době návrhu. To je nezbytné k povolení výchozích funkcí zavírání, změny velikosti a přemístění. Postupy pro změnu velikosti a přemístění libovolného okna lze zapsat na podobné řádky:
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;

Předchozí dva postupy a jeden uvedený v předchozí části lze zobecnit do jednoho přidáním dalšího parametru s názvem 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;

Volání p_close_window lze nahradit p_action_window takto:
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;

Kód pro každou ze tří procedur p_close_window, p_resize_window, a p_reposition_window lze přizpůsobit tak, aby zvládla logiku specifickou pro aplikaci. Například kód pro p_close_window proceduru lze upravit tak, aby obsahovala volání pro zahájení explicitní navigace z příslušného okna, jako je GO_ITEM nebo GO_BLOCK, což umožní zavření tohoto okna a také vyvolání Chcete uložit? upozornění v případě čekajících změn databáze. Také, jak je vidět na příkladu zavření okna konzoly, EXIT_FORM může být užitečné při zavření všech oken, která iniciují opuštění určitého formuláře. TipVolání do vestavěného SET_WINDOW_PROPERTY s vlastností VISIBLE nastavte na FALSE zavře (skryje) okno pouze v případě, že okno neobsahuje žádné navigovatelné položky nebo je styl okna Dokument. Pokud okno obsahuje alespoň jednu navigovatelnou položku nebo je styl okna Dialog, okno zůstane zobrazené, dokud a dokud uživatel výslovně neopustí okno. Pokud je okno modální, jediným způsobem, jak jej ukončit, je explicitní navigace. To lze zajistit přizpůsobením p_close_window postup, jak je uvedeno v předchozím příkladu.
  1. MySQL – Obnovení databáze schémat poklesu výkonu

  2. Jak potlačit INFO zprávy při spouštění skriptů psql

  3. Nahrávání obrázků v CKEditoru bez použití pluginu

  4. Připojte SAP IQ k SQL Serveru