Jumat, 26 Februari 2010

Cara mendapatkan DBMS, User database melalui ODBC

/*Buat external function*/
FUNCTION integer SQLGetInfo (long hconn, integer infotype, ref string infotypeptr, integer bufferlength, ref integer bufferlengthptr) LIBRARY "odbc32.dll"

/*Buat script*/
string ls_dbms, ls_database, ls_user
integer li_length

CONSTANT integer SQL_DBMS_NAME = 17
CONSTANT integer SQL_DATABASE_NAME = 16
CONSTANT integer SQL_USER_NAME = 47

long ll_dbhandle

ls_dbms = space(256)
ls_database = space(256)
ls_user = space(256)
ll_dbhandle = SQLCA.DbHandle()

SQLGetInfo(ll_dbhandle, SQL_DBMS_NAME, ls_dbms, 255, li_length)
SQLGetInfo(ll_dbhandle, SQL_DATABASE_NAME, ls_database, 255, li_length)
SQLGetInfo(ll_dbhandle, SQL_USER_NAME, ls_user, 255, li_length)

MessageBox("Current DBMS" , trim(ls_dbms))
MessageBox("Current DATABASE" , trim(ls_database))
MessageBox("Current USER" , trim(ls_user))

Mengganti huruf pertama menjadi kapital

Semisal kita mempunyai inputan data "luv piyut" dan kita ingin data inputan tersebut menjadi "Luv Piyut" maka kita bisa menggunakan fungsi WordCap() seperti tips berikut :

String ls_nama,ls_hasil

ls_nama = "luv piyut"

ls_hasil = dw_1.Describe ( "Evaluate('WordCap(~"" + ls_nama + "~")',0)")

Silahkan lihat hasilnya...:)

Menentukan lama waktu execute sebuah script

Untuk menguji lama waktu yang diperlukan dalam meng-execute sebuah potongan script kita bisa menggunakan fungsi CPU()

Long ll_start,ll_waktu

ll_start = CPU()

/*
** Script yang diexecute
*/

ll_waktu = CPU() - ll_start

Menentukan Nilai RGB

Program Contoh dibawah ini akan menggunakan funsi MOD untuk memisahkan warna merah, biru dan hijau

1. Buat aplikasi baru dalam Powerbuilder
2. Buat window baru
3. Tambahkan Control Commandbutton dan StaticText pada window
4. Tambahkan script berikut pada event Commandbutton Click()

Long c, gc
Integer R, G, B

C= st_1.BackColor
gc = rgb(0,1,0)
R = Mod(c, gc)
C = C / gc
G = Mod(c, gc)
C = C / gc
B = Mod(c, gc)

MessageBox ( "Nilai RGB", "Merah =" + String (R) + 'Green = "+ String (G) +" Blue = "+ String (B))

Jalankan program sampel dan klik tombol.
Sebuah pesan akan muncul yang menunjukkan nilai-nilai merah, hijau dan biru yang mewakili StaticText properti BackColor.

Membaca file lebih besar dari 32.765 bytes

Fungsi FileRead terbatas dalam membaca file hanya sampai 32.765 bytes saja, hal ini bisa diatasi

blob lbl_data
blob lbl_temp
long ll_file

ll_file = Fileopen("mybigfile.txt",streammode!)

DO WHILE FileRead(ll_file,lbl_temp) > 0
lbl_data += lbl_temp
LOOP

FileClose(ll_file)

Menampilkan atau menyembunyikan Desktop dan Taskbar

Beberapa aplikasi mengharuskan pengguna tidak dapat mengakses taskbar atau desktop ketika menjalankan aplikasi kita. Kami akan memblokir akses ke taskbar atau desktop dengan memanggil Windows API.

//Deklarasikan 2 Function berikut :

Function long FindWindowExA ( long hWnd, long hWndChild, ref string lpszClassName, ref string lpszWindow) library "user32"
Function long ShowWindow (long hWnd, long nCmdShow ) library "user32"

//Tambahkan script berikut :

//Konstanta untuk ShowWindow()
Constant Long SW_HIDE = 0
Constant Long SW_NORMAL = 1
Constant Long SW_SHOWMINIMIZED = 2
Constant Long SW_SHOWMAXIMIZED = 3
Constant Long SW_SHOWNOACTIVATE = 4
Constant Long SW_SHOW = 5
Constant Long SW_MINIMIZE = 6
Constant Long SW_SHOWMINNOACTIVE = 7
Constant Long SW_SHOWNA = 8
Constant Long SW_RESTORE = 9
Constant Long SW_SHOWDEFAULT = 10
--------------------------------------------------------

//Mencari nama Windows Shell
String ls_ShellViewWnd = "Progman"
String ls_ShellTaskBarWnd = "Shell_TrayWnd"
String ls_Null

// Local
Long ll_HTaskBar, ll_HDeskTop

// Hide Taskbar
ll_HTaskBar = FindWindowExA( 0, 0, ls_ShellTaskBarWnd, ls_Null )
ShowWindow( ll_HTaskBar, SW_HIDE )

// Hide Desktop
ll_HDeskTop = FindWindowExA( 0, 0, ls_ShellViewWnd, ls_Null )
ShowWindow( ll_HDeskTop, SW_HIDE )

// Tunda untuk memulihkan
MessageBox( 'Pause', 'Lihat Perbedaannya !' )

// Show Taskbar
ll_HTaskBar = FindWindowExA( 0, 0, ls_ShellTaskBarWnd, ls_Null )
ShowWindow( ll_HTaskBar, SW_SHOW )

// Show Desktop
ll_HDeskTop = FindWindowExA( 0, 0, ls_ShellViewWnd, ls_Null )
ShowWindow( ll_HDeskTop, SW_SHOW )

Membuat Function tanggal akhir bulan

1. Buat argument ad_date dengan tipe Date
2. Pilih Return tipe nya dengan tipe data Date
2. Buat script berikut

int li_retdays, li_month, li_year

li_month = Month(ad_date)
li_year = year(ad_date)

IF li_month < 12 THEN
li_month ++
ELSE
li_month = 1
li_year ++
END IF

// Membuat tanggal awal
ld_newdate = date(li_year),li_month,1)

// membuat tanggal akhir
ld_previousMonthLastDay = day(relativedate(ld_newdate, -1))

Return(ld_previousMonthLastDay)

Mendeteksi Versi Powerbuilder

String ls_PBver
Environment env

GetEnvironment(env)

ls_PBver = string(env.pbmajorrevision) + '.' + string(env.pbminorrevision) + '.' + string(env.pbfixesrevision)

Membuat List Printer yang terinstal dengan Listbox

Dalam tips ini kita akan membuat list printer yang terinstal didalam komputer dengan menggunakan LISTBOX

STRING ls_printers[]
INT li_rtn, i, li_nbPrinters

li_rtn = RegistryKeys("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers", ls_printers)
li_nbPrinters = UpperBound(li_printers)

FOR i = 1 TO li_nbPrinters
lb_1.addItem(ls_printers[i])
NEXT

Merubah List Datawindow ke Grid Datawindow atau sebaliknya

1. Ekspor Datawindow
2. Edit datawindow yang telah kita ekspor tersebut
3. Cari "Processing ="
4. Untuk membuat DW List menjadi Grid, ubah Processing=1
5. Untuk membuat DW list menjadi normal atau non-grid, ubah Processing=0

Membuat Datawindow Secara Dinamis

String ls_select,ls_where,ls_dwsyntax,ls_err

ls_select = "Select id, fname, lname, address, city, state, zip from customer"
ls_where = " where customer.fname like '" + is_cust + "%'"
ls_dwsyntax = SQLCA.SyntaxFromSQL ( ls_select, "Style(Type=grid)", ls_err )

dw_1.Create ( ls_dwsyntax, ls_err )

