Selasa, 14 April 2015

Membatasi Aplikasi yang Running hanya satu

Berikut ini adalah tips untuk membatasi user dalam menjalankan aplikasi, Hal ini guna mencegah agar user hanya menjalankan aplikasi cuma satu saja.

Berikut step by stepnya :

  • Klik "NEW
  • Pilih Tab "Pb Object" kemudian pilih "CUSTOM CLASS"
Custom Class
  • Set Properties AutoInstantiate menjadi TRUE

  • Deklarasikan  Win32 API modul pada  UserObject  -> Local External Functions
Function Long GetLastError () Library 'kernel32.dll'
Function ULong CreateMutex (ULong lpsa, Boolean fInitialOwner, String lpszMutexName) Library 'kernel32.dll' Alias for CreateMutexA
  • Buat UserObject Function seperti dibawah ini :

String ls_name
If Handle(GetApplication()) > 0 Then
   ls_name = GetApplication().AppName + Char(0)
   CreateMutex(0, True, ls_name)
   If GetLastError() = 183 Then Return True
End If
Return False
  • Simpan user object yang dibuat dengan nama uo_limitrun (sebagai contoh)
  • Untuk mengunakan object tersebut, copy script dibawah ini pada event open pada form aplikasi.

uo_limitrun lou_limitrun
If lou_limitrun.uf_isrunning() Then
  MessageBox ('Warning', 'Application is already running', StopSign!)
  HALT CLOSE
End If
//...
// Your next line code
//...

Senin, 14 April 2014

Konversi Hexadecimal to Decimal

Wah Sudah lama tidak nulis2 diblog...

Kali ini saya akan menulis sebuah function untuk mengkonversi bilangan Hexadecimal ke Decimal
berikut ini adalah langkah2nya :

1. Buat New Function dengan function name "F_Hex2Dec "
2. Isi Return Type dengan "long"
3. Isi Argument Type dengan "string" dan Argument Name dengan "as_Hex "
4. Tuliskan powerscript dibawah ini
5. Selamat mencoba...

/**********************************************/
/*  public long F_Hex2Dec ( string as_Hex )  */
/**********************************************/

CONSTANT STRING ls_HexSet = "0123456789ABCDEF"

STRING  ls_Hex, ls_Bit
LONG    ll_RetVal = 0
INTEGER li_C, li_Len, li_Pos
BOOLEAN lb_Error = FALSE

ls_Hex = Upper( as_Hex )

IF NOT IsNull( ls_Hex ) AND ls_Hex <> "" THEN
   
    li_Len = Len( ls_Hex )
   
    FOR li_C = 1 TO li_Len
        ls_Bit = Mid( ls_Hex, li_C, 1 )
        li_Pos = Pos( ls_HexSet, ls_Bit )
       
        IF li_Pos = 0 THEN
            lb_Error = TRUE
        ELSE
            ll_RetVal += ( ( li_Pos - 1 ) * ( 16 ^ ( li_Len - li_C ) ) )
        END IF
    NEXT
    IF lb_Error THEN ll_RetVal = 0
END IF

RETURN ll_RetVal


Minggu, 02 Juni 2013

Membuat Koneksi Powerbuilder ke Database SQLITE

Singkat saja, dalam tulisan ini saya mencoba membuat koneksi POWERBUILDER ke database SQLITE, berikut script yang ditulis didalam event open :

//===============================================
string ls_dbparm, ls_dbfile, ls_exepath, ls_file[]

ls_dbfile = 'sqlite_db_test.db3'

IF Fileexists(ls_dbfile) THEN
    // do nothing
ELSE
    IF GetFileOpenName('Select Data File',ls_dbfile, ls_file,'db3','SQLite files (*.db3),*.db3') < 1 THEN
        Messagebox('No Data File Chosen','Application will close')
        HALT CLOSE
    END IF
END IF
// SQLite connection
ls_dbparm = "ConnectString='"
// Driver installed with SQLite2009 Pro Enterprise Manager
ls_dbparm = ls_dbparm + "DRIVER=SQLite3 ODBC Driver;"
ls_dbparm = ls_dbparm + "Database=" + ls_dbfile + "'"
ls_dbparm = ls_dbparm + "UID=" + "admin" + ";PWD="
ls_dbparm = ls_dbparm +  "'"
sqlca.DbParm=ls_dbparm

sqlca.DBMS = "ODBC"

CONNECT USING SQLCA;

IF sqlca.sqlcode <> 0 then
MessageBox('Connect', 'Transaction not connect..'+sqlca.sqlerrtext,stopsign!)
Return
End IF

//============================================
Sekian dulu tulisan saya, semoga bisa membantu

Terima Kasih.

Rabu, 16 Januari 2013

Konversi Hex Ke Binary

Kali ini saya ingin membuat beberapa FUNCTION untuk mengkonversi bilangan HEX ke dalam bentuk Binary secara sederhana

