API - construindo um programa com janela, edit, botao e label so com a API do windows

Top  Previous  Next

program Pequeno;

 

// Neste programa todas as janelas são criadas utilizando-se a API o que torna o aplicativo

// final extremamente pequeno

 

uses Windows, Messages, SysUtils;

 

var

  Instancia, Fonte, Handle,  wNLabel, wName, Sobre: Integer;

  Classe  : TWndClassA;

  Mensagem: TMsg;

 

//--- Procedure chamada a cada 1 milisegundo para revelar o password oculto ---

procedure Timer;

var

  Posi : TPoint;

  HWin : THandle;

  Paswd: array[0..63of Char;

begin

 GetCursorPos(Posi);

 HWin := WindowFromPoint(Posi);

 if SendMessage(HWin, EM_GETSEL, 00) <> 0 then // captura o texto de uma edit no programa focado

  begin

   SendMessage(HWin, WM_GETTEXT, 64, Longint(@Paswd));

   SetWindowText(wName,Paswd);           //Coloca o Texto capturado no Edit

  end

end;

 

//--- Sair do programa ---

procedure Sair;

begin

  DeleteObject(Fonte);                    // Libera recursos do sistema

  UnRegisterClass('Simples', Instancia);  // Remove Classes da memória

  ExitProcess(Instancia);                 // Termina o Processo

end;

 

//--- Definição dos parâmetros do messagebox ---

procedure MostrarAbout;

var

  Parametros: TMsgBoxParams;

begin

  with Parametros do

  begin

    cbSize             := SizeOf(Parametros);

    hwndOwner          := handle;

    hInstance          := Instancia;

    lpszText           := 'Exemplo do programa feito todo na "mão"';

    lpszCaption        := 'Sobre';

    dwStyle            := MB_OK or MB_ICONINFORMATION;

    dwContextHelpId    := 0;

    lpfnMsgBoxCallback := nil;

    dwLanguageId       := LANG_NEUTRAL;

  end;

  MessageBoxIndirect(Parametros); //Mostramos o messagebox

end;

 

//--- WindowProc, processamos todas as mensagens do windows enviadas ---

function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;

begin

  //Garante que todas as mensagens que nos enviam são processadas

  Result := DefWindowProc(hWnd, uMsg, wParam, lParam);

 

  //Processando mensagens específicas

  case uMsg of

    WM_Destroy: Sair;                   // Chamamos a procedure para sair

    WM_TIMER  : Timer;                  // Se recebemos a mensagem de timer

    WM_COMMAND: if lparam = Sobre then  // Mostramos o AboutBox

                  MostrarAbout;

  end;

end;

 

/// Programa principal

 

begin

  Instancia := hInstance;         //Instancia do programa

 

  //--- Criamos a Fonte do aplicativo ---

  // Para maiores detalhes consulte o Win32Programmer's Reference

  Fonte := CreateFont(-12000400000DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,

                      DEFAULT_QUALITY,DEFAULT_PITCH + FF_DONTCARE, 'MS Sans Serif');

 

  //--- Definimos a janela para depois registra-la ---

  with Classe do

  begin

    Style         := CS_CLASSDC or CS_PARENTDC;         // estilo

    lpfnWndProc   := @WindowProc;                       // Aponta para função q processa as msgs

    hInstance     := Instancia;                         // instância da aplicação

    hIcon         := LoadIcon(hInstance, 'MAINICON');   // ícone

    hbrBackGround := COLOR_BACKGROUND;                  // cor

    lpszClassName := 'Simples';                         // Nome

    hCursor       := LoadCursor(0, IDC_ARROW);          // Cursor

  end;

 

  RegisterClass(Classe);         //Registramos a janela

 

  //Iniciamos a criação da Janela e os outros componentes

  //--- Criamos a janela principal ---

  //Handle := Handle para a janela principal

  Handle := CreateWindowEx(WS_EX_WINDOWEDGE + WS_EX_TOPMOST,

                           'Simples',              // Nome da Classe

                           'Programa Simples',     // titulo da janela

                           WS_SYSMENU or           // Estilo da janela

                           WS_VISIBLE or           // Visivel ou não

                           WS_MINIMIZEBOX,         // Se pode minimizar

                           0,0,                    // Coordenadas Top e Left

                           179,100,                // Dimensões da janela

                           0,0,                    // Consulte Win32 Programmer's reference

                           Instancia,              // Instância do Aplicativo

                           nil);

 

  //--- Criando o Label ---

  wNLabel := CreateWindow('Static''Texto:', WS_VISIBLE + WS_CHILD, 3,3108,13, Handle, 0, Instancia, nil);

 

  //--- Criando o Botão ---

  Sobre := CreateWindow('Button',               //Nome da Classe

                        'Sobre',                //Caption do Botão

                        WS_VISIBLE or WS_CHILD,

                        3,44,                   // Coordenadas Left e Top

                        167,26,                 //Dimensões do Botão

                        handle,                 //Handle do Aplicativo

                        0,

                        Instancia,              //Intância da aplicação

                        nil);

 

  //--- Criando o Edit ---

  wName := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit''', WS_VISIBLE + WS_CHILD + SS_LEFT3,18167,21, Handle, 0, Instancia, nil);

 

  SendMessage(wNLabel, WM_SETFONT, Fonte, wNLabel);

  SendMessage(wName  , WM_SETFONT, Fonte, wName);

 

  //--- Criamos um timer com intervalo de 1 milisegundo ---

  SetTimer(handle, 01, nil);

 

  //--- Loop que recebe e processa as mensagens que chegam ao programa ---

  while (GetMessage(Mensagem, Handle, 00)) do

  begin

    TranslateMessage(Mensagem);

    DispatchMessage(Mensagem);

  end;

end.