Oracle
 sql >> база данни >  >> RDS >> Oracle

Управление на прозорци в Oracle D2k Forms

Управление на прозорци в Oracle D2k Forms

Този раздел представя две много полезни техники за управление на прозорци в Oracle D2k Forms:затваряне на активен прозорец чрез щракване върху горната дясна икона x и преоразмеряване, препозициониране и затваряне на всеки отворен активен прозорец във формуляр. Първото е много ценено потребителско изискване, което липсва на Oracle Forms; той е в стриктно съответствие с всяко стандартно приложение за Windows. Втората техника е обща рутина за минимизиране на усилията за програмиране, както и усилията на крайния потребител, при затваряне на всеки отворен прозорец поотделно.

Затваряне на прозорец с иконата x

Затварянето на прозорец чрез щракване върху иконата x в горния десен ъгъл е често необходима функция, а също и стандартната функционалност на Windows. Въпреки че тази техника се игнорира от Forms, можете да я постигнете с помощта на няколко реда код. За да направите това, напишете КОГДА-ПРОЗОРЪТ-ЗАТВОРЕН задействайте и излезте от прозореца или излезте от формуляра, ако е необходимо, като проверите за :SYSTEM.EVENT_WINDOW. Например, за да излезете от формуляр, като щракнете върху x, когато активният прозорец е прозорецът на конзолата (който обикновено е WINDOW1 ), процедурата p_close_window може да бъде кодиран както следва:
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;

Тази процедура е обща в смисъл, че може да се използва за затваряне на всеки прозорец, а не само на прозореца на конзолата. Може да се напише специфичен за формуляр ключ за изход, за да се погрижи за всяка специална проверка, преди да затворите този конкретен формуляр, като щракнете върху иконата x.

Преоразмеряване, препозициониране и затваряне на всеки прозорец

Детски прозорци, държащи подредени платна, много често се изискват във форма за показване на информация, която става част от основния прозорец. Например, списък за избор може да бъде показан в основния прозорец, а следващите подробности и подподробности могат да фигурират в едно или повече подредени платна, държани от дъщерни прозорци. Динамичното преоразмеряване, препозициониране или затваряне на всеки от тези прозорци е от съществено значение, когато няколко прозореца трябва да се показват едновременно. Това изисква значително количество код. Тази техника осигурява обща рутина за преоразмеряване, преместване и затваряне на всеки даден прозорец в една форма, като по този начин спестява на програмиста време и усилия, необходими за написване на необходимия значителен код. Съвет Прозорецът на събитието трябва да има close_allowed, разрешено_размер, и move_allowed свойствата са зададени на Да/Вярно по време на проектиране. Това е необходимо, за да активирате функциите за затваряне, преоразмеряване и препозициониране по подразбиране. Процедурите за преоразмеряване и препозициониране на всеки прозорец могат да бъдат написани на подобни редове:
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;

Предходните две процедури и тази, дадена в предходния раздел, могат да бъдат обобщени в една чрез добавяне на допълнителен параметър с име 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;

Извикването към p_close_window може да бъде заменен с p_action_window както следва:
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;

Кодът за всяка от трите процедури p_close_window, p_resize_window, и p_reposition_window може да бъде персонализиран за работа със специфична за приложението логика. Например кодът за p_close_window процедурата може да бъде персонализирана да съдържа извиквания за иницииране на изрична навигация от съответния прозорец, като например GO_ITEM или GO_BLOCK, което ще позволи на този прозорец да се затвори и също така да изведе Искате ли да запазите? предупреждение в случай на предстоящи промени в базата данни. Също така, както се вижда в примера за затваряне на прозореца на конзолата, EXIT_FORM може да бъде полезно при затварянето на всички прозорци, които инициират излизане от определен формуляр. Съвет Извикването на вградения SET_WINDOW_PROPERTY със свойството VISIBLE зададен на FALSE затваря (скрива) прозореца само ако прозорецът няма елементи за навигация в него или стилът на прозореца е Документ. Ако прозорецът има поне един елемент за навигация в него или стилът на прозореца е Dialog, прозорецът остава показан, освен ако и докато потребителят изрично не излезе от прозореца. Освен това, ако прозорецът е модален, единственият начин за излизане е чрез изрична навигация. Това може да се погрижи чрез персонализиране на p_close_window процедура, както е описано в предходния пример.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кога или защо да използвате SET DEFINE OFF в Oracle Database

  2. Функция LISTAGG:резултатът от конкатенацията на низове е твърде дълъг

  3. Oracle 11g Express Edition за Windows 64bit?

  4. Как да издигна изключение в PL/SQL?

  5. Урок за Oracle sql:Основно изявление на Sql