1. Buat New Function dengan function name "f_hex_to_bin"
2. Isi Return Type dengan "string"
3. Isi Argument Type dengan "string" dan Argument Name dengan "as_param_hex"
4. Tuliskan powerscript dibawah ini
5. Selamat mencoba...

integer i,li_length
string ls_param_hex,ls_hex,ls_binary,ls_huruf

ls_param_hex = trim(as_param_hex)

li_length = len(ls_param_hex)

for i = 1 to li_length

ls_huruf = Mid(ls_param_hex, i,1)

choose case ls_huruf
case '0'
ls_binary = '0000'
case '1'
ls_binary = '0001'
case '2'
ls_binary = '0010'
case '3'
ls_binary = '0011'
case '4'
ls_binary = '0100'
case '5'
ls_binary = '0101'
case '6'
ls_binary = '0110'
case '7'
ls_binary = '0111'
case '8'
ls_binary = '1000'
case '9'
ls_binary = '1001'
case 'A'
ls_binary = '1010'
case 'B'
ls_binary = '1011'
case 'C'
ls_binary = '1100'
case 'D'
ls_binary = '1101'
case 'E'
ls_binary = '1110'
case 'F'
ls_binary = '1111'
end choose

ls_hex = ls_hex + ls_binary

next

return ls_hex

Lain kali saya akan coba untuk membuat function2 yang semoga bisa bermanfaat untuk para penggemar PB.

Rabu, 17 Oktober 2012

Kumpulan Script Membuat 3D di PB 12.5 .NET dengan HELIX 3D TOOLKIT

Berikut kumpulan2 script dalam membuat aplikasi WPF 3D di Powerbuilder 12.NET, sebelum membuatnya ada baiknya anda download dulu komponen helix 3D toolkit disini
Selanjutnya add Reference file2 dll nya :
1. 3DTools.dll
2. HelixToolkit.Wpf.dll
3. HelisToolkit.Wpf.Input.dll

XAML :

 xmlns:helix="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"


<helix:HelixViewport3D Name="viewport3D"
InfoBackground="White"
Background="Transparent"
IsHeadLightEnabled="True"
InfiniteSpin="True"
CameraRotationMode="Turnball">
          <helix:HelixViewport3D.Camera>
                  <PerspectiveCamera Position="40,0,0"
LookDirection="-40,0,0"
UpDirection="0,0,9"
FieldOfView="61"
NearPlaneDistance="0.125"
FarPlaneDistance="Infinity" />
        </helix:HelixViewport3D.Camera>
            <helix:SunLight />
      </helix:HelixViewport3D>

       

SCRIPT :
1. Create Viewport3D dari Script
HelixToolkit.Wpf.HelixViewport3D viewport3D
viewport3D = create HelixToolkit.Wpf.HelixViewport3D
viewport3D.InfoBackground = System.Windows.Media.Brushes.Transparent
viewport3D.ZoomExtentsWhenLoaded = True
viewport3D.IsHeadLightEnabled = True
viewport3D.InfiniteSpin = True
viewport3D.Background = System.Windows.Media.Brushes.Transparent
viewport3D.CameraRotationMode = HelixToolkit.Wpf.CameraRotationMode.Turnball!

1. Memanggil File 3DS

HelixToolkit.Wpf.FileModelVisual3D iFile3D
iFile3D = Create HelixToolkit.Wpf.FileModelVisual3D
iFile3D.Source = "Files3D\heart.3DS"
viewport3D.Children.Add(iFile3D)

2. Rotate Object 3DS

System.Nullable lnull1,lnull2

lnull1 = create System.Nullable(1)
lnull2 = create System.Nullable(361)

System.Windows.Media.Animation.DoubleAnimation myAnimation
myAnimation = create System.Windows.Media.Animation.DoubleAnimation
myAnimation.From = lnull1
myAnimation.To = lnull2
myAnimation.Duration = create System.Windows.Duration(System.TimeSpan.FromMilliseconds(5000))
myAnimation.RepeatBehavior = System.Windows.Media.Animation.RepeatBehavior.Forever

System.Windows.Media.Media3D.Vector3D lvector3D
lvector3D = Create System.Windows.Media.Media3D.Vector3D(0, 0, 1)

System.Windows.Media.Media3D.AxisAngleRotation3D AxisAR3D
AxisAR3D = Create System.Windows.Media.Media3D.AxisAngleRotation3D(lvector3D,1)

System.Windows.Media.Media3D.RotateTransform3D myRotateTransform
myRotateTransform = Create System.Windows.Media.Media3D.RotateTransform3D(AxisAR3D)

myRotateTransform.Rotation.BeginAnimation(System.Windows.Media.Media3D.AxisAngleRotation3D.AngleProperty, myAnimation)

iFile3D.Transform = myRotateTransform

