Programmfenster;
{
Dies ist ein Beispiel für eine Anwendung
ohne die Formseinheit zu verwenden. Forms.pas ist die
Delphi -Einheit, die Ihre Programme so verdammt macht
riesig! Forms.pas hat den gesamten Code zum Übersetzen
Die Formulare, die Sie mit Delphi mit Komponenten erstellen
in Fenster. Wenn Sie mich fragen, alles, was hinzugefügt wird
200k (@%#$!) Zu Ihrer App muss etwas verdammt sein
ineffizienter Code.
Gordy <[email protected]>
www.jps.net/gfody
}
verwendet Windows, Nachrichten;
{$ R *.res}
var
WCLASS: TWNDCLASS; // Klassenstruktur für Hauptfenster
Hfont, // Handlungshandel
Hinst, // Programm Handle (Hinstance)
Handle, // Handle des Hauptfensters
Hencrypt, // Handle der Verschlüsselungstaste
HDECRYPT, // Handle der Entschlüsselungsschaltfläche
Hedit, // Handle der Hauptbearbeitung
Hlabel, // Handle des Kennwortetiketts
HPW: Hwnd; // Handle des Passworts bearbeiten
MSG: TMSG; // Nachrichtenstruktur
decrypt,
Ddecrypt: Zeiger; // Standardschaltflächenverfahren
(*-------------------------------------------- *)
// Das ist alles auf
Verfahren Änderung;
var
RCT: Trect;
beginnen
GetWindowRect (Handle, 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);
Ende;
(*-------------------------------------------- *)
// Dies dient zum Aufräumen und Stoppen des Programms
Verfahren zum Herunterfahren;
beginnen
DeleteObject (Hfont);
UnregisterClass ('Beispielklasse', Hinst);
ExitProcess (Hinst); // Endprogramm
Ende;
(*-------------------------------------------- *)
// entschlüsselt den Text in Hedit mit dem Text in HPW
Verfahren entschlüsseln;
var
x, i, // zählen Variablen
SPW: Ganzzahl; // Textgröße, PW
Text, PW: pchar; // Puffer für Text, PW
beginnen
STEXT: = GetWindowTextLength (Hedit) +1;
SPW: = GetWindowTextLength (HPW) +1;
GetMem (Text, STEXT);
GetMem (PW, SPW);
GetWindowText (Hedit, Text, STEXT);
GetWindowText (HPW, PW, SPW);
x: = 0; // Anzahl initialisieren
für i: = 0 bis STEXT-2 tun
beginnen
Text [i]: = chr (ord (text [i])-ord (pw [x]));
Inc (x);
Wenn x = (SPW-1) dann x: = 0;
Ende;
SetWindowText (Hedit, Text);
Freemem (Text);
Freemem (PW);
Ende;
(*-------------------------------------------- *)
// verschlüsselt den Text in Hedit mit dem Text in HPW
Verfahren verschlüsseln;
var
x, i, // zählen Variablen
SPW: Ganzzahl; // Textgröße, PW
Text, PW: pchar; // Puffer für Text, PW
beginnen
STEXT: = GetWindowTextLength (Hedit) +1;
SPW: = GetWindowTextLength (HPW) +1;
GetMem (Text, STEXT);
GetMem (PW, SPW);
GetWindowText (Hedit, Text, STEXT);
GetWindowText (HPW, PW, SPW);
x: = 0; // Anzahl initialisieren
für i: = 0 bis STEXT-2 tun
beginnen
Text [i]: = chr (ord (text [i])+ord (pw [x]));
Inc (x);
Wenn x = (SPW-1) dann x: = 0;
Ende;
SetWindowText (Hedit, Text);
Freemem (Text);
Freemem (PW);
Ende;
(*-------------------------------------------- *)
// Diese Funktion verarbeitet jede Meldung, die an die Schaltfläche Verschlüsseln gesendet wurde
Funktion EncryptProc (HWND, MSG, WPARAM, LPARAM: LONGINT): longint; stdcall;
var
I: Ganzzahl;
beginnen
// Übergeben Sie die Nachricht immer an die Standardprozedur
Ergebnis: = CallWindowProc (Dencrypt, hwnd, msg, wparam, lparam);
Fall msg von
// Wenn der Benutzer die Registerkarte drückt, wechseln wir Gunna die
// Konzentrieren Sie sich auf die Entschlüsselung.
Wm_keydown: wenn wparam = 9 dann setfocus (hDecrypt);
Ende;
Ende;
(*-------------------------------------------- *)
// Diese Funktion verarbeitet jede Meldung, die an die Entschlüsselung gesendet wurde
Funktion decryptProc (hwnd, msg, wparam, lparam: longint): longint; stdcall;
beginnen
// Übergeben Sie die Nachricht immer an die Standardprozedur
Ergebnis: = CallWindowProc (Dencrypt, hwnd, msg, wparam, lparam);
Fall msg von
// Wenn der Benutzer die Registerkarte drückt, sind wir Gunna Switch
// Der Fokus zurück auf die Taste Verschlüsseln.
Wm_keydown: wenn wparam = 9 dann setfocus (hencrypt);
Ende;
Ende;
(*-------------------------------------------- *)
// Diese Funktion verarbeitet jede Nachricht, die an unser Hauptfenster gesendet wird
Funktionsfensterproc (HWND, MSG, WPARAM, LPARAM: LONGINT): longint; stdcall;
beginnen
// Übergeben Sie die Nachricht immer an die Standardprozedur
Ergebnis: = defwindowproc (hwnd, msg, wparam, lparam);
Fall msg von
Wm_Size: Größen Sie die Größe;
// Wenn Schaltflächen angeklickt werden, wird die Nachricht an übergeben
// Das übergeordnete Fenster, also verarbeiten wir es hier.
Wm_Command: Wenn lparam = hencrypt dann verschlüsseln
sonst, wenn lparam = hDeCrypt dann entschlüsselt wird;
Wm_destroy: stilldown;
Ende;
Ende;
(*-------------------------------------------- *)
// Dies ist die Hauptprogrammfunktion (Winmain)
beginnen
Hinst: = getModuleHandle (NIL); // Erhalten Sie die Anwendungsinstanz
// Hinstance gibt Zilch zurück
mit wclass tun
beginnen
Stil: = cs_parentdc;
Hicon: = Loadicon (Hinst, 'Mainicon');
LPFNWNDPROC: = @WindowProc;
Hinstance: = Hinst;
hBbbackground: = color_btnface+1;
LPSZClassName: = 'Beispielklasse';
hcursor: = loadCursor (0, idc_arrow);
Ende;
// Sobald unsere Klasse registriert ist, wir
// kann damit beginnen, Fenster damit zu erstellen
RegisterClass (WCLASS);
// Erstellen Sie unser Hauptfenster
Handle: = Createwindow (
'Beispielklasse', // registrierter Klassenname
'Verschlüsselter - von: Gordy', // Titel des Fensters
WS_OVERLAPTWINDOW oder // Basisfensterstil
Ws_visible, // es sichtbar machen
10, // links
10, // oben
400, // Breite
300, // Höhe
0, // übergeordnetes Fensterhandwerk.
0, // Handle des Menüs
Hinst, // Anwendungsinstanz
Null); // Struktur für Erstellungsdaten
// Erstellen Sie die Schaltfläche Verschlüsseln
Hencrypt: = Createwindow (
'Taste',
"Verschlüsseln",
WS_VISIBLE oder WS_CHILD oder BS_PUSH LIKE ODER BS_TEXT,
5,5,65,24, Handle, 0, Hinst, Nil);
// Erstellen Sie die Schaltfläche Entschlüsseln
HDECRYPT: = Createwindow (
'Taste',
'Entschlüsseln',
WS_VISIBLE oder WS_CHILD oder BS_PUSH LIKE ODER BS_TEXT,
75,5,65,24, Handle, 0, Hinst, Nil);
// Erstellen Sie die Hauptbearbeitung
Hedit: = Createwindowex (
WS_EX_CLIENTEDED, // Dieser Ex -Stil ist für die abgeschrägte Kante gilt
'Bearbeiten',
'',
Ws_visible oder ws_child oder es_left oder es_multiline oder es_wantreturn oder es_autovscroll oder WS_VSCROLL,
5,34,380,234, Handle, 0, Hinst, Nil);
// Erstellen Sie das Passwort bearbeiten
HPW: = Createwindowex (
WS_EX_CLIENSEDE,
'Bearbeiten',
'',
WS_VISIBLE oder WS_CHILD oder ES_LEFT ODER ES_AUTOHSCROLL oder ES_PASSWORD,
230,5,155,24, Handle, 0, Hinst, Nil);
Hlabel: = Createwindow (
'Statisch',
'Passwort:',
WS_VISIBLE oder WS_CHILD oder SS_LEFT,
160,10,70,20, Handle, 0, Hinst, Nil);
// Erstellen Sie sonst eine benutzerdefinierte Schriftart für unser Fenster
// Alles würde die Systemschrift (Blech!) verwenden.
Hfont: = createFont (
-12, // Höhe
0, // Breite
0, // Drehwinkel
0, // Orientierung
0, // Gewicht
0, // kursiv
0, // unterstreichen
0, // schlägen aus
Default_charset, // char set
OUT_DEFAULT_PRECIS, // Präzision
Clip_default_precis, // ciping
Default_quality, // Qualität rendern
Default_pitch oder ff_dontcare, // pitch & familie
'Ms sans serif'); // Schriftname
// Setzen Sie die Schriftarten für alle unsere Steuerelemente
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);
// Schaltfläche Verschlüsseln von Unterklassen (zuweisen Sie ihm ein benutzerdefiniertes Fensterproc)
dencrypt: = pointer (getwindowlong (hencrypt, gwl_wndproc));
Setwindowlong (hencrypt, gwl_wndproc, longint (@encryptproc));
// Unterklasse entschlüsseln
Ddecrypt: = Pointer (GetWindowlong (Hdecrypt, gwl_wndproc));
SetWindowlong (Hdecrypt, gwl_wndproc, longint (@decryptproc));
// Der Grund, warum ich die Bearbeitungssteuerungen hier nicht unterklasse
// liegt daran, dass sie nichts Brauch machen. Wenn ich wollte
// sie zu piep oder so, wenn du dann ein "g" tippt hast
// Ich würde sie unterklassieren.
// Konzentrieren Sie sich auf die erste Kontrolle (ansonsten werden Menschen ohne Maus geschraubt)
Setfocus (hencrypt);
// Jetzt schließen wir message, um jede Nachricht in zu verarbeiten
// Die Nachrichtenliste unseres Hauptfensters. Jedes Mal das Haupt
// Fenster erhält eine Nachricht, die der Liste hinzugefügt wird, also
// Diese Schleife hier wird es irgendwann verarbeiten.
während (GetMessage (MSG, Handle, 0,0))
beginnen
TranslateMessage (MSG); // Übersetzen Sie alle Tastatur -MSGs
SendMessage (MSG); // Sende es an unseren Fensterproc
Ende; // zur Verarbeitung.
Ende.