IF ls_err <> '' THEN
MessageBox ( "error - Syntax", ls_err )
ELSE
dw_1.SetTransObject ( SQLCA )
dw_1.Retrieve()
END IF

Ubah warna berganti-ganti baris pada datawindow

Untuk baris pada datawindow memiliki penampilan kertas printer menambahkan Expresi berikut dalam Color detail band.

IF (Mod(GetRow(),2)=0, RGB(0,255,0), RGB(255,255,255))


Warna latar belakang ini tidak muncul ketika Anda mencetak laporan.
Jika Anda ingin mencetak efek ini anda harus menambahkan sebuah persegi panjang atau kolom teks kosong di belakang kolom detail dan meletakkan pernyataan di atas.

Tambahkan event Timer kontrol standar

Apakah Anda tahu bahwa Anda dapat menambahkan Event Timer PowerBuilder kontrol visual?

Pertama memetakan sebuah event Timer event pbm_Timer.
Kemudian tambahkan panggilan API berikut:

Function Long SetTimer(Long hwnd, Long IdTimer, Long uTimeOut, Long tmpre) Library "user32.dll"
Function Long KillTimer(Long hwnd, Long IdEvent) Library "user32.dll"

Untuk mengontrol, gunakan perintah berikut bukan Timer ().

SetTimer(Handle(the_control), 1, 500, 0) // 500 adalah jumlah milidetik, atau setiap setengah detik
KillTimer (Handle(the_control), 1) / / Untuk Timer.

Sabtu, 20 Februari 2010

Function Center Window

Membuat Tampilan window agar berada ditengah-tengah layar monitor

1. Buat Variable Global pada Declare Global Variables :

Long ScreenWidth, ScreenHeight



2. Buat Nama function misalkan dengan nama f_center

3. Pilih dengan tipe data argumen :window dan nama argumen tersebut a_window

4. pilih tipe data return : integer



5. Ketik Script Dibawah ini :


Environment le_Env
Integer li_ScreenH, li_ScreenW


GetEnvironment(le_Env)


li_ScreenH = PixelsToUnits(le_Env.ScreenHeight, YPixelsToUnits!)
li_ScreenW = PixelsToUnits(le_Env.ScreenWidth, XPixelsToUnits!)

a_window.Y = (li_ScreenH - a_window.Height) / 2
a_window.X = (li_ScreenW - a_window.Width) / 2
a_window.SetPosition(Topmost!)

return 1

6. Untuk Syntax pemanggilan function ini f_center(nama_window) pada saat event open()

7. Selamat Mencoba!!

Function Encrypt & Decrypt

[function string of_encrypt(as_str)]
integer i, j
string ls_enctext = ""
CONSTANT string CRYPT_KEY = "$#@%&#%@&*"

j = len(as_str)
FOR i = 1 TO j
ls_enctext += mid(CRYPT_KEY , mod(i,10) + 1, 1)
ls_enctext += String(Char(255 - Asc(Mid(as_str, i, 1))))
NEXT

RETURN ls_enctext
======================================================
[function string of_decrypt(as_str)]
integer i, j
string ls_encchar, ls_temp, ls_unasstr = "** Encryption Error"
boolean lb_ok = true
CONSTANT string CRYPT_KEY = "$#@%&#%@&*"

j = len(as_str)

IF NOT Mod(j, 2) = 1 THEN
ls_temp = ""
FOR i = 2 TO (j + 1) STEP 2
ls_encchar = Mid(as_str, i - 1, 1)
IF mid(CRYPT_KEY, Mod(i / 2, 10) + 1, 1) <> ls_encchar THEN
lb_ok = FALSE
EXIT
END IF
ls_encchar = Mid(as_str, i, 1)
ls_temp += string(char(255 - asc(ls_encchar)))
NEXT
END IF

IF lb_ok THEN ls_unasstr = ls_temp

RETURN LS_UNASSTR
=======================================================