3. Menghentikan Rotate
System.Windows.Media.Media3D.RotateTransform3D myRotateTransform
myRotateTransform = Create System.Windows.Media.Media3D.RotateTransform3D

myRotateTransform.Rotation.Freeze()

iFile3D.Transform = myRotateTransform

4. Converting Warna

string ls_warna

ls_warna = '1'

choose case ls_warna
CASE '1'
ls_warna = '#2F3699'
CASE '2'
ls_warna = '#9DDA4E'
case '3'
ls_warna ='#00B7EF'
case '4'
ls_warna = '#000000'
case '5'
ls_warna = '#ED1C24'
case else
ls_warna = '#FFFFFF'
end choose

System.Windows.Media.BrushConverter lconverter
lconverter = create System.Windows.Media.BrushConverter

System.Windows.Media.Brush lbrush
lbrush = lconverter.ConvertFromString(ls_warna)

4. Menambahkan Object ke Viewport

HelixToolkit.Wpf.SphereVisual3D Sphere3D[1]
Sphere3D[1] = create HelixToolkit.Wpf.SphereVisual3D
Sphere3D[1].Radius = 2
Sphere3D[1].Center = p3
Sphere3D[1].Fill = lbrush
viewport3D.Children.Add(Sphere3D[1])

5. Merubah posisi Camera
System.Windows.Media.Media3D.PerspectiveCamera myPCamera
myPCamera = create System.Windows.Media.Media3D.PerspectiveCamera
myPCamera.NearPlaneDistance = 1
myPCamera.FieldOfView = 61
myPCamera.Position = Create System.Windows.Media.Media3D.Point3D(180,0,0)
myPCamera.LookDirection = Create System.Windows.Media.Media3D.Vector3D(-180,0,0)
myPCamera.UpDirection = create System.Windows.Media.Media3D.Vector3D(0, 0, 9)
viewport3D.Camera = myPCamera

6. Mencapture Viewport ke dalam Picture

System.Windows.Rect rect
rect = create System.Windows.Rect

rect.Height = view_3D.Viewport.ActualHeight
rect.Width  = view_3D.Viewport.ActualWidth

// Scale dimensions from 96 dpi to 600 dpi.
double scale

scale = 600 / 96

integer li_pixelWidth,li_pixelHeight

li_pixelWidth = integer(scale * (rect.Width + 1))
li_pixelHeight= integer(scale * (rect.Height + 1))

System.Windows.Media.Imaging.RenderTargetBitmap renderbitmap
renderbitmap = create System.Windows.Media.Imaging.RenderTargetBitmap(li_pixelWidth,li_pixelHeight,scale * 96,scale * 96, System.Windows.Media.PixelFormats.Default)
 
renderbitmap.Render(viewport3D)
 
    // set ke picture

p_1.Source = renderbitmap

//Jika ingin save ke File sekalian buat directorynya

string l_directori

l_directori = "C:\Temp_image\"

if System.IO.Directory.Exists(l_directori) then
l_directori = "C:\Temp_image\"
else
System.IO.Directory.CreateDirectory(l_directori)
end if

System.Windows.Media.Imaging.PngBitmapEncoder image
image = create System.Windows.Media.Imaging.PngBitmapEncoder

image.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(renderbitmap))

System.IO.Stream fs
fs = System.IO.File.Create(l_directori+"NamaFile.png")
image.Save(fs)


7. Save Viewport3D ke File
System.Windows.Controls.PrintDialog dlg
dlg  = create System.Windows.Controls.PrintDialog

if dlg.ShowDialog().GetValueOrDefault() = true then
dlg.PrintVisual(viewport3D.Viewport,"TEST")
end if

Sabtu, 23 Juni 2012

Mapping Type Data Powerbuilder 12.5 .NET dengan C#

Berikut mapping tipe data pada Powerbuilder 12.5 .Net dengan C#


PowerBuilderC#
booleanbool
boolean[]bool[]
blobbyte[]
blob[]byte[][]
bytebyte
byte[]byte[]
intshort
int[]short[]
uintushort
uint[]ushort[]
longint
long[]int[]
ulonguint
ulong[]uint[]
longlonglong
longlong[]long[]
decimaldecimal
decimal[]decimal[]
realfloat
real[]float[]
doubledouble
double[]double[]
stringstring
string[]string[]
User-defined structureclass
User-defined structure[]class [] *
User-defined NVO objectclass
User-defined NVO object[]class [] *
enumeratedenum
enumerated[]enum[]
TimeDateTime
Time[]DateTime[]
DateDateTime
Date[]DateTime[]
DatetimeDateTime
Datetime[]DateTime[]
anyNot supported
Multidimension arrayNot supported
PB system structureNot supported
PB system object typeNot supported
PB system nvo typeNot supported
User-defined non-NVO objectNot supported
ResultSet and its descendantsNot supported
Returning anyArray type
Dot Net serializable type (with Serializable or DataContract attributes)Dot.Net serializable type
Dot Net primitive typeDot Net primitive type

