[ 파워빌더.파일 - 폴더 size 구하기  ]

 

 
String ls_f = "c:\test"Double size


OLEObject FSO, FSO2

FSO = CREATE OLEObject

SetPointer(Hourglass!)

ll_result = FSO.ConnectToNewObject("Scripting.FileSystemObject")
IF ll_result <> 0 THEN
        messagebox('error',ll_result)
        DESTROY FSO
        SetPointer(Arrow!)
        return
END IF


IF FSO.FolderExists(ls_f) THEN
      FSO2 = FSO.GetFolder(ls_f)

      size = FSO2.Size

Else
      DESTROY FSO
      return
End if

DESTROY FSO2

SetPointer(Arrow!)

Posted by 농부지기
,

[ 파워빌더.파일 - 폴더 ]

 

 

String ls_folder = "c:\edu"
Double ldo_folder_size
Long ll_result

OLEObject FSO, FSO2

 

FSO = CREATE OLEObject

 

SetPointer(Hourglass!)

 

ll_result = FSO.ConnectToNewObject("Scripting.FileSystemObject")

IF ll_result <> 0 THEN
 messagebox('error',ll_result)
 DESTROY FSO
 SetPointer(Arrow!)
 return
END IF


IF FSO.FolderExists(ls_folder) THEN
 FSO2 = FSO.GetFolder(ls_folder)
 ldo_folder_size = FSO2.Size
 MessageBox('', ldo_folder_size)
Else
 DESTROY FSO
 return
End if

 

DESTROY FSO2

SetPointer(Arrow!)

 

Posted by 농부지기
,

[ 파워빌더.파일 - 생성일자 ]

 

OLEObject FSO, FSO2INTEGER ll_result
string rtn

//파일존재 여부
IF NOT FILEEXISTS(as_filename) THEN RETURN 'none'

// File System OBJECT 생성
FSO = CREATE OLEObject
FSO2 = CREATE OLEObject

ll_result = FSO.ConnectToNewObject("Scripting.FileSystemObject")
IF ll_result <> 0 THEN
//messagebox('error',ll_result)
DESTROY FSO
DESTROY FSO2
RETURN 'none'
END IF

FSO2 = FSO.GetFile(as_filename)

//File System 구하기
//rtn = string(FSO2.DateCreated , 'yyyy/mm/dd-hh:mm') --> 생성일자
//rtn = string(FSO2.DateLastAccessed , 'yyyy/mm/dd-hh:mm') --> 접근일자
//rtn = string(FSO2.DateLastModified , 'yyyy/mm/dd-hh:mm') --> 수정일자
//rtn = string(FileLength(as_filename)) --> 파일크기

rtn = string(FSO2.DateLastModified, 'yyyy/mm/dd hh:mm:ss')

// File System OBJECT Destroy
DESTROY FSO
DESTROY FSO2

RETURN rtn

 

Posted by 농부지기
,

[ 파워빌더.파일 - 읽기 ]

 

// blob gf_FileRead(string as_file)

Blob  ib_file, b
integer i_fn
Long  l, l_loop
Long  l_fLen

l_fLen = FileLength(as_File)

IF l_fLen > 32765 THEN
 IF Mod(l_fLen, 32765) = 0 THEN
  l_loop = l_fLen / 32765
 ELSE
  l_loop = l_fLen / 32765 + 1
 END IF
ELSE
 l_loop = 1
END IF

i_fn   = FileOpen(as_File, StreamMode!, Read!)
FOR l = 1 to l_loop
 FileRead(i_fn, b)
 ib_file = ib_file + b
NEXT

FileClose(i_fn)

return ib_file

☞  

Posted by 농부지기
,

[ 파워빌더.Button - 동적 생성  ]

 

 

☞   

 

컨트롤버튼 동적생성 http://cafe.naver.com/pentaeduclub/5392 답변글 참고....

open 이밴트에 기술... (버튼일때는 this. 대신 parent로 하심 됩니다.)

This.setredraw(false)

CommandButton cb_7

cb_7 = CREATE CommandButton
// cb_7 = create using 'cb_6'
this.OpenUserObject(cb_7, 1842 + 100, 436 + 100) 

cb_7.resize( 500, 100 )
cb_7.visible = true
This.setredraw( True)

 

오브젝트 생성  http://cafe.naver.com/pentaeduclub/2876

 

데이타원도우/데이타스토어 동적생성  http://cafe.naver.com/pentaeduclub/5389  

질문과 답년글을 참고하시면 좋은 내용입니다. 답글에 링크도 같이 참고하시기 바랍니다..

 

원도우 형변환과 관련  http://cafe.naver.com/pentaeduclub/4962 ,  http://cafe.naver.com/pentaeduclub/4979

Posted by 농부지기
,

[ 파워빌더.Tab - tab control에서 만들었다 없앴는데도 1개가 남는 문제  ]

 

 

  설명이 어렵네요..

tab에서 탭의 수를 알아내는 방법이

int li_no
li_no = upperbound(tab_1.control)  // or upperbound(tab_1.control[])

이런식인데요

첨에는 이걸로 현재 열린 탭의 수가 몇개인지 열린탭을 모두 제거시켰을 때
제거가 되어 있는지 등 알아낼 수 있는데요

첨에는 탭은
저 li_no값이 0을 리턴합니다. 즉, 전혀 열려진 탭이 없다는 뜻이죠

근데 탭을 추가했다가 모두 비워버렸는데도

저 tab_1.control에는 1개가 존재하더라구요.
그 1개가 정상적인지 아닌지 확인하려니 확인할 길이 없어 3시간 헤맸네요

tab_1.control[1].classname()
뭐 이런걸로는 안됩니다.
isnull(tab_1.control[1]) 하면 false을 리턴하면서 null이 아니라고 알려주니
황당하더군요.

그러다가 알았는데

isvalid(tab_1.control[1])을 해 보면 false을 리턴해 줍니다.
정상적으로 tab에 1개의 오브젝트가 들어가 있다면 여기서 true을 리턴하거든요.


도움이 되셨음 좋겠습니다.

 

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

파워빌더 Tab Page 이동 하기  (0) 2017.01.26
Posted by 농부지기
,

[ 파워빌더.Picturecontrol - 클리어(초기화)  ]

 

  혹시나 싶어 적어봅니다..

PBDN 에서 찾은건데.. ㅠ.ㅠ

blob 형식의 파일을 Picturecontrol 에 setpicture로 뿌린뒤..

초기화 방법 찾으시는 분있으실까봐..

Setnull(blob 변수)

p_1.setpicture(blob 변수)

이렇게 해봤지만.. 안되더군요...

그런데..

p_1.PictureName = Space(1)

Posted by 농부지기
,

[ 파워빌더.MultiLIneEdit - 기본 ]

 

☞   

 

 

MLE에서 현재의 행위치와 컬럼의 위치를 계산 해보겠습니다.

 

/*  현재의 행과 컬럼의 위치 계산 */
il_Line = SelectedLine()
il_Column = of_getlinecolumn( il_Line )
is_line   = String(il_Line,'0000')
is_column = String(il_Column,'0000')

 

/* of_getlinecolumn ( ai_line )
 현재 행에서 위치한 컬럼의 위치
*/
Long    l_Len, l_cnt, l_loop
integer i_column, i
string  ls_line[]
l_Len = of_stringarray( ls_line )
l_loop = ai_line - 1
for i = 1 to l_loop
 l_cnt += Len( ls_line[i] )
next
i_column = Position() - l_cnt - ai_line - ai_line + 2
return i_column

/* integer of_stringarray ( ref String as_line[] )
 Line을 Line별 배열로 만든다.
 반환값은 라인의 갯수
*/

Integer li_pos, i
String   ls_text, ls_char
ls_char = '~r~n'
ls_text = Text + ls_char
li_pos  = Pos(ls_text, ls_char)
i = 0
do while li_pos > 0
 i ++
 as_line[i] = Left(ls_text, li_pos - 1)
 ls_text = mid(ls_text, li_pos + Len(ls_char) )
 li_pos  = Pos(ls_text, ls_char)
Loop

Return UpperBound(as_line)

Posted by 농부지기
,

