[ 파워빌더.TreeView - 기본 ]

 

  

 
전체 아이템갯수
     li_count = Send(handle(treeview_control), 4357, 0, 0)

보이는 아이템갯수
     li_count = Send(handle(treeview_control), 4368, 0, 0)

 

Posted by 농부지기
,

[ 파워빌더.PopUp - POP or RESPONSE를 MDI 가운데로 ]

 

☞   

 

쪽지로 문의 하셔서 간단하게 올려 봅니다.

제목 그대로 mdi윈도를 따라다니도록 하는 스크립트

window open event에서 다음과 같이

//===========================================================

window lwin
hide()
post show()
lwin = ParentWindow()
if IsValid( lwin ) then
 Do While IsValid( lwin )
  if lwin.Windowtype = MDI! or lwin.Windowtype = MDIHelp! then
   exit
  end if
  lwin = lwin.ParentWindow()
 Loop
else
 This.center = true
end if
if IsValid( lwin ) then
 if lwin.width < This.width then
  This.x = lwin.x
 else
  This.x = lwin.x + ( ( lwin.width - This.width ) / 2 )
 end if
 if lwin.height < This.height then
  This.y = lwin.y
 else
  This.y = lwin.y + ( ( lwin.height - This.height ) / 2 )
 end if
end if

//===========================================================

이케하면 되고요

appeon에서는 테스트 안했습니다.

환경이 되시는분 테스트 부탁 합니다.

Posted by 농부지기
,

[ 파워빌더.PopUp - 팝업창에서 부모창에 datawindow넘기기 ]

 

 

 


1. 자식창에서 종료할때
   CloseWithReturn(This, 넘길 데이타윈도우)
 

2. 호출한 부모창에서
   datawindow ldw
    자식창 호출
   Open(자식창)
   ldw = Message.PowerObjectParm

'파워빌더 > PopUp' 카테고리의 다른 글

파워빌더.PopUp - POP or RESPONSE를 MDI 가운데로  (0) 2017.01.26
Posted by 농부지기
,

[ 파워빌더.Window - 인쇄 ]

 

 

메뉴에서 "화면인쇄" 목록만들고

Click Event에 아래와 같이 넣으시면됩니다...

활성화된 윈도우만 A4  1/2 사이즈로 인쇄됩니다.

long Job
Job = PrintOpen( )
boolean bValid
window wSheet
wSheet = w_main.GetFirstSheet()
bValid = IsValid (wSheet)
if bValid then
wSheet.Print(Job, 1000,500, 6000,4500)
end if
PrintClose(Job)

 

Posted by 농부지기
,

 

[ 파워빌더.Window - 타원형 window 만들기 ]

 

 

파워빌더에서도 API함수를 이용하면 원하는 모양의 윈도우를 만들수 있습니다. 저도한번 해봤는데, 꽤 신기하네요 ~

 

1.Gloval External Function에 다음과 같이 선언

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

  Function long CreateEllipticRgn( long lX1, long lY1, long lX2, long lY2 ) Library "gdi32.dll"
  Function long SetWindowRgn( long lHandle, long lRgn, boolean bIsRedraw ) Library "user32.dll"
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
2.윈도우 open script에 작성

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Long hRgn
hRgn = CreateEllipticRgn( 0, 0, This.Width/5, This.Height /4)
SetWindowRgn( Handle( This ), hRgn, True )
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
※ CreateEllipticRgn() 함수는 타원형 함수입니다.


기존의 딱딱하기만 한 네모 모양의 윈도우 형태를 떠나서 이렇게 시도해보는것도 재미있을 것 같네요.

디자인만 잘 한다면 괜찮은 걸 만들수도 있을 것 같아요. 예를 들면 아래 그림처럼...(하얀바탕이 네모라면.. 저런식으로 타원생성)

   

Posted by 농부지기
,

[ 파워빌더.Window - Title Bar를 가진 Window 움직임 방지  ]

 

☞   

 

먼저 해당 Window에서 User event를 설정합니다.
이름은 ue_systemcommand로 하시고, event 중 pbm_systemcommand를 선택합니다.

event 생성후에 다음과 같은 내용을 기술하여 줍니다.

----------------------------------------------------------------------------------

ulong ll_chk

ll_chk = commandtype

choose case ll_chk
case 61456, 61458
message.processed = True
message.ReturnValue = 0
end choose
----------------------------------------------------------------------------------

이렇게 하면 제목부분을 잡고 여기저기 끌고다닐 수 있었던 기능을 차단할 수 있습니다.

이건 Title Bar 없이 윈도우 부분만갖고 이동할 수 있었던 기능과 반대되는 경우에 사용 하시면 되는데요.

보통 제목부분의 내용은 필요한데 고정했으면 좋겠다싶은 윈도우가 가끔 있으실겁니다..(없으면 말구용..*-_-*)

 

이것도 마찬가지로 학교에서 프로젝트 진행했을때 종료하기이전까지 한번띄우면 그 위치에 그대로 놔두어야하는 폼이 있었는데

그게 자꾸 움직이는게 짜증나서 좌표를 아예 박아버렸었거든요.. 이렇게 이벤트로 만들어 놓으면 편하게 이용할 수 있겠죠 ?

 

Test : PowerBuilder 7.0.3 Build 10009 Version

 

Posted by 농부지기
,

[ 파워빌더.Window - Title Bar 없이 Window 움직이는 방법  ]

 

☞   

 

해당 Window의  Mouse Down Event에 다음과 같은 내용을 기술합니다.

send( handle( this ), 274, 61458, 0 )

이렇게 해주면 제목부분을 잡고 끌지않아도 윈도우부분을 잡아 이동할 수 있습니다.

Window Type - Child 로 만들었을경우에 제목부분이 없어지는데요.

이런 경우에 사용하시면 손쉽게 사용가능합니다.

 

학교에서 프로젝트 진행 할때에도 이 기능을 몰라서 child로 만든건 중앙에뜨면 그냥 그러려니하고

작업끝날때까지 다른거 건들지도 못했었는데요...T_T 아시는분 많겠지만 올려 봅니다 ~

 

Test : PowerBuilder 7.0.3 Build 10009 Version

 

Posted by 농부지기
,

[ 파워빌더.Window - 참고 ]

  

 

☞   

 


IF isvalid( window ) THEN
   form이 열렸을때
else
   form이 안열렸을때
end if
 

☞  dw에서 parent 로 최상위 윈도우명 알아내기

 

윈도우에 dw가 있으면 dw 스크립트에서 parent 는 윈도우가 됩니다.

하지만, tabpage에 dw가 있으면 parent는 tab이 됩니다.

 

이 때문에 (꼭 이것때문은 아니지만...) 우린 window 타입의 변수를 글로벌이든 instance든 선언하여..

 

해당 윈도우를 담아두는데요..

보통 윈도우 activate 이벤트에다가

  iw_win = this

 

다음과 같은 스크립트를 함수로 만들어서 사용하면 해당 오브젝트에서 parent로 최 상위 윈도우을 항상 가져올 수 있답니다.

  of_parent() 함수를 하나 만드시구요.. 리턴타입으론 window를 지정한후, 아래 스크립트를

    이용해 보세요.
    --------------------------------------------------------------------
    /*******************************
       자신을 포함하고 있는 윈도우 오브젝트를 찾는다.
    *******************************/
    graphicobject lgo_temp
    window        lw_window

    lgo_temp = Parent
    // 가장 밖에 있는 윈도우 오브젝트를 찾는다.
    DO WHILE lgo_temp.Typeof() <> window!
    /* 컨트롤을 포함하고 있는 상위오브젝트를 찾는다. - GetParent() */
        lgo_temp = lgo_temp.GetParent()
    LOOP
    lw_window = lgo_temp
    Return lw_window

Posted by 농부지기
,

[ 파워빌더.UserObject - Visible ]

 

 

☞   

 

 

1. 일반 화면에서 Visible user Object를 사용할 경우

    1. 반드시 form에  Visible User Object를 생성한다.

    2. 이때 이름을 정의한다.  (예, lo_rank )

    3. User Object를 사용할 Event나  Fuction에서   바로 lo_rank 로 해서 사용하면 됨

        - 즉,   uo_rank  lo_rank

                   lo_rank = Create uo_rank

                   를 할 필요 없음

        - non visible Object는 위 내용을 해야 되지만 visible User Object는 할 필요 없음

Posted by 농부지기
,

[ 파워빌더.Menu  - visible ]

 

 

☞   메뉴 visible, non visible 처리

 


gw_main_win.MenuID.item[3].item[01].Visible = FALSE;
 

☞  OpenSheet

 


OpenSheet ( sheetrefvar {, windowtype }, mdiframe {, position {, arrangeopen } } )
- 메뉴 아이템들은 좌측부터 번호가 부여된답니다. 1 , 2, 3, ... 0, 마지막메뉴(보통 헬프)

OpenSheet(Child_1, MDI_User, 2, Original)
  - MDI Frame MDI_user내의 Sheet child_1을 원래 크기로 오픈한다.
  - 오픈된 Sheet의 이름은 메뉴바의 두번째 메뉴아이템에 추가된다.

Posted by 농부지기
,