28 January 2016

Cara Membuka Dan Menutup Aplikasi Lain Dengan Delphi

Untuk postingan kali ini saya akan mencoba masih bermain dengan delphi yaitu bagaimana cara untuk membuka dan menutup suatu aplikasi dengan delphi,maksud nya misalkan kita akan membuka dan menutup aplikasi notepad hanya dengan menekan atau mengklik sebuah tombol.Ini hanya sebuah contoh saya membuka aplikasi notepad tentunya kita bisa membuka aplikasi yang lainnya dengan kode yang akan saya coba gunakan di bawah ini.

Penambahan ShellApi

Setelah saya coba membuka aplikasi delphinya disini untuk membuat suatu aplikasi dengan delphi apabila kita ingin membuka suatu aplikasi lain yaitu kita butuh pemanggilan function ShellExecute yang mana function tersebut ada di unit ShellApi,untuk itu kita perlu menambahkan unit ShellApi tersebut ke uses di aplikasi yang akan kita buat.
Untuk menambahkan unit ShellApi tersebut pada uses bisa kita tambahkan di uses yang berada di bawah interface atau bisa juga kita tambahkan uses di bawah implementation.
menambahkan uses shellapi dibawah interface
Penambahan Uses ShellApi dibawah Interface
menambahkan uses shellapi dibawah implementation
Penambahan Uses ShellApi dibawah Implementation


Kode Membuka Aplikasi

Selanjutnya saya akan menambahkan dua buah komponen Button yang mana komponen Button1 apabila di klik maka aplikasi notepad akan tampil,dan untuk Button2 adalah untuk menutup notepad.
Sebelum ke pembuatan procedure untuk Button1 yaitu untuk membuka notepad kita harus tahu dahulu dimana letak atau path notepad berada ini sebagai contoh apabila kita ingin membuka notepad yang mana notepad tersebut berada pada C:\Windows\notepad.exe.
Kemudian setelah tahu letak atau path aplikasi notepad tersebut lanjut ke pembuatan procedure Button1 dimana disini saya menggunakan komponen Button1 maka saya coba klik 2X komponen Button1 tersebut dan saya coba tambahkan beberapa kode diprocedure tersebut,sehingga procedure dari Button1 menjadi seperti dibawah ini
procedure TForm1.Button1Click(Sender: TObject);
var
  app: String;
begin
  app := 'C:\Windows\notepad.exe';
  ShellExecute(Handle, 'open', PAnsiChar(app), Nil, Nil, SW_SHOWNORMAL);
end;
Kemudian saya lanjut ke pembuatan procedure untuk Button2 yang saya coba difungsikan untuk menutup aplikasi notepad yang telah dibuka caranya dengan mengklik 2X Button2 dan menambahkan beberapa kode didalamnya sehingga keseluhan dari kode procedure Button2 tersebut menjadi seperti dibawah ini
procedure TForm1.Button2Click(Sender: TObject);
var
  appH: HWND;
begin
  appH := FindWindow('Notepad', Nil);
  SendMessage(appH, WM_CLOSE, 0, 0);
end;
Selanjutnya setelah saya tambahkan kode tersebut diatas saya coba test dengan mengklik tombol Run atau menekan tombol F9 pada keyboard,kemudian mencoba mengklik Button1 dan Button2 untuk melihat hasilnya dari pemberian kode pada Buton1 dan Button2 berhasil apa tidaknya. 

tes run aplikasi open close delphi
Tes Aplikasi Open Close

Demikianlah untuk postingan kali ini sesuai dengan judul diatas semoga bermanfa'at dan bisa teman-teman kembangkan.

Salam Blogger and Happy Coding.

20 January 2016

Cara Membuat Route Opsel Dengan Delphi

