Wszędobylskie menu "Okno"

Gdy zbudujemy własny moduł menu w Oracle Forms 4.5 i dołączymy go do formularza to stwierdzimy, że oprócz rozwijanych menu zdefiniowanych przez nas pojawia się na końcu po prawej stronie typowe dla Windows menu Okno (lub Window) zawierające takie polecenia, jak: Kaskada, Sąsiadująco, Uporządkuj ikony i wykaz otwartych okien, tak jak pokazano na rys. 1.

Standardowe menu Okno w okienku aplikacji Oracle Forms 4.5

Rys. 1. Standardowe menu Okno w okienku aplikacji Oracle Forms 4.5

Najczęściej jednak wewnątrz głównego okna MDI aplikacji otwarte mamy jedno okno, w którym wyświetlane są kanwy i widoki z bieżącego formularza, a jeśli nawet wołamy jeden formularz z drugiego formularza to możemy nie chcieć aby użytkownik przełączał się pomiędzy formularzami. Zatem operacje do układania okien w sposób kaskadowy, sąsiadująco lub lista okien służąca do przełączania się pomiędzy nimi są bezużyteczne. Również na pytania użytkowników „do czego to służy”? nie jest łatwo odpowiedzieć, a po odpowiedzi w stylu „z tego menu nie musi pan/pani w ogóle korzystać” daje się zauważyć na twarzy użytkownika lekkie zdziwienie. Wydaje się, że najlepszym rozwiązaniem jest pozbycie się tego menu. Poniżej znajduje się opis prostego zabiegu, który ukrywa niepotrzebne menu Okno. Gdy budujemy własny moduł menu korzystając z edytora menu to za pomocą przycisku Utwórz w prawo znajdującym się na pasku zadań możemy dodać nowe menu, które następnie będzie widoczne na belce menu w oknie aplikacji. Menu Okno pojawia się po uruchomieniu aplikacji jako ostanie menu na belce menu pomimo tego, że w module nie zostało ono utworzone. Paradoksalnie, aby pozbyć się menu Okno z belki zadań musimy utworzyć menu Okno w naszym module menu. Należy zaznaczyć ostatnie menu po prawej stronie i użyć przycisku Utwórz w prawo. Zostanie wówczas dołożone nowe menu z etykietą . Należy teraz zmodyfikować następujące własności tego elementu: Nazwa: UKRYTE_MENU_OKNO Typ elementu menu: Magiczny Typ polecenia: Null Element magiczny: Okno Etykieta: {puste pole} Zabieg taki spowoduje, że standardowe menu Okno zostanie przesłonięte przez nasze własne i ze względu na pustą etykietę nie będzie ono widoczne na belce menu. Niestety, menu istnieje jako takie i przypadkowy ruch myszką może spowodować jego rozwinięcie, tak jak pokazano na rysunku 2.

Nasze menu typu

Rys. 2. Nasze menu typu „Okno” z pustą etykietą przesłania standardowe menu Okno

Aby się uchronić przed przypadkowym rozwinięciem „nieistniejącego” menu należy je wyłączyć. Można to zrobić zmieniając programowo własność ENABLED tego menu w tzw. kodzie początkowym modułu menu. Należy w tym celu otworzyć okno własności modułu menu i we własności Kod początkowy wpisać: set_menu_item_property(‚MENU_GLOWNE.UKRYTE_MENU_OKNO’, DISPLAYED, PROPERTY_FALSE); set_menu_item_property(‚MENU_GLOWNE.UKRYTE_MENU_OKNO’, ENABLED, PROPERTY_FALSE); Cel został osiagnięty – nie musimy już udzielać wykrętnych odpowiedzi na pytania użytkownika do czego służy ta funkcja programu. Na koniec można jeszcze dodać, że ciekawy efekt uzyskuje się jeśli zdefiniowane przez nas menu Okno jest jedynym menu w module. Wówczas belka menu okna aplikacji nie posiada żadnych widocznych menu i Windows usuwa belkę menu z okna MDI aplikacji.


Maciej Matysiak