Rabu, 27 Agustus 2014

Grid Tricks - Clearer Search Results



Where is numbers 1, 2 & 3 Tricks?  We can simply treat #1 as the More Objects inside a Cell blog, #2 as the Various Images II blog and #3 as the Transparent Grid blog.

I decided to start showing some more tricks I do on my side using grids which I deem will be useful for others as well.  This is about making the search result clearer or more visible by highlighting the cell contents where a near match can be found.  If not, it is very tiring for the user's eyes to trace where exactly those near matches are.

Actually, this entry is partly because of recent exchanges of ideas about the tricks and method in searching.  What I wanted to show here is when you have several columns to look at and if the value in the search box can come from any of those columns, how can we easily distinguish where the near matches are?  This trick aids visually the user just about that.  Here is a sample code for this:

Local oForm
oForm=Newobject("Form1")
oForm.Show
Read Events
Return

Define Class Form1 As Form
      Height = 390
      Width = 770
      AutoCenter = .T.
      Caption = 'Clearer Search Results'
      ShowTips = .T.
      _cSearch = ''

      Add Object grid1 As Grid With ;
            GridLines = 0, ;
            Height = 328, ;
            Left = 10, ;
            Top = 50, ;
            Width = 750,;
            GridLines = 3,;
            DeleteMark = .F.,;
            GridLineColor Rgb(192,192,192),;
            FontName = 'Tahoma',;
            FontSize = 8

      Add Object label1 As Label With ;
            top = 15,;
            left = 10,;
            caption = 'Search',;
            Backstyle = 0

      Add Object Text1 As TextBox With ;
            top = 10,;
            left = 55,;
            Height = 23,;
            Width = 300,;
            value = '',;
            ToolTipText = 'Start typing to search matching records,'+;
            ' Double-click to clear search'

      Procedure Load
            Set Talk Off
            Set Safety Off
            Close Databases All
            Select  company,contact,Title From (Home(2)+;
                  "data\customer") Where .F. Into Cursor junk1 Readwrite
      Endproc

      Procedure grid1.Init
            With This
                  .RecordSourceType = 6
                  .RecordSource = 'junk1'
                  .Column1.DynamicForeColor = ;
                        'IIF(thisform._cSearch $ UPPER(company),RGB(255,128,0),RGB(0,0,0))'
                  .Column2.DynamicForeColor = ;
                        'IIF(thisform._cSearch $ UPPER(contact),RGB(255,128,0),RGB(0,0,0))'
                  .Column3.DynamicForeColor = ;
                        'IIF(thisform._cSearch $ UPPER(title),RGB(255,128,0),RGB(0,0,0))'
                  .Column1.DynamicFontBold = ;
                        'IIF(thisform._cSearch $ UPPER(company),.T.,.F.)'
                  .Column2.DynamicFontBold = ;
                        'IIF(thisform._cSearch $ UPPER(contact),.T.,.F.)'
                  .Column3.DynamicFontBold = ;
                        'IIF(thisform._cSearch $ UPPER(title),.T.,.F.)'
            Endwith
      Endproc

      Procedure Text1.DblClick
            This.Value = ''
            Zap In junk1
            Thisform.grid1.Refresh
      Endproc

      Procedure Text1.InteractiveChange
            Local lcSearch
            lcSearch = Upper(Alltrim(This.Value))
            Thisform._cSearch = m.lcSearch

            Select company, contact, Title From Home(2)+"data\customer" ;
                  Where Upper(cust_id+company+contact+Title);
                  LIKE '%'+m.lcSearch+'%' Into Cursor junk2 NOFILTER

            Select junk1
            Zap In junk1
            Append From Dbf('Junk2')
            Go Top
            Thisform.grid1.Refresh
      Endproc

      Procedure Destroy
            Clear Events
      Endproc

Enddefine

The tricks employed here is via using DynamicForeColor and DynamicFontBold properties of a column.  Another thing you have to notice here is my use of a form property because local variables go out of scope.

Well, those are just 3 simple things to look for.  Now go employ this trick on your end.

Cheers!

More Objects Inside a Grid Cell

In pursuit of making the appearances of our app more powerful, I decided to make my grid more appealing by way of showing several objects inside a cell.  And that can be attained via containers plus manipulating .controlsource(s).

Let us say I have this SQL SELECT:

SELECT fld1, fld2, fld3, fld4, fld5, fld6, fld7, fld8, fld9, fld10 from mytable into cursor junk nofilter

So I have 10 fields above.  Normally we would have 10 columns as well to show everything inside a grid, a column for each field, a record for each row.  Now, I wanted to show only 2 columns where fields 1 to 5 will all be cramped inside Column1 and the rest on Column2.  Here is how to do it.

By default, a grid will bind itself to the current active table/cursor and will follow the field arrangement like in the above fld1, fld2.....etc.  Ignore the sequence of the fields because it will be useless now.



a.  Create container1 on form.  It is easier to manipulate the appearances and positions of objects inside the container when you do it on form (outside the grid).  We will put that later inside the grid

b.  Inside Container1, add 5 textboxes.  Play with controlsource like:
    text1.ControlSource = junk.fld1
    text2.ControlSource = junk.fld2
    * and so on, you can add some more objects like labels if you like
c.  Play with those objects' borderlines, opacity, etc. to suit your taste

d.  Click on another object in the form then click back on container.  Make the container borderwidth = 0, backstyle = 0

e.  When everything seems to satisfy you, press Ctrl+C

f.  Press Ctrl then click on the grid to turn it into edit mode.  Click on the target column

g.  Paste on the target column the container object via Ctrl+V

h.  Go back to that Column1 and change its CurrentControl to your container instead of the default Text1.

i.  Set its Sparse setting to .F.


Repeat the same process for Column2 (create container, etc.) up to letter i.  Run your form and that is it.  Enjoy!


Here is how mine looks:


Using FoxTray ActiveX control: System Tray Icon and menu attached to VFP form

Before you begin:
Download an archive file with FoxTray.ocx. Check the Readme file.



Register control before testing the VFP code below:
REGSVR32 FoxTray.ocx (use full path to the file).

This control has been created in VB6 and so -- alas! -- requires certain VB support files installed on your computer: MSVBVM60.DLL