Untuk kali ini saya akan coba membuat sebuah aplikasi yang sangat simple(sederhana) yang mana aplikasi ini saya buat untuk membuat route dari operator selular secara manual yang ada di negara kita,untuk itu saya beri nama aplikasi ini dengan ROUTE OPSEL.
Aplikasi ini saya coba buat dengan agar supaya bisa sekalian mengcapture daripada perintah route itu sendiri artinya hasil dari route akan kita lihat/ditampilkan pada memo.Sebelum saya memulai untuk membuat aplikasi ini apabila diantara teman-teman ada yang mau belajar juga membuatnya ada baiknya teman-teman membaca dulu atau mempelajarinya dulu dari postingan saya yang sebelum-sebelumnya yaitu bagaimana cara membuat capture console dengan delphi,teman-teman bisa baca di:
Cara Capture Console Dengan Procedure Secara Realtime kemudian
Dan bagi yang belum di instal komponen DosCommand nya silahkan instal terlebih dahulu untuk yang belum tahu cara penginstalannya bisa di buka pada postingan
Kenapa saya coba mereferensikan untuk mempelajarinya terlebih dahulu dari pada postingan yang saya sebutkan diatas tadi,karena dengan alasan saya akan mencoba membuat aplikasi route opsel ini agar supaya bisa mengcapturenya hasil dari perintah route itu sendiri,maka dari itu untuk membuat aplikasi ini yang akan saya buat perlu dari salah satu langkah dari ketiga cara tersebut.
Dan untuk kali ini saya akan mencobanya dengan cara yang menggunakan komponen doscommand,dan mungkin teman-teman bisa mencobanya dengan cara yang lain.

Langkah Pembuatan Route Opsel

Menuju ke pokok dari postingan kali ini yaitu tentang bagaimana cara membuat route opsel sekarang langkah pertama yaitu membuka aplikasi delphinya dan bagi yang komputernya belum diinstal delphinya silahkan instal dulu aplikasi delphi 7 nya terlebih dahulu karena saya coba membuatnya dengan delphi versi 7.Apabila sudah siap aplikasi delphinya coba buka  kemudian pada Form coba tambahkan beberapa komponen yang diperlukan.

Komponen-komponen Yang Di Tambahkan

Disini saya coba dengan menambahkan komponen-komponen pada Form yang terdiri dari:
1. 1 buah Memo.
2. 1 buah Edit.
3. 1 buah ComboBox.
4. 5 buah Button.
5. 1 buah DosCommand.
6. 1 buah IdIPWatch.
Dan coba atur penempatan daripada komponen-komponen tersebut yang telah ditambahkan pada Form supaya kelihatan bagus dan rapi.Kemudian untuk masing-masing komponen Button pada Object Inspector rubah Caption nya sesuai dengan fungsinya masing-masing yang akan dibuat,disini saya coba daripada tiap-tiap button saya ganti captionnya yaitu dengan GET IP,ROUTE,DEL ROUTE,CLEAR dan ROUTE PRINT.Disini saya coba memposisikan atau menempatan daripada komponen-komponen penambahan tadi yaitu seperti gambar di bawah ini

menambahkan komponen dan mengatur posisi
Menambahkan Komponen dan Mengatur Posisi Komponen

Setelah pengaturan posisi penempatan komponen pass atau cocok menurut selera masing-masing selanjutnya saya akan mencoba kebagian pengkodingan.

Proxy Dari Masing-masing Opsel

Sebelum lanjut ke pongkodingan kita juga harus tahu dulu bahwa dinegara kita tiap-tiap operator selular mempunyai proxy masing-masing dan ini sangat diperlukan untuk membuat aplikasi route ini.Dan berikut ini adalah proxy dan nama operator yang saya tahu tentunya operator yang ada di negara kita:
1. TELKOMSEL Proxynya adalah 10.1.89.130.
2. INDOSAT Proxynya adalah 10.19.19.19.
3. XL Proxynya adalah 202.152.240.50.
4. AXIS Proxynya adalah 10.8.3.8.
5. TRI Proxynya adalah 10.4.0.10.

Procedure/Kode Untuk Tiap Komponen Yang Di Fungsikan

Yang pertama saya akan coba memasukan list atau daftar Proxy dari tiap opsel pada komponen ComboBox caranya adalah
Klik ComboBox kemudian pada object inspector pada properties Items bagian sebelah kanannya klik kemudian masukan Proxy operator selular yaitu:
10.1.89.130
10.19.19.19
202.152.240.50
10.8.3.8
10.4.0.10
Kemudian klik Ok.
Gambarannya seperti berikut dibawah ini

