Fenêtre de programme;
{
Ceci est un exemple de création d'une application
sans utiliser l'unité Forms. Forms.pas est le
Unité Delphi qui rend vos programmes si putain
énorme! Forms.pas a tout le code pour traduire
les formulaires que vous créez avec Delphi avec des composants
dans les fenêtres. Si vous me demandez, tout ce qui ajoute
200K (@% # $!) À votre application doit être un putain
code inefficace.
Gordy <[email protected]>
www.jps.net/gfody
}
utilise Windows, messages;
{$ R * .res}
var
wclass: twndclass; // Structure de classe pour la fenêtre principale
hfont, // manche de la police
hinst, // manche du programme (Hinstance)
Manche, // manche de la fenêtre principale
Hencrypt, // Handle du bouton Encrypt
HDecrypt, // Handle du bouton Decrypt
Hedit, // Handle de l'édition principale
hlabel, // manche de l'étiquette de mot de passe
HPW: HWND; // Gire de l'édition de mot de passe
MSG: TMSG; // structure de message
Dencrypt,
ddecrypt: pointeur; // Procédures de bouton par défaut
(* ------------------------------------------------ *)
// Cela tape tout
procédure redimensionner;
var
RCT: Trect;
commencer
GetWindowRect (manche, RCT);
MoveWindow (HPW, 230,5, rct.right-rct.left-245,24, true);
MoveWindow (Hedit, 5,34, rct.right-rct.left-20, rct.bottom-rct.top-66, true);
fin;
(* ------------------------------------------------ *)
// c'est pour nettoyer et arrêter le programme
Arrêt de procédure;
commencer
DeleteObject (hfont);
UnregisterClass («Classe d'échantillon», hinst);
Exitprocess (hinst); // Fin du programme
fin;
(* ------------------------------------------------ *)
// décrypte le texte dans Hedit avec le texte en HPW
Décrypt procédure;
var
x, i, // compter les variables
Stext, SPW: entier; // Taille du texte, PW
Texte, PW: PCHA; // tampon pour le texte, PW
commencer
stext: = getWindowTextLength (hedit) +1;
SPW: = GetWindowTextLength (HPW) +1;
GetMem (texte, stext);
GetMem (PW, SPW);
GetWindowText (Hedit, texte, stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Initialiser le nombre
pour i: = 0 à stext-2 do
commencer
Text [i]: = chr (ord (text [i]) - ord (pw [x]));
Inc (x);
Si x = (SPW-1) alors x: = 0;
fin;
SetWindowText (Hedit, texte);
FreeMem (texte);
Freemem (PW);
fin;
(* ------------------------------------------------ *)
// crypte le texte dans Hedit avec le texte dans HPW
Crypte de procédure;
var
x, i, // compter les variables
Stext, SPW: entier; // Taille du texte, PW
Texte, PW: PCHA; // tampon pour le texte, PW
commencer
stext: = getWindowTextLength (hedit) +1;
SPW: = GetWindowTextLength (HPW) +1;
GetMem (texte, stext);
GetMem (PW, SPW);
GetWindowText (Hedit, texte, stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // Initialiser le nombre
pour i: = 0 à stext-2 do
commencer
Text [i]: = chr (ord (text [i]) + ord (pw [x]));
Inc (x);
Si x = (SPW-1) alors x: = 0;
fin;
SetWindowText (Hedit, texte);
FreeMem (texte);
Freemem (PW);
fin;
(* ------------------------------------------------ *)
// Cette fonction traite chaque message envoyé au bouton Encrypt
Fonction EncryptProc (HWND, MSG, WPARAM, LPARAM: LONGINT): LONGINT; stdcall;
var
I: entier;
commencer
// transmet toujours le message à la procédure par défaut
Résultat: = CallWindowProc (Dencrypt, HWND, MSG, WPARAM, LPARAM);
cas msg de
// Si l'utilisateur appuie sur l'onglet, nous changeons Gunna
// Concentrez-vous sur le bouton Decrypt.
Wm_keydown: si wparam = 9 alors setfocus (hdecrypt);
fin;
fin;
(* ------------------------------------------------ *)
// Cette fonction traite chaque message envoyé au bouton Decrypt
Fonction DecryptProc (HWND, MSG, WPARAM, LPARAM: LONGINT): LONGINT; stdcall;
commencer
// transmet toujours le message à la procédure par défaut
Résultat: = CallWindowProc (Dencrypt, HWND, MSG, WPARAM, LPARAM);
cas msg de
// Si l'utilisateur appuie sur l'onglet, nous commutateurs Gunna
// Le focus revient sur le bouton Encrypt.
Wm_keydown: si wparam = 9 alors setfocus (hencrypt);
fin;
fin;
(* ------------------------------------------------ *)
// Cette fonction traite chaque message envoyé à notre fenêtre principale
Fonction WindowProc (HWND, MSG, WPARAM, LPARAM: LONGINT): LONGINT; stdcall;
commencer
// transmet toujours le message à la procédure par défaut
Résultat: = defwindowProc (HWND, MSG, WPARAM, LPARAM);
cas msg de
Wm_size: redimensit;
// Lorsque les boutons sont cliqués, le message est passé à
// La fenêtre parent, nous le gérons donc ici.
Wm_command: si lparam = hencrypt alors crypt
sinon si lparam = hdecrypt puis décryptez;
WM_Destroy: Shutdown;
fin;
fin;
(* ------------------------------------------------ *)
// C'est la fonction principale du programme (WinMain)
commencer
hinst: = getModuleHandle (nil); // obtient l'instance d'application
// Hinstance renvoie Zilch
avec wclass faire
commencer
Style: = cs_parentdc;
HICON: = LOFORICON (HINST, 'MAINICON');
lpfnwnddproc: = @windowproc;
hinstance: = hinst;
hbrbackground: = color_btnface + 1;
lpszClassName: = 'Exemple de classe';
hcursor: = loadCursor (0, idc_arrow);
fin;
// Une fois notre classe enregistrée, nous
// peut commencer à faire des fenêtres avec
RegisterClass (WCLASS);
// Créez notre fenêtre principale
Poignée: = createwindow (
«Exemple de classe», // Nom de classe enregistrée
'Encrypter - par: gordy', // titre de fenêtre
Ws_overlappwindow ou // style de fenêtre de base
Ws_visible, // le rendre visible
10, // à gauche
10, // haut de gamme
400, // largeur
300, // hauteur
0, // poignée de fenêtre parent
0, // Handle du menu
Hinst, // instance d'application
néant); // Structure des données de création
// Créez le bouton Encrypt
Hencrypt: = CreateWindow (
'Bouton',
'Encrypt',
Ws_visible ou ws_child ou bs_pushlike ou bs_text,
5,5,65,24, poignée, 0, hinst, nil);
// Créez le bouton Decrypt
hdecrypt: = createwindow (
'Bouton',
«Decrypt»,
Ws_visible ou ws_child ou bs_pushlike ou bs_text,
75,5,65,24, poignée, 0, hinst, nil);
// Créez la modification principale
hedit: = createwindowex (
WS_EX_CLIENGEED, // Ce style ex est pour le bord biseauté
'Modifier',
'',
Ws_visible ou ws_child ou es_left ou es_multiline ou es_wantreturn ou es_autovscroll ou ws_vscroll,
5,34,380,234, poignée, 0, hinst, nil);
// Créer le mot de passe Modifier
hpw: = createWindowEx (
Ws_ex_clienEdge,
'Modifier',
'',
Ws_visible ou ws_child ou es_left ou es_autohscroll ou es_password,
230,5,155,24, poignée, 0, hinst, nil);
hlabel: = createwindow (
'Statique',
'Mot de passe:',
Ws_visible ou ws_child ou ss_left,
160,10,70,20, poignée, 0, hinst, nil);
// Créez une police personnalisée pour notre fenêtre sinon
// Tout utiliserait la police du système (Blech!)
hfont: = createFont (
-12, // hauteur
0, // largeur
0, // angle de rotation
0, // orientation
0, // poids
0, // italique
0, // souligner
0, //
Default_Charset, // SET CHAR
Out_default_precis, // précision
Clip_default_precis, // Clipping
Default_quality, // Rendre la qualité
Default_pitch ou ff_dontcare, // pitch & famille
«Mme Sans Serif»); // nom de police
// Définit les polices pour tous nos commandes
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);
// Bouton de crypte de sous-classe (attribuez-lui un WindowProc personnalisé)
Dencrypt: = pointeur (getwindowlong (Hencrypt, gwl_wndproc));
SetWindowlong (Hencrypt, gwl_wndproc, longInt (@encryptproc));
// Bouton de décryptation de sous-classe
ddecrypt: = pointeur (getwindowlong (hdecrypt, gwl_wndproc));
SetWindowlong (HDecrypt, gwl_wndproc, longInt (@decryptproc));
// La raison pour laquelle je ne sous-classe pas les contrôles d'édition ici
// C'est parce qu'ils ne font rien de personnalité. Si je voulais
// eux à bip ou quelque chose chaque fois que vous avez tapé un "G" alors
// Je les sous-classe.
// se concentrer sur le premier contrôle (sinon les personnes sans souris sont vissées)
SetFocus (Hencrypt);
// Maintenant, nous bouclet GetMessage pour traiter chaque message dans
// Liste des messages de notre fenêtre principale. Chaque fois que le principal
// Window reçoit un message qu'il est ajouté à la liste, donc
// Cette boucle ici finira par le traiter.
tandis que (getMessage (msg, manche, 0,0))
commencer
TranslateMessage (MSG); // Traduire des msg de clavier
DispatchMessage (MSG); // l'envoyez-le à notre WindowProc
fin; // pour le traitement.
fin.