[ 파워빌더.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 농부지기
,

[ 파워빌더.ListView - 기본 ]

 

☞   

 

오브젝트 하나 만들어 달라고 해서 만들면서 만든 함수 하나 소개 할까 합니다.

DW를 그리지 않고 DS 와 ListView를 이용하여 SQL Select 를 실행하고 결과를 보여주기 입니다.

필요없다고 생각하지 마시고 파빌을 이렇게도 사용가능하구나 하고 너그럽게...

///--------------------------------------------------------------------------------------

// long of_autolistview( listview alv_list, string as_SQL, transaction atrans )

// 반환값 : 행 갯수

// 전달값 1 : 보여질 ListView

// 전달값 2 : SQL 스크립트

// 전달값 3 : 트렌젝션
DataStore lds
Long      row, rowcnt, lpos
String    ls_tmp, ls_SQL, ls_column[], ls_DWsyntax, ls_ColType
Integer   i, li_Item
Any       la_data[]

as_sql = Upper( as_sql )
// Select 문인지 검사한다.
lpos = Pos(as_sql,'SELECT')
ls_SQL = Trim( Upper(Mid(as_sql, lpos, Len('SELECT') )) )
if ls_SQL <> Upper('SELECT') then Return 0
// 컬럼의 갯수를 파악한다.
lpos   = Pos(as_sql,'SELECT')
ls_SQL = Upper(Mid(as_sql, lpos + Len('SELECT') ))
ls_SQL = Left(ls_SQL, Pos(ls_SQL, 'FROM') - 1 )
ls_SQL = Trim(ls_SQL) + ','
lpos = Pos(ls_SQL, ',')
i = 0
Do While lpos > 0
 ls_tmp = ''
 ls_tmp = Left( ls_SQL, lpos - 1 )
 ls_SQL = Mid( ls_SQL, lpos + 1 )
 if Not ( Trim(ls_tmp) = '' or IsNull(ls_tmp) ) then
  i ++
  ls_column[i] = ls_tmp
 end if
 lpos = Pos(ls_SQL, ',')
Loop
// ListView를 컬럼 형식으로 조정한다.
alv_list.View = listviewreport! // List형식으로
alv_list.SortType = UnSorted!   // 정렬하지 않음
alv_list.ButtonHeader = true    // 제목을 버튼으로
alv_list.Hideselection = false  // 선택 사용
alv_list.FullRowSelect = true   // 행선택 사용
alv_list.FaceName = '굴림'
alv_list.TextSize = 12
// 파악한 컬럼을 가지고 ListView 컬럼을 만들과 변수를 초기화 한다.
For i = 1 to UpperBound(ls_column)
 alv_list.AddColumn(ls_column[i], Left! , 800)
 la_data[i] = ''
Next
// 자료를 조회 한다.
lds = Create DataStore
ls_SQL = as_sql
ls_DWsyntax = atrans.SyntaxFromSQL(ls_SQL, "style(type=grid)", ls_SQL)
lds.Create ( ls_DWsyntax )
lds.SetTransObject( atrans )
rowcnt = lds.Retrieve()

// 조회된 값을 넣는다.

alv_list.SetRedraw(false)

alv_list.DeleteItems()
for row = 1 to rowcnt

 for i = 1 to UpperBound(ls_column)
  // Column Type 에 따른 값읽기
  ls_ColType = Lower ( ls_column[i]+'.ColType' )
  ls_ColType = lds.describe(ls_ColType)
  if Pos(ls_ColType,'(') > 0 then
   ls_ColType = Left(ls_ColType, Pos(ls_ColType,'(') - 1)
  end if
  choose case ls_ColType
   case 'decimal' ;la_data[i] = lds.GetItemDecimal (row,i)
   case 'char'  ;la_data[i] = lds.GetItemString  (row,i)
   case 'date'  ;la_data[i] = lds.GetItemDate    (row,i)
   case 'time'  ;la_data[i] = lds.GetItemTime    (row,i)
   case 'datetime';la_data[i] = lds.GetItemDateTime(row,i)
   case else  ;la_data[i] = lds.GetItemNumber  (row,i)  //'number', 'long', 'real'
  end choose
  if i = 1 then
   // 첫컬럼이면 행추가
   li_Item = alv_list.AddItem(String(la_data[i]), 1)
  else
   alv_list.SetItem(li_Item, i, String(la_data[i]))
  end if
 Next
next

alv_list.SetRedraw(true)
DESTROY lds

return rowcnt

 

Posted by 농부지기
,