Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Quản lý cửa sổ trong Oracle D2k Forms

Quản lý cửa sổ trong Oracle D2k Forms

Phần này trình bày hai kỹ thuật rất hữu ích về quản lý cửa sổ trong Oracle D2k Forms:đóng cửa sổ đang hoạt động bằng cách nhấp vào biểu tượng x phía trên bên phải và thay đổi kích thước, định vị lại và đóng bất kỳ cửa sổ đang hoạt động nào đang mở trong một biểu mẫu. Trước đây là một yêu cầu người dùng được đánh giá cao mà Oracle Forms còn thiếu; nó phù hợp nghiêm ngặt với bất kỳ ứng dụng Windows tiêu chuẩn nào. Kỹ thuật thứ hai là một thói quen chung để giảm thiểu nỗ lực lập trình, cũng như nỗ lực của người dùng cuối, trong việc đóng từng cửa sổ đang mở.

Đóng cửa sổ bằng biểu tượng x

Đóng cửa sổ bằng cách nhấp vào biểu tượng x ở góc trên bên phải là một tính năng thường được yêu cầu và cũng là chức năng tiêu chuẩn của Windows. Mặc dù kỹ thuật này bị Biểu mẫu bỏ qua, nhưng bạn có thể đạt được nó bằng một vài dòng mã. Để làm như vậy, hãy viết WHEN-WINDOW-CLOSED kích hoạt và điều hướng ra khỏi cửa sổ hoặc thoát khỏi biểu mẫu nếu cần bằng cách kiểm tra :SYSTEM.EVENT_WINDOW. Ví dụ:để thoát khỏi biểu mẫu bằng cách nhấp vào x khi cửa sổ hiện hoạt là cửa sổ bảng điều khiển (thường là WINDOW1 ), thủ tục p_close_window có thể được viết mã như sau:
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;

Quy trình này là chung theo nghĩa là nó có thể được sử dụng để đóng bất kỳ cửa sổ nào, không chỉ cửa sổ giao diện điều khiển. Một phím thoát dành cho biểu mẫu cụ thể có thể được viết để thực hiện bất kỳ kiểm tra đặc biệt nào trước khi đóng biểu mẫu cụ thể đó bằng cách nhấp vào biểu tượng x.

Thay đổi kích thước, định vị lại và đóng bất kỳ cửa sổ nào

Cửa sổ con chứa các tấm bạt xếp chồng lên nhau rất thường được yêu cầu trong một biểu mẫu để hiển thị thông tin trở thành một phần của cửa sổ chính. Ví dụ:một danh sách lựa chọn có thể được hiển thị trong cửa sổ chính và các chi tiết và chi tiết phụ tiếp theo có thể hình thành trong một hoặc nhiều canvas xếp chồng lên nhau được giữ bởi các cửa sổ con. Tự động thay đổi kích thước, định vị lại hoặc đóng từng cửa sổ này là điều cần thiết khi phải hiển thị nhiều cửa sổ cùng một lúc. Điều này đòi hỏi một lượng mã đáng kể. Kỹ thuật này cung cấp một quy trình chung để thay đổi kích thước, định vị lại và đóng bất kỳ cửa sổ nhất định nào ở một dạng duy nhất, do đó tiết kiệm thời gian và nỗ lực cần thiết cho lập trình viên để viết mã đáng kể cần thiết. Mẹo:Cửa sổ sự kiện phải có close_allowed, resize_allowed, move_allowed thuộc tính được đặt thành Có / Đúng tại thời điểm thiết kế. Điều này là cần thiết để bật các tính năng đóng, thay đổi kích thước và định vị lại mặc định. Quy trình thay đổi kích thước và định vị lại bất kỳ cửa sổ nào có thể được viết trên các dòng tương tự:
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;

Hai thủ tục trước và một thủ tục đã cho trong phần trước có thể được tổng quát hóa thành một thủ tục bằng cách thêm một tham số bổ sung có tên 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;

Cuộc gọi tới p_close_window có thể được thay thế bằng p_action_window như sau:
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;

Mã cho mỗi trong ba quy trình p_close_window, p_resize_window, p_reposition_window có thể được tùy chỉnh để xử lý logic dành riêng cho ứng dụng. Ví dụ:mã cho p_close_window có thể tùy chỉnh thủ tục để chứa các lệnh gọi bắt đầu điều hướng rõ ràng ra khỏi cửa sổ tương ứng, chẳng hạn như GO_ITEM hoặc GO_BLOCK, điều này sẽ cho phép đóng cửa sổ đó và cũng tạo ra một Bạn có muốn lưu không? cảnh báo trong trường hợp thay đổi cơ sở dữ liệu đang chờ xử lý. Ngoài ra, như đã thấy trong ví dụ đóng cửa sổ bảng điều khiển, EXIT_FORM có thể hữu ích trong việc đóng tất cả các cửa sổ bắt đầu thoát một biểu mẫu cụ thể. Mẹo Gọi đến SET_WINDOW_PROPERTY tích hợp sẵn với thuộc tính VISIBLE đặt thành FALSE chỉ đóng (ẩn) cửa sổ nếu cửa sổ không có các mục có thể điều hướng trong đó hoặc kiểu cửa sổ là Tài liệu. Nếu cửa sổ có ít nhất một mục có thể điều hướng trong đó hoặc kiểu cửa sổ là Hộp thoại, cửa sổ vẫn hiển thị trừ khi và cho đến khi người dùng điều hướng rõ ràng ra khỏi cửa sổ. Ngoài ra, nếu cửa sổ là phương thức, cách duy nhất để thoát là bằng cách điều hướng rõ ràng. Điều này có thể được giải quyết bằng cách tùy chỉnh của p_close_window thủ tục như được nêu trong ví dụ trước.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đặt lại trình tự trong oracle 11g

  2. Oracle SQL:Hiểu hoạt động của SYS_GUID () khi hiển thị trong dạng xem nội tuyến?

  3. Hàm SYS_GUID () trong Oracle

  4. Quy trình lưu trữ của Spring - kết quả trả về từ quy trình luôn trống

  5. Cách nhận giá trị UTC cho SYSDATE trên Oracle