Malum delphi TObject ve TGraphic temel sınıflarıyla bizlere bir çok kolaylık sağlamıştır. Ancak her kolaylığı bir de zorluğu vardır bildiğimiz üzre.
Aşağıda Delphi TFORM nesnesini kullanmadıan kendi frormumuzu oluşturmamız için tümüyle api lerden faydalınalarak yaptığım örnek bir form uygulaması var.
Örnek çok basit. Hatta hiç bir özelliği yok ama api kullanılarak mesajların işlenmesi ile ilgili olarak faydası dokunacağına inanyoum
API kullanımı konusunda kaynak (özellikle türkçe) sıkıntısıhad safada.
Aşağıdaki kod bloğunu .dpr olarak kaydedin ve çalıştırın.
delphi Form uygulaması 400 kb tutarken bu program 45 kb tutuyor

API lerle ilgili bu gün sabah başlattığım çalışmayı geliştirdikçe sizinle paylaşacağım.
Kod: Tümünü seç
program MYWINDOW;
//{$APPTYPE CONSOLE}
uses Windows, Messages, SysUtils;
function WndProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
ps : PAINTSTRUCT;
dc : hDC;
Rect : TRECT;
begin
case uMsg of
WM_PAINT:
begin
DC:=BeginPaint(hwnd,ps);
GetClientrect(hwnd,rect);
DrawText(dc,pchar(timetostr(now)+'Deneme'),-1,rect,dt_singleline+dt_center+dt_vcenter);
endpaint(hwnd,ps);
end;
WM_CLOSE : halt;
WM_DESTROY:
begin
PostQuitMessage(0);
end;
end; // Case;
//tform(hwnd).Perform(umsg,wparam,lparam) ;
Result:= DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
CONST
APP_NAME = 'PENCEREM';
VAR
PENCERE : TWndClass;
P_HWND: HWND = 0;
MESAJLAR : LONGBOOL;
msg: TMsg;
begin
// Register the window class for the main window.
PENCERE.style:= CS_HREDRAW+CS_VREDRAW;
PENCERE.lpfnWndProc:= @WndProc;
PENCERE.cbClsExtra:= 0;
PENCERE.cbWndExtra:= 0;
PENCERE.hInstance:= hInstance;
PENCERE.hIcon:= 0;
PENCERE.hCursor:= 0;
PENCERE.hbrBackground:= GetStockObject(BLACK_BRUSH);
PENCERE.lpszMenuName:= nil;
PENCERE.lpszClassName:=APP_NAME;
if RegisterClass(PENCERE) = 0 then Halt(1);
// Create the main window.
P_hwnd:= CreateWindow(APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), GetDesktopWindow,
0, hInstance, nil);
ShowWindow(P_hwnd, SW_SHOWDEFAULT);
UpdateWindow(P_hwnd);
// If the main window cannot be created, terminate
// the application.
if P_hwnd = 0 then Halt(1);
//ReleaseDC(p_hwnd,
// MESAJ İŞLEME
while MESAJLAR do
begin
MESAJLAR:= GetMessage(msg, P_hwnd, 0, 0);
DispatchMessage(msg);
//application.ProcessMessages;
end;
end.
çinde fuzui kodlar da var kanımca artık onları da siz temizlersiniz

Bu arada API konusunda anlatımlı dökümanları olan arkadaşlar var ise paylaşımları halinde minnetar olurum. fatih_bah@hotmail.com
Saygılarımla.