Sumber : http://www.displacedguy.com/powerbuilder-12-5-net-and-net-4-data-type-mappings/#.T-ZGjhce6EY 


Powerbuilder 12.5 NET WPF Ribbon (Bag. 2)

Mari kita lanjutkan membuat aplikasi ribbon dengan powerbuilder 12.5 .NET yang memakai WPF Window,

  • Menambahkan Folder Image dengan cara klik kanan pada "Target", pilih "New Folder" dan kita beri nama new folder tersebut "Image", selanjutnya kita klik kanan pada folder image untuk menambahkan image yang kita inginkan dengan memilih "Add Existing Item"


sebagai contoh ambil image yang ada di oddysey 


selanjutnya kita lihat hasilnya sebagai berikut :


  • Selanjutnya Buka w_ribbonpad.xaml sesuaikan dengan script berikut


<pbwpf:Window x:Class="RibbonDemo.w_ribbonpad" x:ClassModifier="internal" 
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
              xmlns:pbwpf="clr-namespace:Sybase.PowerBuilder.WPF.Controls;assembly=Sybase.PowerBuilder.WPF.Controls" 
              PBTitle="RibbonPad" PBHeight="2000" PBWidth="2500" MinBox="True" MaxBox="True" TitleBar="True" 
              xmlns:odc="clr-namespace:Odyssey.Controls;assembly=Odyssey" PBWindowState="Maximized" 
              ControlMenu="True" pbwpf:Window.Skin="ExpressionDark" Uid="6" Height="500" Width="547">
    <DockPanel RenderOptions.BitmapScalingMode="HighQuality">
        <odc:RibbonBar x:Name="ribbonBar" Title="RibbonPad" DockPanel.Dock="Top" Foreground="White">
            <odc:RibbonBar.QAToolBar>
                <odc:RibbonQAToolBar>
                    <odc:RibbonButton SmallImage="image/save16.png" Name="office_blue" />
                    <odc:RibbonButton SmallImage="image/undo16.png" Name="win7" />
                    <odc:RibbonButton SmallImage="image/delete16.png" Name="office_silver" />
                    <odc:RibbonButton SmallImage="image/folder16.png" Name="office_black" />
                </odc:RibbonQAToolBar>
            </odc:RibbonBar.QAToolBar>
            <odc:RibbonBar.ApplicationMenu>
                <odc:RibbonApplicationMenu MenuButtonImage="image/favorites16.png">
                    <odc:RibbonApplicationMenu.RecentItemsList>
                        <TextBlock Text="This is a Placeholder for recent documents" Margin="3" 
      HorizontalAlignment="Center" VerticalAlignment="Top" MinHeight="150" 
      TextWrapping="Wrap" MinWidth="100" />
                    </odc:RibbonApplicationMenu.RecentItemsList>
                    <odc:RibbonApplicationMenu.Footer>
                        <StackPanel HorizontalAlignment="Stretch" Margin="0,4,0,0"></StackPanel>
                    </odc:RibbonApplicationMenu.Footer>
                </odc:RibbonApplicationMenu>
            </odc:RibbonBar.ApplicationMenu>
            <odc:RibbonTabItem Title="File">
                <odc:RibbonGroup Title="Skin" Image="image/home16.png" IsDialogLauncherVisible="True">
                    <odc:RibbonToggleButton Content="Search" odc:RibbonBar.MinSize="Large" 
     LargeImage="image/search32.png"/>
                    <odc:RibbonSeparator />
                    <odc:RibbonButton Content="Windows 7" odc:RibbonBar.MinSize="Large" 
     SmallImage="image/save16.png" LargeImage="image/Save32.png" />
                    <odc:RibbonButton Content="Office Blue" odc:RibbonBar.MinSize="Medium" 
     SmallImage="image/home16.png" LargeImage="image/home32.png" />
                    <odc:RibbonButton Content="Office Silver" odc:RibbonBar.MinSize="Medium" 
     SmallImage="image/paste16.png" LargeImage="image/paste32.png" />
                    <odc:RibbonButton Content="Office Black" odc:RibbonBar.MinSize="Medium" 
     SmallImage="image/folder16.png" LargeImage="image/folder16.png" />
                </odc:RibbonGroup>
            </odc:RibbonTabItem>
        </odc:RibbonBar>
    </DockPanel>
</pbwpf:Window>

  •  Double klik pada target dan ketikan script "open(w_ribbonpad)"

  • Tambahkan script ini Odyssey.Controls.Classes.SkinManager.SkinId = Odyssey.Controls.Classes.SkinId.OfficeBlack! pada event open di w_ribbonpad 



  • Klik Run

Selamat Mencoba....

