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:
- Memo.
- Edit.
- Button.
Saya buat tampilannya seperti gambar di bawah ini.
![]() |
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 |
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 |
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.
No comments:
Post a Comment