언어 : 진행 10.1C는 프로그래밍 방식으로 진행
나는 윈도우 형태를 가지고 있고, 그것을 동적으로 (이 경우 전환 박스) 위젯의 숫자를 만들 수 있습니다. 사용자가 현재 콜렉션에서 가지고있는 hickies 수에 따라 0에서 64 개의 위젯을 만들 수 있습니다. 사용자가 컬렉션간에 변경되면 필요에 따라 위젯이 삭제되거나 생성됩니다. 양식은 표시되는 위젯 수에 따라 크기가 조정됩니다.
사용자는 메뉴 모음, 도구 모음 또는 키보드 바로 가기에서 작업을 선택하여 체크 된 항목에 대해 특정 수의 프로세스를 수행 할 수 있습니다. 그러나 사용자가 하나의 위젯을 마우스 오른쪽 버튼으로 클릭 할 수 있기를 원합니다.이 위젯은 체크 여부와 상관없이 클릭 한 항목 하나에서만 수행 할 수있는 팝업 메뉴를 가져와야합니다.
그 자체로 이것은 매우 간단합니다. 이전에는 사용자가 동적 컨트롤 중 하나를 클릭 할 때 팝업되는 단일 팝업 메뉴를 사용하여 이러한 종류의 작업을 수행했습니다 (다른 언어로). 진행 상황에서이 간단한 작업을하는 데 어려움을 겪고 있습니다.
모든 위젯의 오른쪽 클릭에 응답하는 팝업 메뉴를 가질 수 없습니다. 하나의 팝업 메뉴를 만들려고했는데 각각의 동적 위젯을 만들 때 팝업 메뉴 속성을이 메뉴에 설정했습니다. 문제는 하나의 위젯에만 메뉴를 적용 할 수 있다는 것입니다. 위젯 1에 할당하면 위젯 2에 할당 할 수 없습니다. 이것은 각 위젯을위한 별도의 메뉴를 만드는 것을 생각하게 만듭니다. 그리고 위젯들이 파괴되고 재창조 될 때,이 메뉴도 마찬가지입니다. 단일 세션에서 나는 수백 또는 수천 개의 동일한 메뉴를 만들고 파괴 할 것이며 사용자는 그 중 하나 또는 두 가지를 사용할 수 있습니다. 아니면 전혀. 그래서 이것은 나에게 좋은 선택처럼 보이지 않습니다.
내 다음 솔루션은 프로그래밍 방식으로 팝업 할 수있는 단일 메뉴를 만드는 것이지만 프로그래밍 방식으로 메뉴를 팝업하려는 모든 시도는 실패했습니다. 나는 시도했다 "메뉴 - 드롭"메뉴에 MyMenu 및 기타 유사한 것들을 적용 할 수 없으며 나는 그것을 할 수있는 방법을 알아낼 수 없다. 나는 또한 이것에 대한 정보를 찾는 것은 매우 어렵다. 마치 다른 사람이 해본 적이없는 것처럼 보입니다. 드물지만 누군가가 그것에 대해 물어 본 드문 경우는 만족스러운 답변이 없습니다. 나는 이것이 할 수 없다고 의심하고있다.
이러한 모든 것을 시도하면서도 마우스 - 메뉴 - 다운, 마우스 - 메뉴 - 업 및 마우스 - 메뉴 - 클릭 이벤트에 끊임없는 문제가있었습니다. MOUSE-MENU-CLICK은 절대 일어나지 않을 것 같습니다. 어쨌든 동적 위젯이 아닙니다. 나는 이유를 알 수 없다. MOUSE-MENU-UP은 때로는 발생하지만 MOUSE-MENU-DOWN과 위젯의 다른 이벤트는 물론 위젯의 부모에 따라 달라집니다. 그것이 언제 발사 될지 또는 발사되지 않을지를 정확히 파악할 수는 없었습니다. 그것은 매우 반 직관적입니다. 마우스 - 메뉴 다운 만 발사 할 수 있습니다.
그래서 : 프로그래밍 방식으로 메뉴를 표시 할 수 없으며 메뉴의 상위 항목을 마우스 오른쪽 버튼으로 클릭하면 표시됩니다. 수백 개의 동일한 메뉴를 사용하지 않으려면 위젯의 부모 (예 : 기본 프레임)에 팝업 메뉴가 있어야합니다.
기본 프레임의 정적 팝업 메뉴를 사용하면 위젯을 마우스 오른쪽 버튼으로 클릭하면 메뉴가 표시되지만 프레임의 아무 곳이나 클릭하면 나타납니다. 메뉴를 비활성화 한 다음 위젯의 오른쪽 클릭 이벤트에서 활성화 할 수 있습니다. 이것은 처음에는 아주 잘 작동합니다. 프레임의 아무 곳이나 클릭해도 아무 일도 일어나지 않습니다 (메뉴가 비활성화 됨). 그러나 위젯을 클릭하면 메뉴가 활성화되고 팝업됩니다. 예! 하지만 이제는 메뉴가 활성화되어 있고 버튼, 빈 공간, 진행률 막대 등을 마우스 오른쪽 버튼으로 클릭하면 팝업됩니다. 언제 다시 비활성화 할 수 있습니까? 메뉴가 팝업되면 사용자가 아무 곳이나 클릭 할 수 있고 메뉴가 사라집니다. 메뉴가 닫힐 때 발생하는 이벤트가 없으므로 막혔습니다.
오랫동안 불편을 끼쳐 드려 죄송합니다. 사용자가 몇 가지 동적으로 생성 된 위젯 중 하나를 마우스 오른쪽 버튼으로 클릭 할 때 나타나는 팝업 메뉴 하나가 필요합니다. 톰의 답변을 사용
는이 내가 그것을 구현하는 방법입니다
/* Somewhere in Control Definitions... */
DEFINE MENU m_Popup
MENU-ITEM m_Test1 LABEL "Test 1"
MENU-ITEM m_Test2 LABEL "Test 2".
/* Somewhere, where I need to dynamically create the widgets. */
/* Loop through the items in the temp table and create a widget for each. */
FOR EACH ttItem BY ttItem.ItemName:
CREATE TOGGLE-BOX hWidget
ASSIGN
FRAME = FRAME DEFAULT-FRAME:HANDLE
LABEL = STRING(ttItem.ttItemName)
TRIGGERS:
ON MOUSE-MENU-DOWN PERSISTENT RUN GetMenu IN THIS-PROCEDURE.
END TRIGGERS.
END.
/* If the user right-clicks on any one of the widgets, this procedure */
/* is run with SELF being the widget that was clicked on. */
PROCEDURE GetMenu:
/* Remove the menu from its current owner and assign it to SELF. */
MENU m_Popup:OWNER:POPUP-MENU = ?.
SELF:POPUP-MENU = MENU m_Popup:HANDLE.
END PROCEDURE.
/* The user clicks on one of the menu items */
/* Here SELF is the menu item that was clicked. I can */
/* get m_Popup from SELF:PARENT and the widget it was */
/* was assigned to from SELF:PARENT:OWNER. */
ON CHOOSE OF MENU-ITEM m_Test1
DO:
MESSAGE "You selected " SELF:LABEL " for " SELF:PARENT:OWNER:LABEL.
END.
언어는 무엇입니까? 기음#? – Perlnika
죄송합니다, 진행 상황 4GL입니다. 나는 그 질문의 본문으로 넘어갈 것이다. – RobertT
문제를 밝힐 수있는 샘플 코드가 있습니까? –