See also:
  • Adding icon to the systray (requires VFP9) 
  • Adding user-defined items to the Control Menu of VFP form (requires VFP9)
  •  
    #DEFINE ccIcon  "house.ico"  && replace with valid ICO file name
     
    PUBLIC objForm
    objForm = CreateObject("Tform")
    objForm.Visible = .T.
     
    DEFINE CLASS Tform As Form
        Width=400
        Height=240
        MaxButton=.F.
        MinButton=.F.
        Autocenter=.T.
        Caption = " Using Systray icon and menu"
     
        ADD OBJECT cmdShowIcon As CommandButton WITH;
        Caption="Show Icon", Width=100, Height=27,;
        Left=20, Top=20
     
        ADD OBJECT cmdHideIcon As CommandButton WITH;
        Caption="Hide Icon", Width=100, Height=27,;
        Left=20, Top=56
     
        ADD OBJECT chPopup As CheckBox WITH;
        Caption=" Popup enabled", Value=.T.,;
        Left=240, Top=20, Autosize=.T., BackStyle=1
     
    PROCEDURE Init
        THIS.AddTrayCtrl
     
    PROCEDURE AddTrayCtrl
        LOCAL lErr
        ON ERROR lErr = .T.
        THIS.AddObject("FoxTray", "TFoxTray")
        ON ERROR
        IF lErr
            = MessageB("ActiveX control not registered   " + Chr(13) +;
                "or VB support not available.            " + Chr(13) + Chr(13) +;
                "Class: FoxTrayCtl.cFoxTray              " + Chr(13) +;
                "File: FoxTray.ocx   " + Chr(13) +;
                "VB support: msvbvm60.dll   ", 48, " FoxTray Control")
        ENDIF
     
    PROCEDURE cmdShowIcon.Click
        WITH ThisForm.FoxTray
            .IconSource = ccIcon
            .ShowIcon
        ENDWITH
     
    PROCEDURE cmdHideIcon.Click
        ThisForm.FoxTray.HideIcon
    ENDDEFINE
     
    DEFINE CLASS TFoxTray As OLEControl
        OleClass="FoxTrayCtl.cFoxTray"
     
    PROCEDURE Init
        WITH THIS
            .IconSource = ccIcon
            .IconTip = "FoxPro App"
            .ShowIcon
     
            * setting popup items, max number = 5
            .GetPopupItem(1).Caption = "Settings"
            .GetPopupItem(2).Caption = "About"
            .GetPopupItem(3).Caption = "-"  && separator
            .GetPopupItem(4).Caption = "Close form"
            .GetPopupItem(5).Caption = "\Exit"  && item disabled
        ENDWITH
     
    PROCEDURE BeforePopupActivate
    PARAMETERS lResult
        lResult = ThisForm.chPopup.Value && .F. cancels popup activation
     
    PROCEDURE OnPopupItemSelected
    LPARAMETERS lnItem, lcCaption
        DO CASE
        CASE lnItem = 2
            = MessageB("System Tray Icon and Menu Control   ", 64, " About")
        CASE lnItem = 4
            ThisForm.Release
        CASE lnItem = 5
            IF MessageB("Exit FoxPro?   ", 32+4, " FoxTray Control") = 6
                QUIT
            ENDIF
        OTHER
            = MessageB("Popup item selected: " + LTRIM(STR(lnItem)) +;
                ", [" + lcCaption + "]")
        ENDCASE
    ENDDEFINE
     
    * * *
    *|The FoxPro code contains no Win32 functions, all calls moved 
    *|to the ActiveX part:
    *|
    *| LoadImage 
    *| ExtractAssociatedIcon 
    *| DestroyIcon 
    *| GetModuleFileName 
    *| Shell_NotifyIcon 
    *| CallWindowProc 
    *| GetWindowLong 
    *| SetWindowLong 
    *| CopyMemory 
    *| GetCursorPos 
    *| SetRectEmpty 
    *| CreatePopupMenu 
    *| TrackPopupMenuEx 
    *| InsertMenuItem 

    Senin, 25 Agustus 2014

    Pagi-Pagi Sudah Dihadang Kemacetan






    Malang (ANTARA News) - Ratusan sopir angkutan kota dari delapan trayek atau jalur di Kota Malang, Jawa Timur, Selasa mogok beroperasi karena menolak kebijakan jalur satu arah di Jalan Semeru dan Jalan Kawi.

    Aksi mogok ratusan sopir angkutan kota (angkot) tersebut dilakukan dengan memarkir kendaraan mereka di sepanjang Jalan Kawi, sehingga arus kendaraan macet total di kawasan tersebut, termasuk di Jalan Semeru, Arjuno, Jalan Tenis, Ijen, dan Merapi.

    Akibat mogoknya ratusan sopir angkot dari delapan jalur itu sejak sekitar pukul 06.00 WIB, karyawan maupun pekerja di berbagai instansi di daerah itu terpaksa diangkut truk kepolisian.

    Kedelapan jalur angkot yang terdampak penerapan jalur satu arah itu, adalah Lanndungsari-Gadang (LG), Gadang-Landungsari (GL), Mulyorejo-Madyopuro (MM), Arjosari-Tidar (AT), Arjosari-Kandungsari (AL), Arjosari-Dinoyo-Landungsari (ADL), Landungsari-Dinoyo-Gadang (LDG), dan Madyopuro-Karang Besuki (MK).

    Salah seorang sopir angkot jalur AT, Bambang, mengatakan aksi mogok beroperasi tersebut untuk menolak pelaksanaan uji coba jalur satu arah.

    "Sopir angkot dari delapan jalur ini minta agar ada jalur khusus untuk mikrolet (angkot) seperti yang diberlakukan di kawasan lingkar Universitas Brawijaya (UB)," ujarnya.

    Bambang mengaku para sopir akan melakukan mogok beroperasi hingga tuntutannya dikabulkan. "Nanti juga ada perwakilan dari paguyuban mikrolet melakukan pertemuan dengan dewan (DPRD Malang, red)," katanya.

    Meski mendapat penolakan, bahkan ratusan sopir angkot melakukan mogok operasi tak menyurutkan niat Wali Kota Malang Moch Anton untuk melaksanakan uji coba satu arah di Jalan Kawi dan Semeru tersebut karena pemberlakuan kebijakan tersebut sudah melalui kajian mendalam, termasuk solusi pengalihan jalur angkutan yang terkena dampaknya.

    "Dampak jalur satu arah hanya berada di sepanjang Jalan Semeru hingga Kawi dan sebelah utara aserta selatan Stadion Gajayana. Semua sudah kita siapkan termasuk jalur pengalihan, sehingga sopir angkutan tidak perlu khawatir," tegas Anton.

    Menurut dia, sopir dan para pemilik angkutan seharusnya tidak perlu melakukan aksi protes, sebab kebijakan jalur satu arah merupakan upaya Pemkot Malang untuk mengatasi kemacetan di kawasan tersebut.

    "Kami dituntut masyarakat untuk mengatasi kemacetan, tetapi mengapa kebijakan kami justru diprotes. Jika alasan angkutan tak setuju karena takut kehilangan penumpang, itu tidak benar karena penumpang tetap akan naik angkutan di jalur pengalihan," tandasnya.

    Dalam uji coba jalur satu arah tersebut, Dinas Perhubungan (Dishub) Kota Malang menyiapkan sedikitnya 90 personel yang terdiri dari petugas Dishub, kepolisian dan TNI. Puluhan Personel itu bertugas untuk berjaga di jalur pengalihan, serta menghalau kendaraan yang melawan arus.

    Meski ada penolakan dari sopir angkot, bahkan unjuk rasa, Dishub tetap melakukan uji coba jalur satu arah tersebut. "Apapun risikonya akan tetap kami hadapi, termasuk unjuk rasa dan aksi mogok yang dilakukan sopir," kata Kepala Dishub Kota Malang Wahyu Setianto.

    Minggu, 24 Agustus 2014

    Windows 9


    Wah baru aja Ada Windows 8 udah mau lahir lagi Windows 9..
    semoga di windows 9 menjadi OS yang powerfull tidak seperti adiknya..si 8 itu...

    Sebelum Lihat bocoran dari Windows 9 nya kita lihat dulu OS windows pendahulunya agar mengingatkan agan dan sista


    CALIFORNIA - Baru-baru ini beredar tampilan gambar konsep Windows 9. Terdapat desain baru yang tampak berbeda dengan gaya metro design ala Windows 8, serta dominasi latar belakang berwarna biru.
    Dilansir Softpedia, Minggu (17/3/2013), meskipun Windows 8 baru diluncurkan pada Oktober 2012, namun kini tampaknya semua pengguna tengah melihat versi Windows yang lebih baru lagi. Kabarnya rilis pada musim panas tahun ini, Windows 9 diharapkan menyuguhkan fitur menarik ketimbang Windows 8.

    Berdasarkan laporan terbaru, Windows 9 dijadwalkan meluncur pada November 2014. Versi terbaru ini akan memberikan berbagai macam perbaikan platform Windows, termasuk peningkatan pada Metro UI (user interface), yang sebelumnya banyak dikritik oleh para pengguna awal.
    Pengguna DeviantArt Softboxindia telah menciptakan sebuah konsep yang menunjukkan tampilan File Explorer di Windows 9. Gambar ini menunjukkan adanya pengelolaan file yang bisa diakses dengan gaya penelusuran (browse local drives).
    Gambar ini juga memberikan bayangan terkait Microsoft yang siap untuk memigrasikan desain klasik Windows Explorer ke tampilan yang lebih modern. Microsoft juga kabarnya akan menampilkan versi update terbaru yang dilengkapi dengan Ribbon.
    Untuk Bocoran Gambarnya, Silahkan cekidot disini :



    Sabtu, 23 Agustus 2014

    Fungsi Terbilang Sampai Triliyunan

    FUNCTION Terbilang(tnNum)
    lcPokok = [Satu ,Dua ,Tiga ,Empat ,Lima ,Enam ,Tujuh ,;
    Delapan ,Sembilan ,Sepuluh ,Sebelas ]
    DO CASE
      CASE BETWEEN(tnNum, 0, 11)
        lcTerbilang = GETWORDNUM(lcPokok, tnNum ,",")
      CASE tnNum <= 20 && BETWEEN(tnNum, 12, 19)
        lcTerbilang = GETWORDNUM(lcPokok, (tnNum % 10) ,",") + "Belas"
      CASE tnNum < 100 && BETWEEN(tnNum, 20, 99)
        lcTerbilang = GETWORDNUM(lcPokok, INT(tnNum / 10) ,",") + "Puluh " +;
     GETWORDNUM(lcPokok, (tnNum % 10) ,",")
      CASE tnNum < 200 && BETWEEN(tnNum, 100, 199)
        lcTerbilang = "Seratus " + Terbilang(tnNum - 100)
      CASE tnNum < 1000 && BETWEEN(tnNum, 200, 999)
        lcTerbilang = Terbilang(INT(tnNum/100)) +"Ratus " + Terbilang(tnNum % 100)
      CASE tnNum < 2000 && BETWEEN(tnNum, 1000, 1999)
        lcTerbilang = "Seribu " + Terbilang(tnNum - 1000)
      CASE tnNum < 1000000 && BETWEEN(tnNum, 2000, 999999)
        lcTerbilang = Terbilang(INT(tnNum/1000)) +"Ribu " + Terbilang(tnNum % 1000)
      CASE tnNum < 1e9 && BETWEEN(tnNum, 1000000, 999999999)
        lcTerbilang = Terbilang(INT(tnNum/1000000)) +"Juta " + Terbilang(tnNum % 1000000)
      CASE tnNum < 1e12
        lcTerbilang = Terbilang(INT(tnNum/1e9)) +"Milyar " + Terbilang(tnNum % 1e9)
      CASE tnNum < 1e15
        lcTerbilang = Terbilang(INT(tnNum/1e12)) +"Triliun " + Terbilang(tnNum % 1e12)
      CASE tnNum < 1e18
        lcTerbilang = Terbilang(INT(tnNum/1e15)) +"Quadriliun " + Terbilang(tnNum % 1e15)
      CASE tnNum < 1e21
        lcTerbilang = Terbilang(INT(tnNum/1e18)) +"Pentaliun " + Terbilang(tnNum % 1e18)
    ENDCASE
    RETURN lcTerbilang

    Hasil Penampakan


    Jumat, 22 Agustus 2014

    Macam-Macam Amal

    Barang siapa beramal yg disertai dg takabbur, maka amal itu tdk bisa melewati pintu ke 3 krn ditolak Malaikat penjaganya.
    Barangsiapa beramal yg disertai dg rasa ujub, maka di pintu langit ke 4 akan ditolak oleh malaikat penjaga.
    Sedangkan di pintu langit ke 5 , orang yg beramal tetapi suka menghasud orang lain maka amalnya akan ditolak dan dilaknat selama hidupnya.
    Di pintu yg ke 6 amal seseorang yg beramal tapi dia tdk punya rasa kasih kpd sesama , maka amal tsb ditolak oleh malaikat penjaga.
    Dan orang yg beramal hanya krn ingin popularitas atau pangkat mk dipintu yg ke 7 ditolak oleh malaikat penjaga.
    Dan orang yg bramal bukan untuk Allaah, maka dia akan dilaknat oleh Allaah dan seluruh penghuni 7 lapis langit dan bumi.
    Na'uudzubillaahi min dzaalik.

    Kalam habibana munzir al musawa tentang tato :

    Mengenai Tato ini, merupakan dosa besar karena Tasyabbuhan bilkuffar (meniru niru adat orang non muslim tanpa manfaat tertentu). dan pula Tato menghalangi kita dari air wudhu atau air Mandi besar, maka tidak sah lah wudhu kita dan mandi junub kita.
    maka tak sah pula shalat kita dan seluruh ibadah kita.
    Maha Suci Allah swt yg memilihkan kita Syariah yg terlembut dan sempurna, Syariah Muhammad saw.
    sebagaimana tato ini, betul perbuatannya adalah dosa, dan dosa berkesinambungan, dan wajib menghilangkannya,
    Namun pendapat yg Mu'tamad mengharamkan menghilangkan tato bila hal itu harus dengan kekerasan, misalnya dengan api, atau dengan setrika, atau perbuatan2 yg menyakitkan tubuh.
    maka bila ditemukan cara menghilangkannya tanpa menyakiti tubuh apalagi merusak tubuh, maka wajib menghilangkannya.
    bila ia tak menemukan cara kecuali dg kekerasan, maka haram menghilangkannya,
    maka apa solusi kita?,
    saya pernah bertanya tentang hal ini kepada pimpinan Mufti Tarim, beliau menjawab bahwa solusi kita adalah bertobat..,
    maka dengan tobat, semua ibadah kita diterima Allah swt, hukum tato itu gugur dengan tobat kita selama tak ada cara menghilangkannya kecuali dg kekerasan.
    maka bagi kita yg telah terlanjur memiliki tato, maka tak perlu menghapusnya bila harus dengan kekerasan, maka kita berjanji pd Allah untuk tidak lagi menambah tato itu,
    maka hukum wajib menghilangkannya pun gugur dg tobat kita.
    alangkah indah dan sempurnanya ajaran Muhammad saw

    [Visual Studio 2012] Coba Membuat Program POS

    Lagi Coba-Coba Bikin Program POS menggunakan Visual Studio 2012.
    Ternyata tidak terlalu sulit juga..

    Berikut ini penampakannya :

    Kalau ada yg mau source codenya, silahkan coba2 dibawah ini :
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.IO
    Imports System.Diagnostics
    Imports Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6

    Public Class Penjualan
        Dim str, sql, sql1, sql2, sql3 As String
        Dim cmd1, cmd As SqlCommand
        Dim currentDate As DateTime = DateTime.Now
        Dim printer As New Printer
        Dim PAPER_WIDTH As Integer = 1800
        Dim mulai As Integer

        Sub cetakawal()
            Dim bj, ks As String
            bj = "Jam   : "
            ks = "Kasir : "
            printer.Font = New Font("verdana", 7)
            printer.CurrentX = PAPER_WIDTH - (printer.TextWidth("LAI-LAI MARKET BUAH") / 2)
            printer.Print("PT. XXXX ABADI JAYA")
            printer.CurrentX = PAPER_WIDTH - (printer.TextWidth("Jl. Terusan Muter-Muter, Malang") / 2)
            printer.Print("Jl. Terusan Muter-Muter, Malang")
            printer.CurrentX = PAPER_WIDTH - (printer.TextWidth("Telp. 0341-336069  Fax. 0341-336070") / 2)
            printer.Print("Telp. 0341-123456  Fax. 0341-112233")
            printer.Print("--------------------------------------------------------------")
            printer.Print("Tanggal : " + Format(Now, "dd MMM yyyy             ") & ks & MaskedTextBox3.Text)
            printer.Print("Nota    : " & MaskedTextBox2.Text & "              " & bj & Format(Now, "hh:mm:ss"))
            printer.Print("--------------------------------------------------------------")
        End Sub

        Sub cetaktransaksi()
            printer.Print(TextBox13.Text)
            printer.Print(TextBox14.Text & " x " & TextBox15.Text & " = " & TextBox16.Text)
        End Sub

        Sub cetakakhir()
            cetaktransaksi()
            printer.Print("--------------------------------------------------------------")
            'printer.Font = New Font("Arial", 8)
            printer.Print("")
            printer.CurrentX = PAPER_WIDTH - (printer.TextWidth("Terima kasih atas kunjungan Anda") / 2)
            printer.FontItalic = True
            printer.Print("Terima kasih atas kunjungan Anda")
            printer.EndDoc() ' potong kertas
        End Sub

        Sub FormatText()
            DGV.Columns(5).DefaultCellStyle.Format = "N0"
            DGV.Columns(3).DefaultCellStyle.Format = "N0"
            Me.TextBox2.Text = SetDisplay(0)
            Me.TextBox3.Text = SetDisplay(0)
            Me.TextBox4.Text = SetDisplay(0)
            Me.TextBox5.Text = SetDisplay(0)
            Me.TextBox6.Text = SetDisplay(0)
            Me.Label21.Text = SetDisplay(0)
            Me.TextBox2.TextAlign = HorizontalAlignment.Right
            Me.TextBox3.TextAlign = HorizontalAlignment.Right
            Me.TextBox4.TextAlign = HorizontalAlignment.Right
            Me.TextBox5.TextAlign = HorizontalAlignment.Right
            Me.TextBox6.TextAlign = HorizontalAlignment.Right
            Me.TextBox7.TextAlign = HorizontalAlignment.Right
        End Sub

        Sub Kosong()
            mulai = 0
            Me.TextBox8.Text = 0
            Me.TextBox9.Text = 0
            Me.TextBox10.Text = 0
            Me.TextBox11.Text = 0
            Me.TextBox12.Text = 0
            Me.Label5.Text = ""
            Me.Label6.Text = ""
            Me.Label7.Text = ""
            Me.Label8.Text = ""
            Me.Label9.Text = ""
            Me.DGV.Rows.Clear()
            MaskedTextBox2.Text = AutoNumber()
        End Sub

        Sub BuatKolomBaru()
            DGV.Columns.Add("Kode", "Item Code")
            DGV.Columns.Add("Nama", "Item Name")
            DGV.Columns.Add("Sat", "Stn")
            DGV.Columns.Add("Harga", "Price")
            DGV.Columns.Add("Jumlah", "Qty")
            DGV.Columns.Add("Total", "Total")
            DGV.Columns.Add("Ttl", "Berat")
            DGV.Columns.Add("Div", "Divisi")
            Call AturLebarKolom()
        End Sub

        Sub AturLebarKolom()
            DGV.Columns(0).Width = 120
            DGV.Columns(1).Width = 260
            DGV.Columns(2).Width = 65
            DGV.Columns(3).Width = 100
            DGV.Columns(4).Width = 60
            DGV.Columns(5).Width = 100
        End Sub

        Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'str = "server=server-01\server;database=xxx;user id=sa;password=rahasia;"
            vmesin = "14"
            Me.Label4.Visible = False
            Me.BuatKolomBaru()
            Me.Kosong()
            If currentDate.Day = 1 Then
                Bulan_baru()
            End If
            'CariBulan()
            'dbn = bulan + Trim(Today.Year)
            FormatText()
            DGV.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            DGV.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            DGV.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            MaskedTextBox1.Text = Today
            'MaskedTextBox2.Text = bulan + Trim(Today.Year) '"4030417166"
            MaskedTextBox3.Text = "JOKOWI"
            CariHari()
            hsl = 0
            Me.TextBox2.Text = 0
        End Sub

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
            If Asc(e.KeyChar) = 13 Then
                TextBox1.CharacterCasing = CharacterCasing.Upper
                kode = Trim(TextBox1.Text)
                berat = 1
                jum = 1
                If Microsoft.VisualBasic.Left(Me.TextBox1.Text, 2) = "24" Then
                    kode = Microsoft.VisualBasic.Mid(TextBox1.Text, 3, 5)
                    berat = Microsoft.VisualBasic.Mid(TextBox1.Text, 8, 2) + "," + Microsoft.VisualBasic.Mid(TextBox1.Text, 10, 3)
                End If

                kiri = Microsoft.VisualBasic.Left(Me.TextBox1.Text, 1)
                tot = Val(Microsoft.VisualBasic.Mid(Me.TextBox1.Text, 2, 6))
                nil = 0
                itm = 0
                Select Case kiri
                    Case "X"
                        DGV.SelectedCells(4).Value = tot
                        DGV.SelectedCells(5).Value = DGV.SelectedCells(3).Value * tot
                        DGV.SelectedCells(6).Value = tot
                        TextBox14.Text = tot
                    Case "T"
                        TextBox5.Text = SetDisplay(Label21.Text)
                        TextBox6.Text = SetDisplay(TextBox5.Text - TextBox4.Text)
                        Me.TextBox10.Text = Val(TextBox1.Text.Split("T").Last)
                        Me.TextBox8.Text = TextBox5.Text - TextBox4.Text
                        'Me.cetakakhir()
                        Koneksi_Bulan()
                        sql1 = "Insert Into rth(nofaktur,tanggal,jumlah,tunai,bayar,sisa,totalqty,iduser,disc1)" &
                                " values('" & MaskedTextBox2.Text & "','" & Format(Now, "yyyy-MM-dd HH:mm:ss") & "'," & TextBox12.Text & "," &
                                "" & TextBox9.Text & "," & TextBox10.Text & "," &
                                "" & TextBox8.Text & "," & TextBox7.Text & "," &
                                "'" & MaskedTextBox3.Text & "'," & TextBox11.Text & ")"
                        Dim cmd1 As New SqlCommand(sql1, Conn_bulan)
                        cmd1.ExecuteNonQuery()

                        Try
                            For r As Integer = 0 To DGV.Rows.Count - 2
                                str = DGV.Rows(r).Cells(0).Value
                                'If Not str = vbEmpty Then
                                Koneksi_Bulan()
                                sql = "Insert Into rtd(nofaktur,tanggal,ItemCode,namaitem,satuan,harga,Qtyshp,jumlah,qtybb,divisi,tunai,iduser)" &
                                        " values('" & MaskedTextBox2.Text & "','" & Format(Now, "yyyy-MM-dd HH:mm:ss") & "','" & DGV.Rows(r).Cells(0).Value & "'," &
                                        "'" & DGV.Rows(r).Cells(1).Value.Replace("'", "''") & "','" & DGV.Rows(r).Cells(2).Value & "'," &
                                        "" & DGV.Rows(r).Cells(3).Value & "," & DGV.Rows(r).Cells(4).Value & "," &
                                        "" & DGV.Rows(r).Cells(5).Value & "," & DGV.Rows(r).Cells(6).Value & "," &
                                        "'" & DGV.Rows(r).Cells(7).Value & "'," & DGV.Rows(r).Cells(5).Value & ",'" & MaskedTextBox3.Text & "')"
                                Dim cmd As New SqlCommand(sql, Conn_bulan)
                                cmd.ExecuteNonQuery()
                                'Conn.Close()
                                'End If
                            Next
                            Me.Kosong()
                            Me.Label4.Text = "Change ---- " + SetDisplay(TextBox6.Text)
                        Catch
                            MsgBox("Server Tidak Terhubung")
                        End Try
                    Case Else
                        ' If mulai = 0 Then
                        'Me.cetakawal()
                        'mulai = 1
                        'Else
                        'Me.cetaktransaksi()
                        'End If
                        Koneksi_lailai()
                        row = "select ItemCode, NamaItem, Satuan, Harga from IcAlt where ItemCode='" & kode & "'"
                        cmd = New SqlClient.SqlCommand(row, Conn_lailai)
                        rd = cmd.ExecuteReader
                        rd.Read()
                        If rd.HasRows Then
                            DGV.Rows.Add(rd.Item(0), rd.Item(1), rd.Item(2), rd.Item(3), berat, rd.Item(3) * berat, 1)
                            Me.Label4.Text = rd.Item(1)
                            Me.Label5.Text = 1
                            Me.Label8.Text = SetDisplay(rd.Item(3))
                            Me.Label9.Text = SetDisplay(rd.Item(3))
                            DGV.CurrentCell = DGV(0, DGV.RowCount - 2)
                            TextBox13.Text = rd.Item(1)
                            TextBox14.Text = SetDisplay(rd.Item(3))
                            TextBox15.Text = SetDisplay(berat)
                            TextBox16.Text = SetDisplay(rd.Item(3) * berat)
                            'Print("SUB Lai Lai Market Buah")
                        Else
                            MsgBox("Kode barang tidak terdaftar")
                        End If
                End Select

                For Each R As DataGridViewRow In DGV.Rows
                    nil += R.Cells(5).Value
                    itm += R.Cells(6).Value
                    'totqty += R.Cells(6).Value
                Next

                Me.TextBox2.Text = SetDisplay(nil)
                Me.TextBox7.Text = itm
                Me.TextBox4.Text = SetDisplay(nil)
                Me.TextBox12.Text = nil
                Me.TextBox11.Text = 0
                Me.TextBox9.Text = nil
                TextBox1.Clear()
            End If
        End Sub

        Private Sub DGV_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DGV.CellFormatting
            DGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect
            DGV.DefaultCellStyle.SelectionBackColor = Color.LawnGreen
            DGV.DefaultCellStyle.SelectionForeColor = Color.Blue
        End Sub

        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Me.Text = "POS Software 1.0 - " + hari + " - " + Today + " - " + TimeOfDay
        End Sub

        Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
            Select Case Microsoft.VisualBasic.Left(Me.TextBox1.Text, 1)
                Case "T"
                    Label11.Text = "TUNAI"
                    GroupBox3.Visible = True
                    If TextBox1.TextLength = 1 Then
                        Label21.Text = 0
                    Else
                        Label21.Text = SetDisplay(TextBox1.Text.Split("T").Last)
                    End If
                Case "C"
                    Label11.Text = "CARD"
                    GroupBox3.Visible = True
                    Label21.Text = SetDisplay(TextBox2.Text)
                Case "D"
                    Label11.Text = "DEBET"
                    GroupBox3.Visible = True
                    Label21.Text = SetDisplay(TextBox2.Text)
                Case Else
                    GroupBox3.Visible = False
            End Select
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Bulan_baru()
        End Sub
    End Class
    Semoga Bermanfaat