2012-06-04 9 views
-1

나는 대시 보드 레이아웃에 ListGrid을 표시했습니다. 어떤 경우에는 보통 우리가 수행하는 Notes 메시지를 SC.say()을 사용하여 표시해야합니다.Smartclient : 모달 마스크에 캔버스를 표시하는 방법은 무엇입니까?

하지만 모든 메시지를 표시 할 수있는 자체 캔버스를 설계했으며이를 상위 대시 보드에 배치했습니다.

이제 Listgrid 구성 요소에서 어떤 작업이 수행 될 때 메시지를 표시해야합니다. 창은 모달로 설정되어 있으므로 내 메모 캔버스가 표시되지만 대시 보드 레이아웃은 가면으로 표시됩니다.

마스킹없이 캔버스를 표시하고 싶습니까?

Canvas Without Canvas와 ListGrid가 표시되도록하려면 어떻게해야합니까? [1] 윈도우가 isModal (true) 및 setModalMask (true)로 설정되어 있고 이것이 옵션이지만 프로젝트에서 필요하지만 지금은 그냥 지금 이제이 메시지 구성 요소가 발표자 파일이라고

public class GetMessageDialogBox extends Canvas 
{ 
    private GetMessageDialogBox(String messageText) 
{ 
    mainLayout = new GetHorizontalLayout("100%", "40", null, 0, 5, null); 

    btnClose = new GetImgButton(16, 16, "Red_Square_Close.png"); 
    btnClose.setVisible(true); 
    btnClose.setShowTitle(true); 

    btnClose.addClickHandler(new ClickHandler() 
    {   
     @Override 
     public void onClick(ClickEvent event) 
     { 
      setAnimateTime(1000); 
      animateMove(10 , Window.getClientHeight()); 
      isVisibleMessageStatus = false; 
      setVisible(false); 
     } 
    }); 

    displayLabel = new GetLabel(messageText,"messageLabelDialogText"); 
    displayLabel.setBackgroundColor("yellow"); 
    displayLabel.setHeight100(); 
    displayLabel.setWidth100(); 
    displayLabel.setValign(VerticalAlignment.CENTER); 
    mainLayout.addMember(new Canvas(){{ 
     setWidth("50%"); 
    }}); 
    mainLayout.addMember(displayLabel); 
    mainLayout.addMember(new Canvas(){{ 
     setWidth("20%"); 
    }}); 
    mainLayout.addMember(btnClose); 

    setParentElement(StaticInfo.mainDashboardLayout); 
    setVisible(true); 
    setHeight(40); 
    setBackgroundColor("yellow"); 
    setBorder("1px solid black"); 
    setLeft(10); 
    setTop(Window.getClientHeight()-40); 
    setShowShadow(true); 
    setShadowOffset(5); 
    setShadowSoftness(5); 
    setAnimateTime(100); 
    timer.schedule(5000); 
    addChild(mainLayout); 
    customMask.show(); 
    bringToFront(); 
    show(); 
} 
} 

표시되어 정상적인 마스크로 강조하지로 단지 YELLOW 캔버스 메시지 표시를 가지고해야합니다.

customMask.show(); 
winLoadList.bringToFront(); 
winLoadList.show(); 

위의 코드는 내가 또한 메시지 구성 요소는 다음과 같은 코드를 함께 가면 표시 할 필요가 나는이 메시지 구성 요소를 호출 할 때 현재의 마스크 있지만 보여줄 필요로 목록 그리드에 사용되지만, 세 가지 브라우저 다른 O/P를 제공합니다.

customMask.show(); 
GetMessageDialogBox.getInstance(messages.LoadPresenter_NoRecordSelected()).bringToFront(); 
GetMessageDialogBox.getInstance(messages.LoadPresenter_NoRecordSelected()).show(); 
+0

나는이 문제를 이해하지 않습니다. 양식은 선택 사항입니다. 샘플 코드 또는 더 나은 스크린 샷을 게시 할 수 있습니까? –

+0

@ Jean-Michel Garcia : 스크린 샷을 추가하고 질문을 편집했습니다. ListGrid가 표시 될 때 마스크가없는 노란 캔버스 쇼 만 필요합니다. 마스크가 적용될 필요가 있다고 생각하면 – sbhatt

+0

여기서 우리는 StackOverflow에서 작업을 수행 할 수 없습니다. 모든 것이 아닌 관련 * 코드를 게시해야합니다. 이와 같은 귀하의 게시물은 커뮤니티가 확실히 무시할 것입니다. 나는 당신이 그것을 성취 할 수있는 방법에 대한 단서를 게시했다. –

답변

1

당신은이를 달성 할 수있는 방법이 많이 있습니다.

가장 쉬운 방법은 노란색 캔버스에 bringToFront()을 호출하는 것입니다. 창을 이동할 때

코드가 작동이 작은 조각은, 그러나, 옐로우 캔버스 뒤에 간다 : setModal(true)를 사용에도 불구하고

Window window = new Window(); 
window.setIsModal(true); 
window.setWidth(800); 
window.setHeight(500); 
window.setAutoCenter(true); 
window.setShowModalMask(true); 

window.show(); 

final HLayout message = new HLayout(); 
message.setWidth(400); 
message.setHeight(30); 
message.addMember(new Label("hey you")); 

message.setBackgroundColor("yellow"); 

message.bringToFront(); 
message.show(); 

, 당신은 당신의 자신의 모달 마스크를하고 그래서, 당신은 할 수 모든 것을 처리하십시오 (어쩌면 더 나은 해결책이있을 수 있습니다).

코드 :

public class BusyMask extends VLayout 
{ 
    public BusyMask() 
    { 
    RootPanel.get().add(this); 
    hide(); 
    setOpacity(50); 
    setBackgroundColor("#000000"); 
    setPositionAndSizes(); 
    this.getParentElement().addResizedHandler(
     new ResizedHandler() 
      { 

       @Override 
       public void onResized(ResizedEvent event) 
       { 
        setPositionAndSizes(); 

       } 
      }); 
    } 

@Override 
public void show() 
{ 
    this.bringToFront(); 
    super.show(); 
} 

@Override 
public void hide() 
{ 
    super.hide(); 
} 

protected void setPositionAndSizes() 
{ 
    setWidth100(); 
    setHeight100(); 

    setLeft(0); 
    setTop(0); 
} 
} 

당신은 당신의 ListGrid 쇼 방법, 그것을 표시 할 때 것을 사용

busyMask.show(); 
bringToFront(); 
super.show(); 
+0

응답 해 주셔서 감사합니다. 나는 캔버스에 bringToFront()를 사용해 보았습니다.하지만 작동하지 않았습니다. 다른 방법을 제안 할 수 있습니까? – sbhatt

+0

마지막으로, 캔버스가 그려지는 방법은 무엇입니까? 그것은 일부 레이아웃의 addMember처럼 추가 되는가, 아니면 그냥 그려지는 것인가? 내 대답을 편집하고 있어요 –

+0

HLayout에 addMember로 추가되고 있습니다. – sbhatt

관련 문제