menambahkan list proxy opsel pada combobox
Menambahkan List Proxy Pada Combobox

Selanjutnya saya akan membuat procedure/kode untuk Button GET IP yaitu dengan cara mengklik 2X button tersebut dan saya coba buat procedurenya seperti ini
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := IdIPWatch1.LocalIP;
end;
Setelah itu lanjut untuk membuat procedure Button ROUTE caranya sama dengan mengklik 2X button ROUTE kemudian buat procedurenya seperti ini
procedure TForm1.Button2Click(Sender: TObject);
var
  route: String;
begin
  Memo1.Clear;
  route := 'route ADD ' + ComboBox1.Text + ' MASK 255.255.255.255 ' + Edit1.Text;
  DosCommand1.CommandLine := route;
  DosCommand1.Execute;
  DosCommand1.OutputLines := Memo1.Lines;
end;
Kemudian lanjut ke Button DEL ROUTE dan untuk procedurenya adalah seperti ini
procedure TForm1.Button3Click(Sender: TObject);
var
  delroute: String;
begin
  delroute := 'route DELETE ' + ComboBox1.Text;
  DosCommand1.CommandLine := delroute;
  DosCommand1.Execute;
  DosCommand1.OutputLines := Memo1.Lines;
end;
Lanjut lagi ke Button ROUTE PRINT dan untuk procedurenya adalah seperti ini
procedure TForm1.Button5Click(Sender: TObject);
var
  routeprint: String;
begin
  routeprint := 'route PRINT';
  DosCommand1.CommandLine := routeprint;
  DosCommand1.Execute;
  DosCommand1.OutputLines := Memo1.Lines;
end;
Dan yang terakhir untuk Button CLEAR buat procedurenya seperti ini
procedure TForm1.Button4Click(Sender: TObject);
begin
  Memo1.Clear;
end;
Setelah itu saya kira aplikasi telah siap untuk di tes,kemudian saya coba Run dan hasilnya...

tes route operator selular
Tes Run Route Opsel

Demikian untuk postingan kali ini tentang cara membuat Route Opsel yang sangat simple,semoga ini bermanfa'at dan bisa dikembangkan lagi oleh teman-teman.
Nantikan lagi experiment saya selanjutnya.

Ok Salam Blogger and Happy Koding.

15 January 2016

Cara Mendapatkan IP Address Dan Nama PC Dengan Winsock

Sekarang saya akan coba membuat postingan mengenai bagaimana cara mendapatkan ip address dan nama pc kita tentunya dengan delphi,ya ini saya buat buat yang mau dan yang baru belajar delphi sama seperti saya.Yang saya tahu untuk cara mendapatkan ip yang kita dapat dari suatu koneksi di delphi yaitu dengan menggunakan winsock dan satu lagi dengan menggunakan komponen dari indy.
Dan untuk kali ini saya akan mencobanya membuat cara mendapatkan ip dan nama pc(nama komputer)dengan menggunakan winsock dan juga dilain waktu akan saya coba juga membuat suatu postingan dengan menggunakan komponen dari indy.

Langkah Pembuatannya

Sekarang saya akan memulai cara membuatnya biasa pertama buka aplikasi delphinya kemudian saya coba tambahkan beberapa komponen pada Form yang baru tersebut dimana komponen yang saya tambahkan adalah:
1. 2 buah Label.
2. 2 buah Edit.
3. 1 buah Button.
Yang mana untuk masing-masing label saya ganti captionnya pada object inspector untuk Label1 saya ganti dengan IP dan yang Label2 saya ganti dengan Nama PC dan yang Button saya ganti dengan GET,dan saya coba posisikan masing-masing komponen tersebut supaya enak dilihatnya saya coba posisikan seperti gambar dibawah ini
penambahan komponen pada form
Menambahkan Komponen Pada Form
Setelah itu saya coba ke code editor daripada delphi yang mana saya akan coba membuatnya atau menambahkan sebuah function dimana function tersebut yang akan memproses agar supaya ip dan nama pc bisa ditampilkan dan untuk menambahkan function tersebut saya tambahkan uses winsock kemudian baru saya tambahkan function dimana untuk function nya adalah sebagai berikut
function GetIPFromHost(var HostName, IPaddr, WSAErr: string): Boolean;
type
  Name = array[0..100] of Char;
  PName = ^Name;
