نافذة البرنامج ؛
{
هذا مثال على تقديم تطبيق
دون استخدام وحدة النماذج. forms.pas هو
وحدة دلفي التي تجعل برامجك لعنة
ضخم! Forms.Pas لديها كل رمز للترجمة
النماذج التي تنشئها مع Delphi w/المكونات
في النوافذ. إذا سألتني ، أي شيء يضيف
يجب أن يكون 200k (@٪#$!) لتطبيقك بعض اللعنة
رمز غير فعال.
gordy <[email protected]>
www.jps.net/gfody
}
يستخدم Windows ، الرسائل ؛
{$ r *.res}
var
wclass: twndclass ؛ // فئة بنية النافذة الرئيسية
Hfont ، // مقبض الخط
Hinst ، // مقبض البرنامج (Hinstance)
مقبض ، // مقبض النافذة الرئيسية
hencrypt ، // مقبض زر التشفير
hdecrypt ، // مقبض زر decrypt
Hedit ، // مقبض التحرير الرئيسي
Hlabel ، // مقبض تسمية كلمة المرور
HPW: HWND ؛ // التعامل مع كلمة المرور تحرير
MSG: TMSG ؛ // هيكل الرسائل
dencrypt ،
ddecrypt: مؤشر ؛ // إجراءات الزر الافتراضية
(*---------------------------------------------- *)
// هذا يصطف كل شيء
تغيير حجم الإجراء ؛
var
RCT: TRECT ؛
يبدأ
getWindowRect (مقبض ، 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) ؛
نهاية؛
(*---------------------------------------------- *)
// هذا للتنظيف وإيقاف البرنامج
الإجراءات الإجراء ؛
يبدأ
DeleteObject (hfont) ؛
unregisterclass ('sample class' ، hinst) ؛
ExitProcess (Hinst) ؛ // end program
نهاية؛
(*---------------------------------------------- *)
// فك تشفير النص في Hedit مع النص في HPW
الإجراء فك تشفير.
var
X ، أنا ، // العد متغيرات
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 ؛ // تهيئة العد
لأني: = 0 إلى Stext-2 تفعل
يبدأ
نص [i]: = chr (ord (text [i])-ord (pw [x])) ؛
INC (X) ؛
إذا كان x = (spw-1) ثم x: = 0 ؛
نهاية؛
setWindowText (Hedit ، text) ؛
Freemem (نص) ؛
Freemem (PW) ؛
نهاية؛
(*---------------------------------------------- *)
// تشفير النص في Hedit مع النص في HPW
الإجراء تشفير.
var
X ، أنا ، // العد متغيرات
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 ؛ // تهيئة العد
لأني: = 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
var
أنا: عدد صحيح.
يبدأ
// قم دائمًا بتمرير الرسالة إلى الإجراء الافتراضي
النتيجة: = callWindowProc (dencrypt ، hwnd ، msg ، wparam ، lparam) ؛
حالة MSG من
// إذا كان المستخدم يضغط على علامة التبويب ، فسنقوم بتبديل gunna
// التركيز على زر decrypt.
wm_keydown: إذا كان wparam = 9 ثم setFocus (hdecrypt) ؛
نهاية؛
نهاية؛
(*---------------------------------------------- *)
// تعالج هذه الوظيفة كل رسالة يتم إرسالها إلى زر decrypt
دالة decryptproc (HWND ، MSG ، WPARAM ، LPARAM: longint): longint ؛ stdcall
يبدأ
// قم دائمًا بتمرير الرسالة إلى الإجراء الافتراضي
النتيجة: = callWindowProc (dencrypt ، hwnd ، msg ، wparam ، lparam) ؛
حالة MSG من
// إذا كان المستخدم يضغط على علامة التبويب ، فسنحول
// التركيز مرة أخرى إلى زر التشفير.
wm_keydown: إذا كان wparam = 9 ثم setFocus (hencrypt) ؛
نهاية؛
نهاية؛
(*---------------------------------------------- *)
// تعالج هذه الوظيفة كل رسالة يتم إرسالها إلى نافذتنا الرئيسية
وظيفة WindowProc (HWND ، MSG ، WPARAM ، LPARAM: longint): longint ؛ stdcall
يبدأ
// قم دائمًا بتمرير الرسالة إلى الإجراء الافتراضي
النتيجة: = defwindowproc (hwnd ، msg ، wparam ، lparam) ؛
حالة MSG من
wm_size: تغيير الحجم ؛
// عند النقر على الأزرار ، يتم تمرير الرسالة إلى
// النافذة الأصل ، لذلك نتعامل معها هنا.
WM_Command: إذا lParam = hencrypt ثم تشفير
آخر إذا lParam = hdecrypt ثم فك التشفير ؛
wm_destroy: إيقاف التشغيل ؛
نهاية؛
نهاية؛
(*---------------------------------------------- *)
// هذه هي وظيفة البرنامج الرئيسية (WinMain)
يبدأ
hinst: = getModuleHandle (nil) ؛ // احصل على مثيل التطبيق
// يعيد Hinstance Zilch
مع wclass تفعل
يبدأ
النمط: = cs_parentdc ؛
Hicon: = loadicon (hinst ، 'mainicon') ؛
lpfnwndproc: = windowproc ؛
hinstance: = hinst ؛
Hrbrackground: = color_btnface+1 ؛
lpszClassName: = 'عينة فئة' ؛
hcursor: = loadCursor (0 ، idc_arrow) ؛
نهاية؛
// بمجرد تسجيل صفنا نحن
// يمكن أن تبدأ في صنع Windows معها
registerClass (wclass) ؛
// إنشاء نافذتنا الرئيسية
مقبض: = CreateWindow (
"فئة العينة" ، // اسم الفئة المسجلة
"تشفير - بواسطة: Gordy" ، // عنوان النافذة
ws_overloppedwindow أو // نمط النافذة الأساسية
ws_visible ، // اجعله مرئيًا
10 ، // اليسار
10 ، // TOP
400 ، // العرض
300 ، // الارتفاع
0 ، // مقبض نافذة الأصل
0 ، // مقبض القائمة
Hinst ، // مثيل التطبيق
لا شيء) ؛ // هيكل بيانات الإنشاء
// إنشاء زر التشفير
Hencrypt: = CreateWindow (
'زر'،
"تشفير" ،
ws_visible أو ws_child أو bs_pushlike أو bs_text ،
5،5،65،24 ، مقبض ، 0 ، Hinst ، nil) ؛
// إنشاء زر فك التشفير
hdecrypt: = createWindow (
'زر'،
'decrypt' ،
ws_visible أو ws_child أو bs_pushlike أو bs_text ،
75،5،65،24 ، مقبض ، 0 ، Hinst ، nil) ؛
// إنشاء التحرير الرئيسي
Hedit: = CreateWindowex (
WS_EX_CLIENTEDGE ، // هذا النمط السابق مخصص للحافة المشطولة
'يحرر'،
'' ،
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 ، هينست ، لا شيء) ؛
Hlabel: = CreateWindow (
"ثابت" ،
'كلمة المرور:'،
ws_visible أو ws_child أو ss_left ،
160،10،70،20 ، مقبض ، 0 ، هينست ، لا شيء) ؛
// قم بإنشاء خط مخصص لنافذنا بطريقة أخرى
// كل شيء سيستخدم خط النظام (Blech!)
hfont: = createFont (
-12 ، // الارتفاع
0 ، // العرض
0 ، // زاوية الدوران
0 ، // الاتجاه
0 ، // الوزن
0 ، // مائل
0 ، // تسطير
0 ، // ضرب
default_charset ، // char set
out_default_precis ، // precision
clipping_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) ؛
// زر تشفير الفئة الفرعية (قم بتعيينه نافذة مخصصة)
dencrypt: = pointer (getWindowlong (hencrypt ، gwl_wndproc)) ؛
SetWindowLong (Hencrypt ، GWL_WNDPROC ، longint (encryptproc)) ؛
// زر فك تشفير الفئة الفرعية
ddecrypt: = pointer (getWindowlong (hdecrypt ، gwl_wndproc)) ؛
SetWindowLong (hdecrypt ، gwl_wndproc ، longint (decryptproc)) ؛
// السبب في عدم فئة فرعية عناصر التحكم في التحرير هنا
// لأنهم لا يفعلون أي شيء مخصص. إذا أردت
// لهم ليصدروا أو شيء ما كلما كتبت "G" بعد ذلك
// أود فئة فرعية لهم.
// التركيز على السيطرة الأولى (وإلا فإن الأشخاص الذين ليس لديهم فأر مشدود)
setfocus (hencrypt) ؛
// الآن نقوم بتخزين GetMessage لمعالجة كل رسالة في
// قائمة رسائل النافذة الرئيسية لدينا. في كل مرة الرئيسية
// Window يستلم رسالة إضافتها إلى القائمة ، لذا
// هذه الحلقة هنا ستعالجها في النهاية.
بينما (getMessage (MSG ، مقبض ، 0،0)) تفعل
يبدأ
TranslateMessage (MSG) ؛ // ترجمة أي لوحة مفاتيح MSG
DispatchMessage (MSG) ؛ // أرسلها إلى WindowProc
نهاية؛ // للمعالجة.
نهاية.