Janela do programa;
{
Este é um exemplo de fazer um aplicativo
sem usar a unidade de formulários. Forms.Pas é o
Unidade Delphi que torna seus programas tão malditos
enorme! Forms.PAS tem todo o código para traduzir
os formulários que você cria com Delphi com componentes
no Windows. Se você me perguntar, qualquer coisa que acrescente
200k (@%#$!) Para o seu aplicativo deve ser algum maldito
código ineficiente.
Gordy <[email protected]>
www.jps.net/gfody
}
usa janelas, mensagens;
{$ R *.res}
var
wclass: twndclass; // Classe struct para janela principal
hfont, // Handle of Font
Hinst, // Handle of Program (Hinstance)
Alça, // identificador da janela principal
hencrypt, // cabo de botão de criptografia
HDECRYPT, // Handle of Decrypt Button
hedit, // identificador de edição principal
hlabel, // identificador de senha etiqueta
HPW: HWND; // Handle of Senha Edit
Msg: tmsg; // estrutura de mensagem
Dencrypt,
ddecrypt: ponteiro; // Procedimentos de botão padrão
(*------------------------------------------------ *)
// isso alinha tudo
procedimento redimensionado;
var
RCT: Trect;
começar
GetWindowrect (Handle, RCT);
MoveWindow (HPW, 230,5, RCT.Right-rct.Left-245,24, verdadeiro);
Movewindow (hedit, 5,34, rct.right-rct.left-20, rct.bottom-rct.top-66, true);
fim;
(*------------------------------------------------ *)
// isso é limpar e interromper o programa
desligamento do procedimento;
começar
DeleteObject (hfont);
Não registro ('classe de amostra', hinst);
Exitprocess (Hinst); // Programa final
fim;
(*------------------------------------------------ *)
// descriptografa o texto em hedit com o texto em HPW
Procedimento descriptografar;
var
x, i, // count variáveis
Stext, SPW: Inteiro; // Tamanho do texto, PW
Texto, pw: pchar; // buffer para texto, PW
começar
stext: = getWindowTextLength (hedit) +1;
spw: = getWindowTextLength (hpw) +1;
GetMem (texto, Stext);
GetMem (PW, SPW);
GetWindowText (hedit, texto, Stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Inicialize a contagem
para i: = 0 para stext-2 fazer
começar
Texto [i]: = chr (ord (texto [i])-ord (pw [x]));
Inc (x);
se x = (spw-1) então x: = 0;
fim;
SetWindowText (hedit, texto);
Freemem (texto);
Freemem (PW);
fim;
(*------------------------------------------------ *)
// criptografa o texto em hedit com o texto em hpw
procedimento criptografado;
var
x, i, // count variáveis
Stext, SPW: Inteiro; // Tamanho do texto, PW
Texto, pw: pchar; // buffer para texto, PW
começar
stext: = getWindowTextLength (hedit) +1;
spw: = getWindowTextLength (hpw) +1;
GetMem (texto, Stext);
GetMem (PW, SPW);
GetWindowText (hedit, texto, Stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Inicialize a contagem
para i: = 0 para stext-2 fazer
começar
Texto [i]: = chr (ord (texto [i])+ord (pw [x]));
Inc (x);
se x = (spw-1) então x: = 0;
fim;
SetWindowText (hedit, texto);
Freemem (texto);
Freemem (PW);
fim;
(*------------------------------------------------ *)
// Esta função processa todas as mensagens enviadas para o botão Encrypt
função EncryptProc (HWND, MSG, WPARAM, LPARAM: LONGINT): LONGINT; stdcall;
var
I: Inteiro;
começar
// sempre passa a mensagem para o procedimento padrão
Resultado: = CallWindowProc (DENCRYPT, HWND, MSG, WPARAM, LPARAM);
caso msg de
// Se o usuário pressiona a guia Somos gunna, mude o
// Concentra -se no botão descriptografar.
Wm_keydown: se wparam = 9 então setFocus (hDecrypt);
fim;
fim;
(*------------------------------------------------ *)
// Esta função processa todas as mensagens enviadas para o botão descriptografar
função decryptproc (hwnd, msg, wparam, lparam: longnt): longnt; stdcall;
começar
// sempre passa a mensagem para o procedimento padrão
Resultado: = CallWindowProc (DENCRYPT, HWND, MSG, WPARAM, LPARAM);
caso msg de
// Se a guia Pressionar o usuário, somos o interruptor Gunna
// O foco de volta ao botão Encrypt.
Wm_keydown: se wparam = 9 então setfocus (hencrypt);
fim;
fim;
(*------------------------------------------------ *)
// Esta função processa todas as mensagens enviadas para nossa janela principal
WindowProc de função (HWND, MSG, WPARAM, LPARAM: LONGINT): LONGINT; stdcall;
começar
// sempre passa a mensagem para o procedimento padrão
Resultado: = DEFWindowProc (HWND, MSG, WPARAM, LPARAM);
caso msg de
Wm_size: redimensionar;
// Quando os botões são clicados, a mensagem é passada para
// A janela dos pais, então lidamos com isso aqui.
Wm_command: se lparam = hencrypt, então criptografar
caso contrário, se lparam = hdecrypt e descriptografar;
Wm_destroy: desligamento;
fim;
fim;
(*------------------------------------------------ *)
// Esta é a principal função do programa (Winmain)
começar
hinst: = getModuleHandle (nulo); // Obtenha a instância do aplicativo
// hinstance retorna zilch
com wclass do
começar
Estilo: = cs_parentdc;
hicon: = loadicon (hinst, 'mainicon');
LPFNWNDPROC: = @WindowProc;
hinstance: = hinst;
hbrbackground: = color_btnface+1;
lpszclassName: = 'Classe de amostra';
hcursor: = loadcursor (0, idc_arrow);
fim;
// Uma vez que nossa aula estiver registrada, nós
// pode começar a fazer janelas com ele
Registerclass (Wclass);
// Crie nossa janela principal
Alça: = createWindow (
'Classe de amostra', // Nome da classe registrada
'Encrypter - por: Gordy', // Título da janela
Ws_overlappedwindow ou // estilo de janela básico
Ws_visible, // torna visível
10, // esquerda
10, // TOP
400, // Largura
300, // altura
0, // Janela da janela dos pais
0, // Handle of Menu
Hinst, // Instância do aplicativo
nil); // estrutura para dados de criação
// Crie o botão Crypt
Hencrypt: = CreateWindow (
'Botão',
'Encrypt',
Ws_visible ou ws_child ou bs_pushlike ou bs_text,
5,5,65,24, alça, 0, hinst, nil);
// Crie o botão descriptografar
HDECRYPT: = CreateWindow (
'Botão',
'Descriptografar',
Ws_visible ou ws_child ou bs_pushlike ou bs_text,
75,5,65,24, alça, 0, hinst, nil);
// Crie a edição principal
hedit: = createwindowex (
Ws_ex_clientEdge, // Este estilo ex é para a borda chanfrada
'Editar',
'',
Ws_visible ou ws_child ou es_left ou es_multiline ou es_wantreturn ou es_autovscroll ou ws_vscroll,
5,34.380.234, alça, 0, hinst, nil);
// Crie a edição de senha
hpw: = createwindowex (
Ws_ex_clientEdge,
'Editar',
'',
Ws_visible ou ws_child ou es_left ou es_autohscroll ou es_password,
230,5,155,24, alça, 0, hinst, nil);
hlabel: = createWindow (
'Estático',
'Senha:',
Ws_visible ou ws_child ou ss_left,
160,10,70,20, alça, 0, hinst, nil);
// Crie uma fonte personalizada para nossa janela, caso contrário
// Tudo usaria a fonte do sistema (blech!)
hfont: = createfont (
-12, // altura
0, // largura
0, // ângulo de rotação
0, // orientação
0, // Peso
0, // itálico
0, // sublinhado
0, // Strike Out
Default_charset, // conjunto de char
Out_default_precis, // Precision
Clip_default_precis, // recorte
Default_quality, // qualidade de renderização
Default_pitch ou FF_DONTCARE, // Pitch & Family
'MS Sans serif'); // Nome da fonte
// Defina as fontes para todos os nossos controles
SendMessage (Hencrypt, WM_SETFont, Hfont, 0);
SendMessage (hdecrypt, wm_setfont, hfont, 0);
SendMessage (hedit, wm_setfont, hfont, 0);
SendMessage (hpw, wm_setfont, hfont, 0);
SendMessage (hlabel, wm_setfont, hfont, 0);
// Botão de criptografia de subclasse (atribua -o a uma janela personalizada)
DENCRYPT: = ponteiro (getwindowlong (Hencrypt, gwl_wndproc));
SetWindowlong (Hencrypt, gwl_wndproc, longInt (@EncryptProc));
// Botão de descriptografar da subclasse
ddecrypt: = ponteiro (getwindowlong (hdecrypt, gwl_wndproc));
SetWindowlong (HDECRYPT, GWL_WNDPROC, LONGINT (@DECRYPTPROC));
// A razão pela qual não subclasse os controles de edição aqui
// é porque eles não fazem nada de costume. Se eu quisesse
// eles para apitar ou algo assim sempre que você digitava um "g" então
// eu os subclasse.
// Concentre -se no primeiro controle (caso contrário, as pessoas sem mouse estão parafusadas)
SetFocus (Hencrypt);
// Agora, Loop GetMessage para processar cada mensagem
// Lista de mensagens da nossa janela principal. Cada vez que o principal
// janela recebe uma mensagem é adicionada à lista, então
// Este loop aqui acabará processando -o.
enquanto (getMessage (msg, manipulação, 0,0)) sim
começar
TRANTLATEMESSAGE (MSG); // Traduza qualquer msg de teclado
DispatchMessage (MSG); // Envie para o nosso WindowProc
fim; // para processamento.
fim.