var
  HEnt: pHostEnt;
  HName: PName;
  WSAData: TWSAData;
  i: Integer;
begin
  Result := False;
  if WSAStartup($0101, WSAData) <> 0 then begin
    WSAErr := 'Winsock is not responding."';
    Exit;
  end;
  IPaddr := '';
  New(HName);
  if GetHostName(HName^, SizeOf(Name)) = 0 then
  begin
    HostName := StrPas(HName^);
    HEnt := GetHostByName(HName^);
    for i := 0 to HEnt^.h_length - 1 do
     IPaddr :=
      Concat(IPaddr,
      IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.');
    SetLength(IPaddr, Length(IPaddr) - 1);
    Result := True;
  end
  else begin
   case WSAGetLastError of
    WSANOTINITIALISED:WSAErr:='WSANotInitialised';
    WSAENETDOWN      :WSAErr:='WSAENetDown';
    WSAEINPROGRESS   :WSAErr:='WSAEInProgress';
   end;
  end;
  Dispose(HName);
  WSACleanup;
end;
Saya tambahkan function tersebut dibawah implementation.Setelah saya tambahkan function kemudian saya buat procedure untuk Button dengan cara mengklik button 2X dan coba menambahkan sedikit kode pada procedure tersebut yang mana procedure button tersebut menjadi seperti dibawah ini
procedure TForm1.Button1Click(Sender: TObject);
var
  Host, IP, Err: String;
begin
  if GetIPFromHost(Host, IP, Err) then begin
    Edit1.Text := IP;
    Edit2.Text := Host;
    end
    else
      MessageDlg(Err, mtError, [mbOK], 0);
end;
tambahan kode  pada procedure button
Penambahan Kode Pada Procedure Button

Kemudian setelah saya buat procedure pada Button tersebut saya coba run atau tekan F9 untuk melihat hasilnya kemudian saya coba klik Button GET dan ternyata hasilnya seperti gambar dibawah ini
tes jalankan program ip address
Tes Run Program IP Address

Begitulah kira-kira cara untuk membuat mendapatkan ip dan nama PC dengan delphi sesuai dengan judul postingan kali ini,semoga postingan ini bisa bermanfa'at dan bisa teman-teman kembangkan lagi pada aplikasi yang dibuat teman-teman.

Oke Salam Blogger and Happy Koding.

13 January 2016

Capture Console Dengan Komponen DosCommand

Setelah kemarin saya membuat postingan mengenai bagaimana cara menginstall suatu komponen delphi yang berekstensikan file *.pas dan saya mengambil salah satu contoh yaitu komponen dos command dimana komponen ini fungsinya yaitu untuk mengeksekusi dan mengcapture cmd windows dan ditampilkan pada memo didelphi.Kenapa saya mengambil contoh dos command dengan alasan tentang postingan saya sebelumnya yaitu bahwa untuk mengcapture console daripada cmd windows bisa di buat dengan berbagai cara yaitu diantaranya baik dengan menggunakan suatu procedure dan bisa dibaca cara nya di capture console secara realtime kemudian bisa dengan menggunakan function caranya juga bisa dibaca di cara capture console dengan function dan juga bisa dengan menggunakan suatu komponen yang akan saya bahas dalam postingan sekarang ini.
Jadi apabila kita mau membuat suatu aplikasi yang dimana ada hubungannya dengan suatu cmd windows kita bisa membuatnya dengan salah satu dari ketiga cara tersebut,mana yang lebih cocok yang bisa digunakan sesuai dengan apa yang akan dibuat aplikasi tersebut.

Cara Menggunakan Komponen Dos Command

Biar ga terlalu panjang lebar saya akan coba langsung ke pokok atau inti dari postingan kali ini yaitu cara membuat suatu aplikasi dengan menggunakan komponen doscommand,biasa pertama buka aplikasi delphinya kemudian tambahkan beberapa komponen dan atur penempatannya,disini saya coba menambahkan beberapa komponen pada Form yaitu:
1. Memo.
2. Edit.
3. Button.
4. Komponen DosCommand.
dan saya posisikan masing-masing komponen tersebut dan tampak seperti gambar dibawah ini
penambahan komponen pada form
Menambahkan beberapa komponen

Selanjutnya setelah saya posisikan masing-masing komponen saya lanjut ke Form dimana akan saya coba untuk membuat suatu procedure untuk tombol button,procedure tersebut apabila dikilik button maka apa yang ada di kolom edit dimana kolom tersebut adalah suatu perintah daripada cmd windows akan ditampilkan pada memo.
Saya coba klik 2X button dan akan tampil kode editor daripada delphi dan tentunya dengan mengklik 2X button secara otomatis kode editor membuat suatu procedure button tersebut jadi saya tinggal coba tambahkan beberapa kodingan.
Untuk procedure button tersebut saya coba buat sebagai berikut:

procedure TForm1.Button1Click(Sender: TObject);
var
  cmd: String;
begin
  cmd := Edit1.Text;
  DosCommand1.CommandLine := cmd;
  DosCommand1.OutputLines := Memo1.Lines;
  DosCommand1.Execute;
end;  

menambahkan kode pada procedure
Menambahkan sedikit kode pada procedure button

Kemudian setelah saya kasih sedikit koding pada procedure diatas saya coba run atau tekan F9 untuk mencobanya,dan disini saya akan mencobanya dengan perintah route print maka pada kolom edit saya coba masukan route print kemudian tekan tombol button dan hasilnya ...
test hasil penambahan komponen dos command
Hasil test run dengan menggunakan komponen Dos Command

Demikian postingan kali ini dari saya tentang cara bagaimana capture console menggunakan suatu komponen Dos Command dan tentunya akan lebih mudah penggunaannya,semoga postingan ini bermanfa'at dan bisa teman-teman kembangkan.

Oke Salam Blogger and Happy Koding.

12 January 2016

Cara Install Komponen Dos Command Di Delphi

Kali ini saya akan coba membuat postingan tentang cara menginstall suatu komponen pada delphi yang mana biasanya untuk installan komponen para developer memberikannya dalam suatu packer atau berekstensikan file *.dpk,jadi cara menginstallnya kita hanya membuka file *.dpk tersebut dan kemudian klik tombol install.Sedangkan untuk kali ini sesuai dengan judul postingan kali ini saya akan coba menginstall komponen DosCommand dimana file tersebut berekstensikan file *.pas,tentu saja cara untuk penginstallannya berbeda dengan yang berekstensikan file *.dpk.Dan tentunya tidak sedikit juga para developer memberikan suatu installan komponen untuk delphi yang berekstensikan file *.pas.

Langkah Penginstallan

Baiklah saya akan coba langsung ke cara penginstallan file *.pas dimana saya mengambil salah satu contoh sesuai dengan judul yaitu komponen DosCommand,teman-teman bisa cari filenya dan download lewat mesin pencari google.Setelah kita download file tersebut biasanya file tersebut dalam suatu zip saya coba ekstak dulu ke direktori source pada dephi dimana saya install aplikasi delphinya,biar nanti lebih mudah untuk pencarian pada librarynya.
Setelah di ekstrak saya buka aplikasi delphi kemudian pada menu pilih Component dan klik install Component
menu componen delphi
Menu Komponen

Setelah itu akan muncul form install Component saya klik pada into new package dan kemudian pada Unit file name klik tombol browse yang ada disamping kanannya dimana saya akan pilih file doscommand yang berektensikan file *.pas yang telah saya ekstak tadi.
form install component
Form Install Komponen

Pada kolom Package file name dan Package description isi dengan bebas tetapi akan lebih baik jika sesuai dengan komponen yang akan diinstall disini saya isi dengan doscomand,setelah itu klik tombol OK dan kemudian akan muncul form Confirm kemudian saya klik tombol Yes
form confirm install component
Form Konfirmasi Komponen Baru yang Diinstal

Kemudian akan muncul kembali form Information yang mana bahwa komponen DosCommand telah terinstall pada delphi saya klik OK.Dan untuk tempatnya dimana komponen DosCommand tersebut berada pada palette komponen delphi yaitu berada di palette Sample saya coba klik palette tersebut dan Komponen DosCommand telah berhasil terinstall atau ditambahkan di palette tersebut.
doscommand component
Letak Komponen DosCommand

Demikianlah cara install Komponen DosCommand dan ini adalah merupakan salah satu contoh cara penginstallan komponen yang berekstensikan file *.pas.
Ahir kata untuk postingan kali ini Semoga postingan ini bisa bermanfa'at.

Oke Happy Blogger and Koding,Salam.

09 January 2016

Capture Console Pada Memo Dengan Function Pada Delphi

Setelah kemarin saya coba memposting tentang cara capture console dengan menggunakan procedure sekarang saya akan coba memposting tentang cara capture console dengan function.Tujuannya sama yaitu supaya hasil pada console ditampilkan pada komponen memo yang ada di delphi.
Baiklah tidak perlu lagi saya jelaskan kegunaanya tetapi kalau bila perlu apa kegunaanya yang lebih detail bisa dicari referensi nya melalui mesin pencari GOOGLE.Sekarang saya akan langsung ke cara pembuatannya.

Langkah Pembuatan

Pertama biasa kita buka aplikasi delphinya setelah itu pada Form yang baru saya coba tambahkan komponen:
  1. Memo.
  2. Edit.
  3. Button.

Saya buat tampilannya seperti gambar di bawah ini.
Tata letak komponen pada delphi
Tata Letak Komponen Pada Form

Setelah saya posisikan komponen dan sedikit pengaturan pada object inspector saya setting lanjut ke bagian halaman kode edit dimana saya akan coba memasukan sebuah function nya agar supaya komponen memo bisa menampilkan apa yang ditampilkan pada console windows  yang saya perintahkan.
berikut ini adalah kode functionnya
function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of AnsiChar;
  BytesRead: Cardinal;
  WorkDir: string;
  Handle: Boolean;
begin
  Result := '';
  with SA do begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
  try
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE);
      hStdOutput := StdOutPipeWrite;
      hStdError := StdOutPipeWrite;
    end;
    WorkDir := Work;
    Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
                            nil, nil, True, 0, nil,
                            PChar(WorkDir), SI, PI);
    CloseHandle(StdOutPipeWrite);
    if Handle then
      try
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin
            Buffer[BytesRead] := #0;
            Result := Result + Buffer;
          end;
        until not WasOK or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
    CloseHandle(StdOutPipeRead);
  end;