Jumat, 22 Juni 2012

Powerbuilder 12.5 NET WPF Ribbon (Bag. 1)


Kali ini saya mencoba membuat tutorial untuk membuat aplikasi WPF Ribbon dengan PowerBuilder 12.5 .NET secara sederhana yang menggunakan komponen Odyssey WPF Controls yang bisa anda download disini  http://odyssey.codeplex.com/

Mari Kita mulai :


  • Buat New Solution dengan nama “WPFRibbonPad”




  • Buat Target "“wpfribbonpad"





Kemudian klik "FINISH"


  • Selanjutnya klik kanan untuk menambahkan Reference file odyssey.dll yang telah kita download  





  • Buat New WPF Window dengan mengklik kanan pada Target dan pilih NEW selanjutnya  pilih "WPF Window" kemudian klik "Next"

  • Beri nama Title window "RibbonPad" dan nama object dengan "w_ribbonpad" kemudian klik "next"

  • Pilih layout dengan type "DockPanel" kemudian klik "Finish"

  • Kemudian kita bisa melihat hasil dari Wpf Window dengan content  layout Dockpanel

Sampai disini dulu ya...akan kita lanjutkan diBagian 2



Selasa, 24 Januari 2012

Step by Step Instalasi TFS (Team Fundation Server) 2010 Sebagai Source Control Powerbuilder 12.5 .NET

Setelah Sekian lama saya vakum, ini saya coba membuat posting baru mengenai  Instalasi TFS 2010 sebagai sarana source control di PowerBuilder 12.5 .Net  karena source control nya tidak seperti PB Clasic.  Hal-hal yang perlu dipersiapkan adalah sebagai berikut

A. Instalasi Pada Komputer Server (Windows Server 2003 SP1)


B. Langkah Instalasi TFS 2010

  • Karena file TFS 2010 berbentuk ISO, maka butuh software tambahan untuk membaca ISO. Kita bisa gunakan Virtual Clone Drive atau Daemon Tools. Setelah punya software itu, mount ISO-nya TFS.
  • Di dalam drive “tambahan” setelah me-mount (aneh banget bahasanya) ISO, ada folder TFS-x64 dan TFS-x86. Pilih dan buka folder yang sesuai dengan mesin Anda. Saya pakai Windows 7 Ultimate x64, jadi saya buka folder TFS-x64.
  • Di dalam folder tersebut, double-click file yang bernama setup.exe. Kalau ada window User Account Control, klik tombol Yes tentunya. Setelah itu akan muncul window berikut  

  • Tunggu sebentar.. Setelah selesai loading, klik tombol Next. Pada halaman di bawah ini, (silahkan baca license terms terlebih dahulu kemudian) pilih I have read and accept the license terms lalu klik tombol Next.  
  • Pada halaman di bawah ini, pilih komponen yang Anda ingin install. Team Foundation Server adalah komponen utama TFS. Sedangkan Team Foundation Build Service merupakan komponen tambahan yang memungkinkan kita melakukan build secara terintegrasi (pada post yang akan datang, TFS Build akan saya bahas lebih dalam). Saya memilih untuk menginstal 2 komponen tersebut sehingga saya beri tanda centang 2 pilihan Team Foundation Server dan Team Foundation Build Service, kemudian saya klik tombol Install.
  • Tunggu beberapa saat.. silahkan membuat teh atau kopi untuk menemani Anda menunggu. 
  • Kemudian Finish
  •  Proses instalasi sudah selesai. Namun perjuangan belum berakhir. Kita harus melakukan konfigurasi terlebih dahulu agar TFS yang kita instal dapat berfungsi sesuai dengan kondisi sistem dan lingkungan kita. Dengan memastikan bahwa Anda memberi tanda centang pada pilihan Launch Team Foundation Server Configuration Tool, klik tombol Configure.
C. Konfigurasi Server TFS 2010
  •  Setelah klik tombol Configure pada akhir proses instalasi TFS 2010, maka akan muncul window berikut:
  • Perhatikan bahwa ada beberapa pilihan wizard, yaitu Basic, Advanced, Application-Tier Only, dan Upgrade. Pada setiap wizard, terdapat informasi tentang apa tujuan wizard tersebut. Pilih wizard yang paling cocok dengan kebutuhan Anda. Pada kasus ini, saya pilih wizard yang Basic. Setelah itu, klik tombol Start Wizard
  • Akan muncul halaman Welcome pada window Team Foundation Server Basic Configuration. Pada halaman ini, klik tombol Next.
  • Muncul halaman SQL Server Instance. Wizard ini tahu bahwa saya sudah punya SQL Server Express sehingga pilihan Use an existing SQL Server Instance secara otomatis sudah terpilih. Bagi Anda yang belum punya SQL Server Express, jangan khawatir, karena wizard ini akan menginstalkannya (lagi-lagi bahasa yang aneh) untuk Anda (yaitu dengan memilih pilihan Install SQL Server Express). Selanjutnya, klik tombol Next.
  •  Akan muncul halaman Review. Pada halaman ini, kita diberikan informasi tentang apa saja settingan konfigurasi yang akan dilakukan oleh wizard ini. Klik tombol Next.
  • Tunggu proses Readines Checks selesai..

  •  Setelah selesai, klik tombol Next.  
  • Finish

Untuk Selanjutnya kita tinggal melakukan Instalasi di Komputer Client, Adapun Hal2 yang perlu dipersiapkan adalah sebagai berikut :
A. Install Powerbuilder 12.5
B. Install Visual Studio Team Explorer (File Ini sudah Include didalam ISO TFS 2010 Trial yang kita download)

Setelah semua terinstall dengan aman maka selanjutnya kita lakukan setting source control pada Powerbuilder 12.5 .NET
  • Klik Tools > Options
  • pilih SourceControl > PlugIn Selection
  • pilih Source Control > Environment
  • pilih Source Control > Plug-In Setting.

  • Sekarang Powerbuilder 12.5 .NET kita sudah menggunakan Source Control TFS 2010

Selasa, 18 Mei 2010

Membuat Aplikasi GL dengan Powerbuilder 9

http://www.4shared.com/office/hsVrwShH/membuat_aplikasi_gl_dengan_pow.html?

Tips: Export Blob Ke Image Power Builder

Artikel kali ini akan memberi contoh bagaimana memanggil kembali blob dari dalam database dan menampilkan di pictue control maupun meng-export kembali menjadi file gambar.
Blob Emp_id_pic
SELECTBLOB Image
INTO :Emp_id_pic
FROM dba.t_image
WHERE “index image” = :iindex
USING SQLCA ;
integer li_FileNum, loops
long flen
li_FileNum = FileOpen(sfilename,StreamMode!, Write!, Shared!, Replace!)
SetPointer(HourGlass!)
flen = Len(Emp_id_pic)
IF flen > 32765 THEN

IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
Selanjutnya untuk meng-export kedalam file gambar dapat digunakan baris perintah berikut:
FileWritex(li_FileNum, Emp_id_pic,loops*32765) untuk PB 10.0 ke atas
FileWrite(li_FileNum, Emp_id_pic). Untuk PB 9.0 dan diakhiri dengan menutup file gambar dengan FileClose(li_FileNum)
File library / PBL dapat anda download disini. Selamat mencoba. Catatan: fungsi dalam library ini menggunakan 2 parameter yaitu sfilename bertipe string untuk namafile yang ingin kita import dan iindex bertipe integer merupakan index dari file ( bisa juga yang lain misalnya NIP atau NIM )

Sumber : http://aryodarmo.blogspot.com/2009/01/tips-export-blob-ke-image-power-builder.html

Dasar atau konsep Power Builder

Power Builder adalah sebuah development tool dengan dasar atau konsep pemrograman berorientasi objek atau Object Oriented Programming (OOP) yang memiliki karakteristik Encapsulation, Inheritance, dan Polymorphism. OOP adalah konsep yang umum dan telah di adopsi oleh banyak bahasa pemrograman modern seperti C++, Java, VBScript dan sebagainya. Teknik pemrograman pada OOP adalah bersifat modular, Berbeda dengan teknik pemrograman konvensional yang sifatnya struktural, pada OOP, sebuah modul program dipandang sebagai sebuah objek.
Encapsulation adalah karakteristik dan perilaku yang berkaitan dengan kemandirian sebuah objek. Analogi dengan makhluk hidup, sebuah objek memiliki karakteristik dan perilaku. Sebagai contoh, karakteristik yang dimiliki objek manusia adalah warna kulit, tinggi badan, berat badan, kegemaran, tingkat kecerdasan dan sebagainya. Sebagai objek yang aktif, seorang manusia berinteraksi dengan lingkungannya dengan cara beraktifitas dan merespon keadaan sekelilingnya. Dalam OOP karakteristik di istilahkan sebagai Atribut atau Properti. Perilaku diistilahkan sebagai Metode. Metode dibedakan menjadi Event dan Function.
Event adalah suatu kejadian yang dialami objek tersebut, misalnya pada contoh manusia adalah merasa lapar, sakit atau terkejut. Sedangkan Fungsi adalah tindakan yang bisa dilakukan sebuah objek, misalnya berjalan, tidur, makan dan seterusnya. Biasanya fungsi dilakukan ketika ada event yang diterima. Semua karakteristik dan perilaku tersebut dibungkus akan membentuk wujud manusia yang utuh. Properti dan Metode yang berbeda dalam keadaan terbungkus itu dikenal dengan istilah Encapsulation.

