หน้าต่างโปรแกรม;
-
นี่คือตัวอย่างของการสร้างแอปพลิเคชัน
โดยไม่ต้องใช้หน่วยแบบฟอร์ม Forms.pas คือ
Delphi Unit ที่ทำให้โปรแกรมของคุณด่า
ใหญ่! forms.pas มีรหัสทั้งหมดสำหรับการแปล
แบบฟอร์มที่คุณสร้างด้วย delphi w/ส่วนประกอบ
เข้าสู่หน้าต่าง ถ้าคุณถามฉันสิ่งใดก็ตามที่เพิ่ม
200k (@%#$!) แอปของคุณต้องเป็นบางส่วน
รหัสที่ไม่มีประสิทธิภาพ
Gordy <[email protected]>
www.jps.net/gfody
-
ใช้ Windows ข้อความ
{$ r *.res}
วาจา
wclass: twndclass; // class struct สำหรับหน้าต่างหลัก
hfont, // handle of font
Hinst, // handle of program (Hinstance)
ด้ามจับ, // ที่จับของหน้าต่างหลัก
Hencrypt, // Handle of Encrypt Button
hdecrypt, // handle of decrypt ปุ่ม
Hedit, // handle of main edit
hlabel, // จัดการป้ายรหัสผ่าน
HPW: HWND; // จัดการรหัสผ่านแก้ไข
ผงชูรส: TMSG; // struct ข้อความ
Dencrypt
ddecrypt: ตัวชี้; // ขั้นตอนปุ่มเริ่มต้น
-
// นี่เป็นบรรทัดทุกอย่างขึ้น
ขั้นตอนการปรับขนาด;
วาจา
RCT: TRECT;
เริ่ม
getWindowRect (มือจับ, rct);
MoveWindow (HPW, 230,5, RCT.right-rct.left-245,24, จริง);
MoveWindow (Hedit, 5,34, RCT.Right-RCT.LEFT-20, RCT.BOTTOM-RCT.TOP-66, TRUE);
จบ;
-
// นี่คือการทำความสะอาดและหยุดโปรแกรม
การปิดขั้นตอน;
เริ่ม
DELETEOBJECT (HFONT);
unregisterclass ('คลาสตัวอย่าง', hinst);
ExitProcess (HINST); // โปรแกรมสิ้นสุด
จบ;
-
// decrypts ข้อความในความเสี่ยงด้วยข้อความใน hpw
ขั้นตอนการถอดรหัส;
วาจา
x, i, // นับตัวแปร
Stext, SPW: จำนวนเต็ม; // ขนาดของข้อความ PW
ข้อความ, PW: pchar; // บัฟเฟอร์สำหรับข้อความ PW
เริ่ม
stext: = getWindowTextLength (hedit) +1;
SPW: = GetWindowTextLength (HPW) +1;
getMem (ข้อความ, stext);
GetMem (PW, SPW);
getWindowText (hedit, text, stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // เริ่มต้นนับจำนวน
สำหรับ i: = 0 ถึง stext-2 ทำ
เริ่ม
ข้อความ [i]: = chr (ord (text [i])-ord (pw [x]));
Inc (x);
ถ้า x = (spw-1) จากนั้น x: = 0;
จบ;
SetWindowText (hedit, text);
Freemem (ข้อความ);
Freemem (PW);
จบ;
-
// เข้ารหัสข้อความด้วยความเสี่ยงด้วยข้อความใน HPW
ขั้นตอนการเข้ารหัส;
วาจา
x, i, // นับตัวแปร
Stext, SPW: จำนวนเต็ม; // ขนาดของข้อความ PW
ข้อความ, PW: pchar; // บัฟเฟอร์สำหรับข้อความ PW
เริ่ม
stext: = getWindowTextLength (hedit) +1;
SPW: = GetWindowTextLength (HPW) +1;
getMem (ข้อความ, stext);
GetMem (PW, SPW);
getWindowText (hedit, text, stext);
GetWindowText (HPW, PW, SPW);
x: = 0; // เริ่มต้นนับจำนวน
สำหรับ i: = 0 ถึง stext-2 ทำ
เริ่ม
ข้อความ [i]: = chr (ord (text [i])+ord (pw [x]));
Inc (x);
ถ้า x = (spw-1) จากนั้น x: = 0;
จบ;
SetWindowText (hedit, text);
Freemem (ข้อความ);
Freemem (PW);
จบ;
-
// ฟังก์ชั่นนี้ประมวลผลทุกข้อความที่ส่งไปยังปุ่มเข้ารหัส
ฟังก์ชั่น EncryptProc (HWND, MSG, WPARAM, LPARAM: Longint): Longint; stdcall;
วาจา
ฉัน: จำนวนเต็ม;
เริ่ม
// ส่งข้อความไปยังขั้นตอนเริ่มต้นเสมอ
ผลลัพธ์: = CallWindowProc (Dencrypt, HWND, MSG, WPARAM, LPARAM);
CASE MSG ของ
// ถ้าผู้ใช้กดแท็บเราจะสลับกันนา
// โฟกัสไปที่ปุ่ม Decrypt
WM_KEYDOWN: ถ้า WPARAM = 9 จากนั้น SETFOCUS (HDECRYPT);
จบ;
จบ;
-
// ฟังก์ชั่นนี้ประมวลผลทุกข้อความที่ส่งไปยังปุ่ม DECRYPT
ฟังก์ชั่น DecryptProc (HWND, MSG, WPARAM, LPARAM: Longint): Longint; stdcall;
เริ่ม
// ส่งข้อความไปยังขั้นตอนเริ่มต้นเสมอ
ผลลัพธ์: = CallWindowProc (Dencrypt, HWND, MSG, WPARAM, LPARAM);
CASE MSG ของ
// ถ้าผู้ใช้กดแท็บเรากำลังสวิตช์ Gunna
// โฟกัสกลับไปที่ปุ่มเข้ารหัส
WM_KEYDOWN: ถ้า WPARAM = 9 จากนั้น SETFOCUS (HENCRYPT);
จบ;
จบ;
-
// ฟังก์ชั่นนี้ประมวลผลทุกข้อความที่ส่งไปยังหน้าต่างหลักของเรา
ฟังก์ชั่น WindowProc (HWND, MSG, WPARAM, LPARAM: Longint): Longint; stdcall;
เริ่ม
// ส่งข้อความไปยังขั้นตอนเริ่มต้นเสมอ
ผลลัพธ์: = defwindowProc (hwnd, msg, wparam, lparam);
CASE MSG ของ
WM_SIZE: ปรับขนาด;
// เมื่อมีการคลิกปุ่มข้อความจะถูกส่งไปยัง
// หน้าต่างหลักดังนั้นเราจึงจัดการที่นี่
WM_COMMAND: ถ้า lParam = hencrypt แล้วเข้ารหัส
อื่นถ้า lparam = hdecrypt แล้วถอดรหัส;
WM_DESTROY: ปิด;
จบ;
จบ;
-
// นี่คือฟังก์ชั่นโปรแกรมหลัก (Winmain)
เริ่ม
Hinst: = getModuleHandle (ไม่มี); // รับอินสแตนซ์ของแอปพลิเคชัน
// Hinstance ส่งคืน Zilch
ด้วย wclass do
เริ่ม
สไตล์: = CS_PARENTDC;
hicon: = loadicon (hinst, 'mainicon');
lpfnwndproc: = @windowproc;
Hinstance: = Hinst;
Hbrbackground: = color_btnface+1;
lpszClassName: = 'คลาสตัวอย่าง';
hcursor: = loadcursor (0, idc_arrow);
จบ;
// เมื่อชั้นเรียนของเราลงทะเบียนแล้วเรา
// สามารถเริ่มทำหน้าต่างด้วย
registerclass (wclass);
// สร้างหน้าต่างหลักของเรา
มือจับ: = createWindow (
'คลาสตัวอย่าง', // ชื่อคลาสที่ลงทะเบียน
'Encrypter - โดย: Gordy', // ชื่อเรื่องของหน้าต่าง
ws_overlappedwindow หรือ // สไตล์หน้าต่างพื้นฐาน
ws_visible, // ทำให้มองเห็นได้
10, // ซ้าย
10, // ด้านบน
400, // ความกว้าง
300, // ความสูง
0, // ที่จับหน้าต่างแม่
0, // ที่จับของเมนู
Hinst, // อินสแตนซ์แอปพลิเคชัน
ไม่มี); // โครงสร้างสำหรับข้อมูลการสร้าง
// สร้างปุ่มเข้ารหัส
hencrypt: = createWindow (
'ปุ่ม',
'เข้ารหัส',
ws_visible หรือ ws_child หรือ bs_pushlike หรือ bs_text
5,5,65,24, ที่จับ, 0, Hinst, Nil);
// สร้างปุ่ม DECRYPT
hdecrypt: = createWindow (
'ปุ่ม',
'decrypt',
ws_visible หรือ ws_child หรือ bs_pushlike หรือ bs_text
75,5,65,24, ที่จับ, 0, Hinst, nil);
// สร้างการแก้ไขหลัก
Hedit: = createWindowex (
ws_ex_clientedge, // รูปแบบ ex นี้มีไว้สำหรับขอบ beveled
'แก้ไข',
-
WS_VISIBLE หรือ WS_CHILD หรือ ES_LEFT หรือ ES_MULTILINE หรือ ES_WANTRETURN หรือ ES_AUTOVSCROLL หรือ WS_VSCROLL
5,34,380,234, ด้ามจับ, 0, Hinst, nil);
// สร้างรหัสผ่านแก้ไข
hpw: = createWindowex (
ws_ex_clientedge
'แก้ไข',
-
WS_VISIBLE หรือ WS_CHILD หรือ ES_LEFT หรือ ES_AUTOHSCROLL หรือ ES_PASSWORD
230,5,155,24, ที่จับ, 0, Hinst, nil);
hlabel: = createWindow (
'คงที่',
'รหัสผ่าน:',
WS_VISIBLE หรือ WS_CHILD หรือ SS_LEFT
160,10,70,20, ที่จับ, 0, Hinst, Nil);
// สร้างแบบอักษรที่กำหนดเองสำหรับหน้าต่างของเราเป็นอย่างอื่น
// ทุกอย่างจะใช้ตัวอักษรระบบ (blech!)
hfont: = createFont (
-12, // ความสูง
0, // ความกว้าง
0, // มุมของการหมุน
0, // การปฐมนิเทศ
0, // น้ำหนัก
0, // italic
0, // ขีดเส้นใต้
0, // strike out
default_charset, // char set
out_default_precis, // ความแม่นยำ
clip_default_precis, // clipping
default_quality, // แสดงคุณภาพ
default_pitch หรือ ff_dontcare, // pitch & family
'Ms Sans Serif'); // ชื่อตัวอักษร
// ตั้งค่าแบบอักษรสำหรับการควบคุมทั้งหมดของเรา
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);
// ปุ่มเข้ารหัส subclass (กำหนด windowproc ที่กำหนดเอง)
dencrypt: = pointer (getWindowLong (Hencrypt, GWL_WNDPROC));
SetWindowLong (Hencrypt, GWL_WNDPROC, Longint (@encryptProc));
// ปุ่ม Decrypt subclass
ddecrypt: = pointer (getWindowLong (hdecrypt, gwl_wndproc));
setWindowLong (hdecrypt, gwl_wndproc, longint (@decryptproc));
// เหตุผลที่ฉันไม่ได้ควบคุมการแก้ไขที่นี่
// เป็นเพราะพวกเขาไม่ได้ทำอะไรเอง ถ้าฉันต้องการ
// พวกเขาจะส่งเสียงบี๊บหรืออะไรบางอย่างเมื่อใดก็ตามที่คุณพิมพ์ "g" แล้ว
// ฉันจะคลาสย่อยพวกเขา
// มุ่งเน้นไปที่การควบคุมครั้งแรก (มิฉะนั้นคนที่ไม่มีเมาส์จะเมา)
SetFocus (Hencrypt);
// ตอนนี้เราวนรอบ getMessage เพื่อประมวลผลแต่ละข้อความใน
// รายการข้อความของหน้าต่างหลักของเรา ทุกครั้งที่หลัก
// หน้าต่างรับข้อความที่เพิ่มลงในรายการดังนั้น
// ลูปนี้ที่นี่จะดำเนินการในที่สุด
ในขณะที่ (getMessage (ผงชูรส, จัดการ, 0,0)) ทำ
เริ่ม
TranslateMessage (MSG); // แปลคีย์บอร์ดผงชูรส
DispatchMessage (MSG); // ส่งไปที่ WindowProc ของเรา
จบ; // สำหรับการประมวลผล
จบ.