[ 파워빌더.Window - Timer ]

 

☞   

  Timer는 Window에 있는 기능이죠.

X초가 지나면 Timer 이벤트를 실행시켜라..

API로도 있죠. 1/1000초 단위로 컨트롤 해주는.
FUNCTION ULONG SetTimer(long hwnd, ULONG nIDEvent, ULONG elapse, long zero) LIBRARY "USER32.DLL"FUNCTION BOOLEAN KillTimer(long hwnd, ULONG nIDEvent) LIBRARY "USER32.DLL"

그리고 또.. Object Timing이 있습니다.
Window에 있는 Timer랑 동일합니다.

1개를 생성해보겠습니다.
=============================================================================
forward
global type n_timing from timing
end type
end forward

global type n_timing from timing
event ue_setparent ( readonly powerobject apo_parent,  readonly string as_event )
end type
global n_timing n_timing

type variables
Protected:

powerobject ipo
string is_event
end variables

event ue_setparent(readonly powerobject apo_parent, readonly string as_event);/*-------------------------------------------------------
오브젝트명  : n_timing
이  벤  트  : ue_setParent
비      고  : 2007.07.29  By JH
-------------------------------------------------------*/
ipo = apo_parent
is_event = as_event
end event

on n_timing.create
call super::create
TriggerEvent( this, "constructor" )
end on

on n_timing.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

event timer;/*-------------------------------------------------------
오브젝트명  : n_timing
이  벤  트  : Timer
비      고  : 2007.07.29  By JH
-------------------------------------------------------*/
IF ISVALID(ipo) THEN
ipo.TriggerEvent(is_event)
END IF
end event
=============================================================================

Timing Object 를 상속받는 n_timing Object이죠.

n_timer.Start(Integer Num) : Num 초 주기로 Timer를 발생시킨다.
n_timer.Stop() : Timer 구동 중지
n_timer.ue_setparent(Object, Event ID) : 정해진 시간 이후에 Object의 Event를 호출한다.

Non-Visual Object 이기 때문에 Object내에서 사용하시려면
Instance로 사용하셔야 합니다.

PB 특성상 Event 또는 Function이 끝나면 그 안에 선언된 변수 메모리는 반환(자동 소멸)되니까요.

수고하세요

 

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 농부지기
,