Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zarządzanie oknami w Oracle D2k Forms

Zarządzanie oknami w Oracle D2k Forms

W tej sekcji przedstawiono dwie bardzo przydatne techniki zarządzania oknami w Oracle D2k Forms:zamykanie aktywnego okna przez kliknięcie ikony x w prawym górnym rogu oraz zmianę rozmiaru, przemieszczanie i zamykanie dowolnego otwartego aktywnego okna w formularzu. Ten pierwszy jest bardzo cenionym wymogiem użytkownika, którego brakuje w Oracle Forms; jest w ścisłej zgodności z każdą standardową aplikacją Windows. Druga technika to ogólna procedura minimalizująca wysiłek programistyczny, a także wysiłek użytkownika końcowego, polegający na indywidualnym zamykaniu każdego otwartego okna.

Zamykanie okna za pomocą ikony x

Zamykanie okna przez kliknięcie ikony x w prawym górnym rogu jest często wymaganą funkcją, a także standardową funkcją systemu Windows. Chociaż ta technika jest ignorowana przez Formularze, możesz to osiągnąć za pomocą kilku linijek kodu. Aby to zrobić, napisz GDY-OKNO-ZAMKNIĘTE wyzwalacz i wyjdź z okna lub wyjdź z formularza, jeśli to konieczne, sprawdzając :SYSTEM.EVENT_WINDOW. Na przykład, aby wyjść z formularza, klikając x, gdy aktywnym oknem jest okno konsoli (zwykle jest to OKNO1 ), procedura p_close_window można zakodować w następujący sposób:
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;

Ta procedura jest ogólna w tym sensie, że można jej użyć do zamknięcia dowolnego okna, nie tylko okna konsoli. Można napisać wyjście klawisza specyficznego dla formularza, aby zająć się specjalnym sprawdzaniem przed zamknięciem tego konkretnego formularza, klikając ikonę x.

Zmiana rozmiaru, zmiana położenia i zamykanie dowolnego okna

Okna potomne zawierające ułożone płótna są bardzo często wymagane w formie do wyświetlania informacji, które stają się częścią okna głównego. Na przykład lista wyboru może być wyświetlana w oknie głównym, a kolejne szczegóły i szczegóły podrzędne mogą znajdować się w jednym lub kilku ułożonych kanwach przechowywanych w oknach podrzędnych. Dynamiczna zmiana rozmiaru, zmiana położenia lub zamykanie każdego z tych okien jest niezbędne, gdy jednocześnie musi być wyświetlanych wiele okien. Wymaga to znacznej ilości kodu. Ta technika zapewnia ogólną procedurę zmiany rozmiaru, położenia i zamykania dowolnego okna w pojedynczej formie, oszczędzając w ten sposób programiście czasu i wysiłku niezbędnego do napisania wymaganego kodu. WskazówkaOkno zdarzenia powinno mieć close_allowed, dozwolona zmiana rozmiaru, i move_allowed właściwości ustawione na Tak/Prawda w czasie projektowania. Jest to konieczne, aby włączyć domyślne funkcje zamykania, zmiany rozmiaru i zmiany położenia. Procedury zmiany rozmiaru i repozycjonowania dowolnego okna można napisać w podobnych wierszach:
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;

Poprzednie dwie procedury i ta podana w poprzedniej sekcji można uogólnić w jedną, dodając dodatkowy parametr o nazwie 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;

Wywołanie p_close_window można zastąpić przez p_action_window w następujący sposób:
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;

Kod dla każdej z trzech procedur p_close_window, p_resize_window, i p_reposition_window można dostosować do obsługi logiki specyficznej dla aplikacji. Na przykład kod dla p_close_window procedurę można dostosować tak, aby zawierała wywołania inicjujące jawną nawigację z odpowiedniego okna, takie jak GO_ITEM lub GO_BLOCK, co umożliwi zamknięcie tego okna, a także rzuci Czy chcesz zapisać? alert w przypadku oczekujących zmian w bazie danych. Ponadto, jak widać na przykładzie zamykania okna konsoli, EXIT_FORM może być pomocny w zamykaniu wszystkich okien, które inicjują wychodzenie z danego formularza. WskazówkaWywołanie wbudowanego SET_WINDOW_PROPERTY z właściwością WIDOCZNY ustaw na FAŁSZ zamyka (ukrywa) okno tylko wtedy, gdy nie ma w nim żadnych elementów umożliwiających nawigację lub styl okna to Dokument. Jeśli w oknie znajduje się co najmniej jeden element umożliwiający nawigację lub styl okna to Dialog, okno pozostaje wyświetlane, dopóki użytkownik nie wyjdzie z okna. Ponadto, jeśli okno jest modalne, jedynym sposobem wyjścia jest jawna nawigacja. Można to zrobić, dostosowując p_close_window procedura opisana w poprzednim przykładzie.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL, aby zmienić typ kolumny z numeru na varchar2, gdy zawiera dane

  2. Jak połączyć się z bazą danych Oracle 11 z . internet

  3. Używanie Substr z Instr do wyodrębniania ciągu w Oracle

  4. Zamówienie niestandardowe w Oracle SQL

  5. Procedura UTL_FILE.FOPEN() nie akceptuje ścieżki do katalogu?