Ventana del programa;
{
Este es un ejemplo de hacer una aplicación
sin usar la unidad de formularios. Forms.pas es el
Unidad Delphi que hace que sus programas sean tan malditos
¡enorme! Form.pas tiene todo el código para traducir
Los formularios que crea con Delphi con componentes
en Windows. Si me preguntas, cualquier cosa que agrega
200k (@%#$!) A tu aplicación tiene que ser algo maldito
código ineficiente.
Gordy <[email protected]>
www.jps.net/gfody
}
usa Windows, mensajes;
{$ R *.res}
varilla
WCLASS: TwndClass; // estructura de clase para la ventana principal
hfont, // mango de fuentes
Hinst, // Mango del programa (Hinstance)
Mango, // mango de la ventana principal
hencrypt, // mango del botón de cifrado
hdecrypt, // mango del botón Decrypt
hedit, // mango de la edición principal
Hlabel, // Manejo de la etiqueta de contraseña
HPW: HWND; // mango de contraseña editar
MSG: TMSG; // struct de mensajes
dencrypt,
ddecrypt: puntero; // procedimientos de botón predeterminados
(*------------------------------------------------ *)
// Esto alinea todo
cambiar el tamaño del procedimiento;
varilla
RCT: Trect;
comenzar
Getwindowrect (mango, ECT);
MoveWindow (HPW, 230,5, RCT.Right-Rct.Left-245,24, verdadero);
MoveWindow (hedit, 5,34, rct.right-rct.left-20, rct.bottom-rct.top-66, true);
fin;
(*------------------------------------------------ *)
// Esto es para limpiar y detener el programa
apagado del procedimiento;
comenzar
DeleteObject (hfont);
No registerClass ('clase de muestra', hinst);
ExitProcess (Hinst); // Finalizar el programa
fin;
(*------------------------------------------------ *)
// descifra el texto en Hedit con el texto en HPW
procedimiento descifrar;
varilla
x, i, // contar variables
Stext, SPW: entero; // Tamaño del texto, PW
Texto, PW: PCHAR; // buffer para texto, PW
comenzar
Stext: = getWindowTextLength (hedit) +1;
spw: = getWindowTextLength (HPW) +1;
GetMem (texto, Stext);
GetMem (PW, SPW);
GetWindowText (hedit, texto, stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Inicializar el recuento
para i: = 0 a stext-2 do
comenzar
Texto [i]: = chr (ord (texto [i])-ord (pw [x]));
Inc (x);
si x = (spw-1) entonces x: = 0;
fin;
SetWindowText (hedit, texto);
Freemem (texto);
Freemem (PW);
fin;
(*------------------------------------------------ *)
// cifra el texto en Hedit con el texto en HPW
procedimiento encrypt;
varilla
x, i, // contar variables
Stext, SPW: entero; // Tamaño del texto, PW
Texto, PW: PCHAR; // buffer para texto, PW
comenzar
Stext: = getWindowTextLength (hedit) +1;
spw: = getWindowTextLength (HPW) +1;
GetMem (texto, Stext);
GetMem (PW, SPW);
GetWindowText (hedit, texto, stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Inicializar el recuento
para i: = 0 a stext-2 do
comenzar
Texto [i]: = chr (ord (texto [i])+ord (pw [x]));
Inc (x);
si x = (spw-1) entonces x: = 0;
fin;
SetWindowText (hedit, texto);
Freemem (texto);
Freemem (PW);
fin;
(*------------------------------------------------ *)
// Esta función procesa cada mensaje enviado al botón CIRRYPT
función encryptProc (hwnd, msg, wparam, lParam: longint): longInt; stdcall;
varilla
I: entero;
comenzar
// Siempre pase el mensaje al procedimiento predeterminado
Resultado: = CallWindowProc (DiCrypt, HWND, MSG, WPARAM, LPARAM);
Mensaje de caso de
// Si el usuario presiona la pestaña, estamos cambiando el
// concéntrese en el botón Decrypt.
Wm_keydown: si wparam = 9 entonces setFocus (hdecrypt);
fin;
fin;
(*------------------------------------------------ *)
// Esta función procesa cada mensaje enviado al botón Decrypt
función DecryptProc (HWND, MSG, WPARAM, LPARAM: LONGINT): LongInt; stdcall;
comenzar
// Siempre pase el mensaje al procedimiento predeterminado
Resultado: = CallWindowProc (DiCrypt, HWND, MSG, WPARAM, LPARAM);
Mensaje de caso de
// Si el usuario presiona la pestaña, somos gunna switch
// El enfoque vuelve al botón Cicrypt.
Wm_keydown: si wparam = 9 entonces setfocus (hencrypt);
fin;
fin;
(*------------------------------------------------ *)
// Esta función procesa cada mensaje enviado a nuestra ventana principal
FUNCIÓN WINWSPROC (HWND, MSG, WPARAM, LPARAM: LONGINT): LongInt; stdcall;
comenzar
// Siempre pase el mensaje al procedimiento predeterminado
Resultado: = defwindowproc (hwnd, msg, wparam, lparam);
Mensaje de caso de
Wm_size: cambiar el tamaño;
// Cuando se hacen clic en los botones, el mensaje se pasa a
// La ventana principal, así que la manejamos aquí.
Wm_command: if lParam = hencrypt y luego encrypt
más si lParam = hDecrypt entonces descifrar;
Wm_destroy: apagado;
fin;
fin;
(*------------------------------------------------ *)
// Esta es la función principal del programa (Winmain)
comenzar
hinst: = getModuleHandle (nil); // Obtener la instancia de la aplicación
// hinstance devuelve zilch
con wclass do
comenzar
Estilo: = cs_parentdc;
hicon: = loadicon (hinst, 'mainicon');
lpfnwndproc: = @windowproc;
Hinstance: = Hinst;
Hbrbackground: = color_btnface+1;
lpszClassName: = 'clase de muestra';
HCursor: = LoadCursor (0, IDC_ARROW);
fin;
// Una vez que nuestra clase esté registrada,
// puede comenzar a hacer ventanas con él
RegisterClass (WCLASS);
// Crear nuestra ventana principal
Manejar: = createwindow (
'Clase de muestra', // nombre de clase registrada
'Cifrypter - por: Gordy', // Título de la ventana
WS_OVERLAPTYWindow o // Estilo básico de ventana
Ws_visible, // hazlo visible
10, // izquierda
10, // top
400, // ancho
300, // altura
0, // mango de la ventana principal
0, // mango del menú
hinst, // instancia de la aplicación
nulo); // Estructura para datos de creación
// Crea el botón Cicrypt
hencrypt: = createwindow (
'Botón',
'Encrypt',
Ws_visible o ws_child o bs_pushlike o bs_text,
5,5,65,24, manejar, 0, hinst, nil);
// Crea el botón Decrypt
hdecrypt: = createwindow (
'Botón',
'Decrypt',
Ws_visible o ws_child o bs_pushlike o bs_text,
75,5,65,24, manejar, 0, hinst, nulo);
// Crear la edición principal
hedit: = createwindowex (
Ws_ex_clientedge, // Este estilo ex es para el borde biselado
'Editar',
'',
Ws_visible o ws_child o es_left o es_multiline o es_wantreturn o es_autovscroll o ws_vscroll,
5,34,380,234, mango, 0, hinst, nil);
// Crear la contraseña editar
HPW: = CreateWinDowex (
WS_EX_CLIENTEDE,
'Editar',
'',
Ws_visible o ws_child o es_left o es_autohscroll o es_password,
230,5,155,24, mango, 0, hinst, nulo);
hlabel: = createwindow (
'Estático',
'Contraseña:',
Ws_visible o ws_child o ss_left,
160,10,70,20, manejar, 0, hinst, nulo);
// crear una fuente personalizada para nuestra ventana de otra manera
// Todo usaría la fuente del sistema (¡blech!)
hfont: = createFont (
-12, // altura
0, // ancho
0, // ángulo de rotación
0, // orientación
0, // peso
0, // cursiva
0, // subrayar
0, // golpear
Default_charset, // char set
Out_default_precis, // precisión
Clip_default_precis, // recorte
Default_Quality, // renderizar calidad
Default_pitch o ff_dontcare, // titch & familiar
'MS Sans Serif'); // nombre de fuente
// Establecer las fuentes para todos nuestros 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ón de cifrado de subclase (asigne un WindowProc personalizado)
dencrypt: = Pointer (getwindowlong (hencrypt, gwl_wndproc));
Setwindowlong (hencrypt, gwl_wndproc, longInt (@encryptproc));
// Botón de descifrado de subclase
ddecrypt: = Pointer (getwindowlong (hdecrypt, gwl_wndproc));
Setwindowlong (hdecrypt, gwl_wndproc, longint (@DecryptProc));
// La razón por la que no subclase los controles de edición aquí
// es porque no hacen nada personalizado. Si yo quisiera
// ellos son pitidos o algo siempre que escribiera una "g" entonces
// los subclasearía.
// Centrarse en el primer control (de lo contrario, las personas sin mouse están jodidas)
Setfocus (hencrypt);
// Ahora tenemos getMessage para procesar cada mensaje en
// La lista de mensajes de nuestra ventana principal. Cada vez el principal
// La ventana recibe un mensaje que se agrega a la lista, entonces
// Este bucle aquí eventualmente lo procesará.
mientras (getMessage (msg, mango, 0,0)) hacer
comenzar
TranslateMessage (MSG); // traducir cualquier mensaje de teclado
DispatchMessage (MSG); // Envíalo a nuestro Proc.
fin; // para procesar.
fin.