end;

Dan kode tersebut saya coba tempatkan di bawah implementation
Penempatan function pada kode editor delphi
Penempatan Function

Setelah itu kita kembali ke Form dan coba klik 2X pada Button untuk membuat suatu eventnya dan berikut ini adalah event atau procedure untuk button tersebut
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text := GetDosOutput(Edit1.Text);
end;

Dimana tujuannya adalah pada saat kita klik button tersebut dan tentunya pada edit komponen telah saya tulis suatu perintah maka akan ditampilkan pada memo.

Test Run

Setelah saya tulis procedure untuk button coba saya run atau tekan tombol F9 pada keybourd,kemudian pada edit komponen saya coba masukan perintah route print dan kemudian tekan tombol Button dan munculah pada memo sesuai dengan perintah di edit komponen tadi.
Test run dengan function pada delphi
Test Run

Demikianlah cara capture console dengan menggunakan function,semoga postingan ini bisa bermanfa'at dan bisa teman-teman kembangkan lagi begitu juga capture console dengan menggunakan procedure.

Salam Blogger and Happy Coding.

06 January 2016

Cara Capture Console ke Memo secara Realtime

Sekarang akan saya coba membuat postingan masih dalam tutorial delphi bagaimana supaya agar kita bisa mengcapture dari console windows tampil dalam memo.Sebenarnya ada beberapa cara untuk mengcapture console ke memo bisa dengan menggunakan komponen yang dinamakan DosCommand,bisa dengan membuat suatu procedure dan juga bisa dengan cara membuat function.Pada kali ini saya akan mencoba membuatnya dengan suatu procedure,dan mungkin nanti saya akan coba juga dengan menggunakan function dan komponen doscommand.Tentunya cara dari ketiga macam tersebut diatas mempunyai kelebihan dan kekurangan masing-masing.

Langkah Untuk Capture Console Ke Memo

Baiklah saya akan langsung mencobanya,yang pertama kita buka aplikasi delphinya dan saya coba tambahkan komponen pada Form tersebut:
1.Memo.
2.Editbox.
3.Button.
saya buat posisi nya dalam Form dari masing-masing komponen seperti gambar di bawah ini.

Penambahan komponen pada form
Posisi komponen pada Form baru

Kemudian setelah kita letakan posisi komponen pada Form kita ganti untuk caption Button dengan RUN dan setelah itu langsung menuju pada kode editornya kita buat procedurenya untuk capture console terlebih dahulu, dimana procedure nya adalah sebagai berikut:

procedure CaptureConsoleOutput(const ACommand, AParameters: String; AMemo: TMemo);
 const
   CReadBuffer = 2400;
 var
   saSecurity: TSecurityAttributes;
   hRead: THandle;
   hWrite: THandle;
   suiStartup: TStartupInfo;
   piProcess: TProcessInformation;
   pBuffer: array[0..CReadBuffer] of Char;
   dRead: DWord;
   dRunning: DWord;
 begin
   saSecurity.nLength := SizeOf(TSecurityAttributes);
   saSecurity.bInheritHandle := True;
   saSecurity.lpSecurityDescriptor := nil;
   if CreatePipe(hRead, hWrite, @saSecurity, 0) then
   begin
     FillChar(suiStartup, SizeOf(TStartupInfo), #0);
     suiStartup.cb := SizeOf(TStartupInfo);
     suiStartup.hStdInput := hRead;
     suiStartup.hStdOutput := hWrite;
     suiStartup.hStdError := hWrite;
     suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;  
     suiStartup.wShowWindow := SW_HIDE;
     if CreateProcess(nil, PChar(ACommand + ' ' + AParameters), @saSecurity,
       @saSecurity, True, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup, piProcess)
       then
     begin
       repeat
         dRunning  := WaitForSingleObject(piProcess.hProcess, 100);      
         Application.ProcessMessages();
         repeat
           dRead := 0;
           ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);        
           pBuffer[dRead] := #0;

           OemToAnsi(pBuffer, pBuffer);
           AMemo.Lines.Add(String(pBuffer));
         until (dRead < CReadBuffer);
       until (dRunning <> WAIT_TIMEOUT);
       CloseHandle(piProcess.hProcess);
       CloseHandle(piProcess.hThread);
     end;
     CloseHandle(hRead);
     CloseHandle(hWrite);
   end;
end;

Letakan procedure tersebut dibawah implementation

penempatan procedure capture console pada delphi
Penempatan Procedure pada delphi
Setelah kita buat procedure tersebut diatas kemudian pada Form klik button 2 kali untuk membuat procedure Button,yang mana procedure ini akan mengeksekusi perintah yang ada pada editbox dan hasilnya akan ditampilkan pada Memo,dan untuk procedure nya seperti ini

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  CaptureConsoleOutput(Edit1.Text, Edit2.Text, Form1.Memo1);
end; 

Setelah kita buat procedure nya kita coba run atau tekan F9 dan coba kita test dengan perintah route PRINT

test run capture console dengan delphi
Test Run Capture Console
Demikianlah cara capture console dengan menggunakan procedure, silahkan kembangkan lagi semoga bermanfa'at.Lain waktu saya akan coba dengan  menggunakan  function untuk capture consolenya.

Happy Coding.