Sebuah objek adalah sebuah modul yang mandiri, artinya ia tidak memiliki ketergantungan dengan objek lain atau program utama. Dengan demikian, sebuah objek yang digunakan pada sebuah aplikasi dan dapat juga digunakan pada aplikasi lain. Agar sebuah program dapat berinterakasi dengan sebuah objek, maka kode program tersebut harus memanggil metode yang ada di dalam objek yang bersangkutan. Metode identik dengan fungsi atau event yang mengandung sebuah atau beberapa parameter. Jadi dalam hal ini sebuah program dapat mengirimkan sebuah nilai ke dalam parameter sebuah metode. Objek yang bersangkutan menerima parameter tersebut dan menjalankan aksinya. Karena kode program di dalam objek berinteraksi dengan parameter dan bukan variabel lokal atau global dari program yang memangilnya, maka objek itu mempertahankan kemandiriannya.

Istilah Inheritance memacu pada penurunan sifat sebuah objek pada objek lain. sebagai contoh, objek manusia di turunkan dari objek bernama primata karena objek ini mempunyai karakteristik yang lebih umum, yaitu makhluk hidup yang menyusui, mempunyai empat angota tubuh, bertulang belakang dan sebagainya. Istilah untuk objek turunan adalah descendent, sedangkan objek penurun atau pendahulunya adalah ancestor.
Polymorphism adalah perilaku yang berbeda-beda dari sebuah ancestor dan pada desendent-nya. Sebagai contoh kita gunakan lagi objek manusia dan kera yang masing-masing di turunkan dari objek primata yang sama. Apabila kita memanggil metode “makan”, maka kera akan mengulurkan tangannya dan memasukan makanan ke dalam mulutnya kemudian mengunyah dengan cepat-cepat. Sedangkan, jika metode yang sama di panggil dari objek manusia, maka ia akan menggerakkan tangannya untuk menyendok makanan, dan memasukkan ke dalam mulut kemudian mengunyah perlahan-lahan sambil menikmati rasanya. Jadi jelas disini bahwa kedua objek tersebut mempunyai perilaku yang berbeda untuk metode “makan”.

Sabtu, 20 Maret 2010

Cara mendapatkan Nomor Serial DISK


Pertama, Buat definisi dari fungsi API di global external function:

Function Boolean GetVolumeInformationA( &
ref String ls_Rootpath, &
ref String ls_volumnename, &
Ulong lul_VolumeNameSize, ref Ulong lul_VolumeSerialNumber, &
ref Ulong lul_MaximumComponentLength, &
ref Ulong lul_FileSystemFlags, &
ref String ls_FileSystemNameBuffer, &
Ulong lul_FileSystemNameSize &
) Library "Kernel32.dll"
 

Kedua, Buat script pemanggil dibawah ini

String ls_Rootpath, ls_volumnename
ls_Rootpath = "C:" // tentukan untuk mendapatkan nomor seri hard drive
ls_volumnename = Space(256) // mengalokasikan cukup ruang, yang sama di bawah ini
 
Ulong lul_VolumeNameSize
lul_VolumeNameSize = 256
Ulong lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags
lul_MaximumComponentLength = 256
String ls_FileSystemNameBuffer
ls_FileSystemNameBuffer = space(256)
Ulong lul_FileSystemNameSize
lul_FileSystemNameSize = 256

boolean lb_rtn
lb_rtn = False

lb_rtn = GetVolumeInformationA(ls_Rootpath, ls_volumnename, lul_VolumeNameSize, &
lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags, &
ls_FileSystemNameBuffer, lul_FileSystemNameSize)

if lb_rtn = false then
 MessageBox("Alert", "fungsi panggil gagal!")
 return
end if
sle_1.text = String(lul_VolumeSerialNumber) // / / mendapatkan nomor seri harddisk



// Sumber :http://blog.zjxu.edu.cn/zyc/readblog.asp?blogid=12&id=22

Memanggil DLL VC++ dengan Powerbuilder

A. Overview :
Dynamic link library (Dynamic-Link Library), disebut sebagai DLL, sebuah program berbasis Windows yang dirancang untuk komponen yang sangat penting. Dengan menggunakan DLL mempunyai banyak keuntungan: 


1. Penggunaan DLL tidak untuk menyalin Program tersebut, Melainkan sebagai Fungsi Entry Point dan    Interface. Apabila ada beberapa Program memanggil DLL yang sama system hanya perlu me-reload ulang DLL tersebut dimemori
2. DLL adalah sebuah program berbasis modul-modul Windows, yang tidak hanya berisi kode executable, tetapi juga dapat berisi data, berbagai sumber daya untuk memperluas penggunaan file-file library.
3. Fungsi Utama dari DLL adalah untuk mengurangi Duplikat penggunaan fungsi sehingga akan megurangi beban kerja dan sekaligus meningkatkan kinerja akses.
4. DLL memperkaya PowerScript dalam kemampuan bahasa pemrograman, Sebagai contoh: pengguna dapat menulis sistem pemrosesan gambar untuk mencari file dan disimpan dalam database, aplikasi harus menggunakan browser, tetapi dengan bahasa PowerScript tidak menyediakan fungsi untuk melakukan pekerjaan semacam itu, dalam rangka untuk memanipulasi perangkat, perlu untuk berkomunikasi dengan perangkat itu sendiri, lingkungan, lingkungan ini umumnya disediakan oleh produsen dynamic link library.
5. DLL bersifat Independen sehingga dalam lingkungan windows dimungkinkannya sebuah program memanggil fungsi DLL.

Contoh berikut menggunakan DLL untuk koneksi melalui program PowerBuilder dan VC + +.

B. Buat DLL dengan VC++ 
VC ++ 5,0 menggunakan MFC AppWizard dapat secara otomatis hasilkan Win32 DLL dan AppWizard MFC DLL, dimulai setelah VC, dari File | New item menu, pilih kotak NEW dialog , di Proyek tab, pilih  NEW PROJECT untuk MFC AppWizard (dll), masukkan PROJECT NAME pbdll, klik tombol OK, pop-up dialog box , pilih jenis DLL: Reguler DLL menggunakan MFC DLL Share, dan kemudian klik tombol Finish. AppWizard akan secara otomatis membuat sebuah DLL yang mengandung unsur-unsur dasar dari kerangka kerja, dan kemudian kita tinggal menambahkan kode secara manual.  
 
Buka file pbdll.cpp, tambahkan fungsi berikut:

extern "C" _declspec ( dllexport )
int PASCAL out_num(int x)
{
int y;
char msg[30];
y=x > >2;
sprintf(msg, "Hasil%o ! ", y);
::MessageBox(NULL, msg, "Pesan", MB_OK);
return 0;
}


 Pernyataan di atas fungsi out_num (), masukan parameter untuk nomor integer, untuk menggeser operasi, hasil perhitungan dengan kotak dialog akan ditampilkan. Kemudian buka file pbdll.def, masukkan fungsi dalam pernyataan EKSPOR out_num, file berbunyi sebagai berikut:

LIBRARY "pbdll"
DESCRIPTION pbdll Windows Dynamic Link Library 


EXPORTS
; Explicit exports can go here

out_num @ 1 

Terakhir dikompilasi dynamic link library tersebut sehingga menghasilkan pbdll.dll. 

C. Buat program PB untuk Memanggil DLL pbdll.dll
Dalam PowerBuilder untuk memanggil fungsi out_num () kode adalah sebagai berikut:

Function int out_num ( int irow ) LIBRARY "pbdll.dll"

int irow,retcode
irow=dw_1.rowcount()
retcode=out_num(irow)

Silahkan mencoba. 
Sumber asli :http://www.goalercn.com/article/article.php?id=2974

Selasa, 16 Maret 2010

MEMBUAT REPORT DATAWINDOW DENGAN QUERY UNION

Untuk membuat report Union di datawindow  ada beberapa
cara:
Cara pertama : yaitu dengan mengetikan query sql yang
menggunakan Union pada sql syntax di datawindow
Cara kedua : dengan menggunakan tools design union
berikut saya akan coba berikan langkah-langkah pembuatan
datawindow dengan cara kedua

Asumsikan kita mempunyai 2 buah tabel yang akan ditampilkan
kedalam sebuah report datawindow.

1. TABEL PELANGGAN
Kode Nama Alamat Telp
P001 Mr. Yandi Jakarta 021-55252214
P002 Mr. Azis Jakarta 021-52541444
P003 Mr. Jony Jakarta 021-85285142

2. TABEL SUPLIER
Kode Nama Alamat Telp
S001 Tuan Agus Jakarta 021-88888871
S002 Tuan Abdul Jakarta 021-65258524
S003 Tuan Rahmat Jakarta 021-78554125
Langkah-Langkah :

1. Pilih New > Tabular

2. Pilih SQLSelect

3. Pilih Table PELANGGAN

4. Pilih COMPUTE COLUMNS
5. Kemudian klik kanan pada kolom tersebut dan pilih Column
setelah itu pilih kolom pada tabel pelanggan satu persatu, tapi yang perlu diingat adalah pemberian
nama pada kolom2 tersebut dengan didahului "as"

6. Kemudian pilih Menu Design dan pilih UNION maka akan muncul dialog seperti gambar dibawah ini :

7. Pilih New
8. Pilih Tabel Supplier dan klik Open

9. Langkah selanjutnya seperti no.4 dan 5. dengan catatan penamaan "as" pada setiap kolom harus sama dengan kolom pada tabel pelanggan.

10. Selanjutnya Pilih RETURN

11. Kita bisa lihat hasil syntax query yang telah kita buat

12. Selanjutnya Datawindow sudah bisa kita gunakan.