Windows API ile özgür kalın....

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Windows API ile özgür kalın....

Mesaj gönderen Lost Soul »

Arkadaşlar şu sıralar yıllardır merak edip de bi türlü somut uğraşlar veremediğim Windows API konusuyla uğraşmaya başladım.
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.
Program iö
çinde fuzui kodlar da var kanımca artık onları da siz temizlersiniz :P

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.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Aslında API ile ilgili bir çok Türkçe kaynak var. Arandığında kolaylıkla bulunabiliyor.

PDF formatındaki şu dökümana bakınız

DOC formatındaki şu dökümanı da indirip inceleyebilirsiniz.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

Hocam kaynaklar için çok teşekkür ederim. Bu tip dökümanları çok arıyordum. Hatta hepsiburada kitapyurdu gibi sitelerde bulsam satın alacaktım. Sırf o yüzden her mesajı deneme yanılma ile çöümlemeye çalışıyordum. Beni bir sürü işkenceden kurtardınızı. Tekrar teşekkür ederim.
memiky
Üye
Mesajlar: 116
Kayıt: 17 Kas 2004 01:52
İletişim:

Mesaj gönderen memiky »

Losts Soul,
Bilindiği gibi Delphi’de API fonksiyonlarını kullanmak son derece kolaydır. Çünkü Delphi ile gelen Windows ve ShellApi gibi bir kaç Unit sayesinde Api fonksiyonlarını Delphi fonksiyonuymuş gibi kullanmak mümkün olmaktadır. Aşağıda verdiğim linkteki yazıda API fonksiyonlarının Delphi'nin aracı Unit'lerini kullanmadan nasıl kullanılabileceğini anlatıyorum.

http://www.memikyanik.com/makeleler/del ... eklare.htm
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

Memik hocam bilgi için teşekkürler örneğinizi inceliyorum şu an.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Lost Soul yazdı:Memik hocam bilgi için teşekkürler örneğinizi inceliyorum şu an.
windows apileri gömdü. şimdi gelin avalon öğrenin diyorlar. http://www.joelonsoftware.com adresinde

microsoft api savaşını neden kaybetti diye bir yazı var. okursanız ne demek istediğimi anlarsınız.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla