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..63] of Char; begin GetCursorPos(Posi); HWin := WindowFromPoint(Posi); if SendMessage(HWin, EM_GETSEL, 0, 0) <> 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(-12, 0, 0, 0, 400, 0, 0, 0, DEFAULT_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,3, 108,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_LEFT, 3,18, 167,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, 0, 1, nil);
//--- Loop que recebe e processa as mensagens que chegam ao programa --- while (GetMessage(Mensagem, Handle, 0, 0)) do begin TranslateMessage(Mensagem); DispatchMessage(Mensagem); end; end. |