Arsip: Windows Kosong dengan WINAPI


by Tbawor in Sistem more 13 years ago 2499
Ketika membuka Delphi maka kita langsung dihadapkan pada sebuah form windows kosong yang jika di running akan menghasilkan sebuah aplikasi Windows yang bisa langsung dijalankan secara mandiri (executable). Sangat mudah bukan..? Inilah kekuatan pemrograman visual sangat mudah dipelajari. Waktu jamannya Pascal Compiler untuk membuat jendela kosong pusingnya setengah mati dan repotnya mengetikan puluhan baris kode hanya untuk menghasilkan sebuah Windows kosong. Bagi rekan2 yang ingin bernostalgia dan mempelajari dasar pembuatan Windows bisa mempelajari SourceCode berikut ini.

Code ini harus diketikan pada main project SourceCode. Silakan Running kode program ini dan lihat hasil besar file kompilasinya. Hasilnya menakjubkan, sangat kecil bukan dan memang inilah hasil kompilasi asli file executable Windows sebelum dibungkus dengan VCL.
Dan hasilnya bisa di running pada semua versi Windows bahkan pada komputer yang tidak terinstall Delphi karena tidak memerlukan file Borland Package Library (bpl), semua fungsi asli hanya menggunakan fungsi WinAPi dari Library Windows.
program APIWindow;
//Membuat Form Windows Kosong dg fungsi WINAPI  tanpa menggunakan VCL

uses
Windows,
Messages;
//{$R *.RES} resources directive

{Fungsi API untuk pemanggilan Windows}
function WindowProc(TheWindow: HWnd; TheMessage, WParam,
LParam: Longint): Longint; stdcall;
begin
case TheMessage of
{upon getting the WM_DESTROY message, we exit the application}
WM_DESTROY:  begin
PostQuitMessage(0);
Exit;
end;
end;
{call the default window procedure for all unhandled messages}
Result := DefWindowProc(TheWindow, TheMessage, WParam, LParam);
end;
{ Register the Window Class }
function RegisterClass: Boolean;
var
WindowClass: TWndClass;
begin
{setup our new window class}
WindowClass.Style := CS_HREDRAW or CS_VREDRAW; {set the class styles}
WindowClass.lpfnWndProc := @WindowProc; {our window procedure}
WindowClass.cbClsExtra := 0; {no extra class memory}
WindowClass.cbWndExtra := 0; {no extra window memory}
WindowClass.hInstance := hInstance; {the application instance}
WindowClass.hIcon := LoadIcon(0, IDI_APPLICATION); {load a predefined logo}
WindowClass.hCursor := LoadCursor(0, IDC_UPARROW); {load a predefined cursor}
WindowClass.hbrBackground := COLOR_WINDOW; {use a predefined color}
WindowClass.lpszMenuName := nil; {no menu}
WindowClass.lpszClassName := 'TestClass'; {the registered class name}
{now that we have our class set up, register it with the system}
Result := Windows.RegisterClass(WindowClass) <> 0;
end;
var
TheMessage: TMsg;
OurWindow: HWND;
begin
{register our new class first}
if not RegisterClass then
begin
MessageBox(0,'RegisterClass failed',nil,MB_OK);
Exit;
end;
{now, create a window based on our new class}
OurWindow := CreateWindowEx(0, {no extended styles}
'TestClass', {the registered class name}
'Window from WINAPI', {the title bar text}
WS_OVERLAPPEDWINDOW or {a normal window style}
WS_VISIBLE, {initially visible}
10, {horizontal position}
10, {vertical position}
500, {window width}
500, {window height}
0, {no parent window}
0, {no menu}
hInstance, {the application instance}
nil {no additional information}
);
{if our window was not created successfully, exit the program}
if OurWindow=0 then
begin
MessageBox(0,'CreateWindow failed',nil,MB_OK);
Exit;
end;
{the standard message loop}
while GetMessage(TheMessage,0,0,0) do
begin
TranslateMessage(TheMessage);
DispatchMessage(TheMessage);
end;
end.
Syntax Highlighted with https://pascal-id.org/syntax
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com