في الآونة الأخيرة ، أستعد لامتحان CET-4 وحصلت على مستند DOC لـ "الكلمات الرابعة" من زملائي في الفصل. بواسطة واحد يدويًا. واجهة البرنامج كما يلي:
تحليل المبدأ:
استخدم وظيفة الترجمة لـ "Kingsoft Powerword 2002" لترجمة الكلمات ، واستخدام Delphi للحصول على مقبض عنصر التحكم الذي يترجم النتيجة في "Kingsoft Powerword 2002" ، واستخدام وظيفة اللصق والنسخ للحصول على نتائج الترجمة.
وصف وظيفة API:
hwnd findwindow (
lpctstr lpclassname ، // اسم فئة النموذج المراد البحث عنه
lpctstr lpwindowname // اسم عنوان النموذج المراد البحث عنه
) ؛
hwnd findwindowex (
hwnd hwndparent ، // مقبض النافذة الأصل التي يتم تفتيش الطفل فيها
hwnd hwndchildafter ، // ابدأ البحث بعد هذا النموذج
LPCTSTR LPSZCLASS ، // اسم فئة النموذج المراد البحث عنه
LPCTSTR LPSZWINDOW // اسم العنوان للنموذج المراد البحث عنه
) ؛
منطقي Swindow (
hwnd hwnd ، // مقبض النموذج
int ncmdshow // كيفية عرض النموذج
) ؛
Bool BringWindowTotop (
hwnd hwnd // مقبض النموذج
) ؛
SetforeGroundWindow Bool (
hwnd hwnd // مقبض النموذج
) ؛
hwnd setfocus (
hwnd hwnd // مقبض النموذج المركّز
) ؛
void keybd_event (
Byte BVK ، // Virtual-Key Code
بايت BSCAN ، // رمز مسح الأجهزة
DWORD DWFLAGS ، // أعلام تحدد خيارات الوظائف المختلفة
DWORD DWEXTRAINFO // بيانات إضافية مرتبطة بضغط المفاتيح
) ؛
نحن هنا نقدم بيانًا عن واجهة برمجة التطبيقات الأساسية ، وطرق الاستخدام المحددة ، ويمكنك استخدام المعلومات الأخرى ذات الصلة.
تحليل محدد:
أولاً ، استخدم أداة SPY ++ لتحليل "Kingsoft Powerword 2002" ، ونتائج التحليل هي كما يلي:
اسم شكل Kingsoft Powerword 2002 هو: Kingsoft Powerword 2002
Kingsoft Powerword 2002 كلمة التحكم في الإدخال اسم الفئة: تحرير (شكل طفل من combobox )
Kingsoft Powerword 2002 اسم التحكم في نتائج الترجمة الاسم: XDICT_EXPLAINVIEW
واجهة البرنامج:
التحكم في المؤقت (TIMER1 ، الذي يبلغ عدد الفاصل الزمني 3 ثوان) ، والتحكم في المذكرة (MLIST) ، وعناصر تحكم غنية (RTRANS ، RCONV) ، الرمز المحدد هو كما يلي:
واجهة
يستخدم
Windows ، الرسائل ، sysutils ، المتغيرات ، الفئات ، الرسومات ، عناصر التحكم ، النماذج ، الحوار ، stdctrls ، comctrls ، clipbrd ، الأزرار ، extctrls ، القوائم ؛
يكتب
tform1 = فئة (tform)
Mlist: Tmemo ؛
Rtrans: Trichedit ؛
Button1: Tbutton ؛
Timer1: تتيمر ؛
Button2: Tbutton ؛
RCONV: TRICHEDIT ؛
Button3: Tbutton ؛
OD: Topendialog ؛
Richedit3: Trichedit ؛
MainMenu1: tmainmenu ؛
F1: tmenuitem ؛
N1: tmenuitem ؛
N2: tmenuitem ؛
N3: Tmenuitem ؛
C1: tmenuitem ؛
N4: tmenuitem ؛
N5: tmenuitem ؛
RTF1: tmenuitem ؛
لوحة 1: tpanel ؛
ProgressBar1: TprogressBar ؛
Splitter1: tsplitter ؛
Splitter2: tsplitter ؛
E1: Tmenuitem ؛
N6: tmenuitem ؛
N7: tmenuitem ؛
N8: tmenuitem ؛
EDIT1: TEDIT ؛
Label1: tlabel ؛
Label2: tlabel ؛
Label3: tlabel ؛
الإجراءات button1click (المرسل: tobject) ؛
الإجراء timer1timer (المرسل: TOBJECT) ؛
الإجراءات button2click (المرسل: tobject) ؛
الإجراء button3click (المرسل: tobject) ؛
الإجراء n3click (المرسل: tobject) ؛
الإجراء n6click (المرسل: tobject) ؛
الإجراء n8click (المرسل: tobject) ؛
خاص
{إعلانات خاصة}
عام
{الإعلانات العامة}
نهاية؛
var
Form1: Tform1 ؛
i: integer = 0 ؛ // إعلان متغير عالمي لحفظ الكلمات
تطبيق
{$ r *.dfm}
// ابدأ حدث التحويل
الإجراء tform1.button1click (المرسل: tobject) ؛
يبدأ
rtrans.clear ؛ // مسح منطقة التحويل
rconv.clear ؛
timer1.Interval: = strtoint (edit1.text)*1000 ؛ // اضبط وقت الفاصل الزمني
Timer1.Endabled: = true ؛ //
ProgressBar1.Position: = 0 ؛ // اضبط حالة شريط التقدم
I: = 0 ؛
ProgressBar1.Max: = mlist.lines.count ؛
نهاية؛
الإجراء tform1.timer1timer (المرسل: tobject) ؛
var
King ، // Kingsoft Powerword 2002 Main Window Handle
التحرير والسرد ، // كلمة إدخال الإدخال مقبض النافذة الأصل
تحرير ، // مقبض مربع إدخال الكلمات
يعني: Thandle ؛ // مقبض نافذة عرض الترجمة
يبدأ
إذا كنت <= mlist.lines.count-1 ثم
يبدأ
King: = FindWindow (nil ، pchar ('Kingsoft Powerword 2002')) ؛
التحرير والسرد: = findwindowex (king ، 0 ، 'combobox' ، nil) ؛
تحرير: = findwindowex (combo ، 0 ، 'edit' ، nil) ؛
تعني: = findWindowex (King ، 0 ، 'xDict_Explainview' ، nil) ؛
// عرض المعلومات
label3.caption: = '('+inttoStr (i+1)+'/'+inttoStr (mlist.lines.count)+')'+mlist.lines [i] ؛
// معلومات التخزين
clipboard.astext: = mlist.lines [i] ؛
showwindow (king ، sw_shownormal) ؛
BringWindowtotop (King) ؛
setforegroundwindow (الملك) ؛
windows.setfocus (تحرير) ؛
// محاكاة Ctrl+V Paste
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، 0 ، 0) ؛
keybd_event (ord ('v') ، mapVirtualKey (ord ('v') ، 0) ، 0 ، 0) ؛
keybd_event (ord ('v') ، mapVirtualKey (ord ('v') ، 0) ، keyeventf_keyup ، 0) ؛
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، keyeventf_keyup ، 0) ؛
setForeGroundWindow (يعني) ؛
windows.setfocus (يعني) ؛
// Simulation Ctrl+A حدد الكل
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، 0 ، 0) ؛
keybd_event (ord ('a') ، mapVirtualKey (ord ('a') ، 0) ، 0 ، 0) ؛
keybd_event (ord ('a') ، mapVirtualKey (ord ('a') ، 0) ، keyeventf_keyup ، 0) ؛
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، keyeventf_keyup ، 0) ؛
setForeGroundWindow (يعني) ؛
windows.setfocus (يعني) ؛
// محاكاة نسخة Ctrl+C.
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، 0 ، 0) ؛
keybd_event (ord ('c') ، mapVirtualKey (ord ('c') ، 0) ، 0 ، 0) ؛
keybd_event (ord ('c') ، mapVirtualKey (ord ('c') ، 0) ، keyeventf_keyup ، 0) ؛
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، keyeventf_keyup ، 0) ؛
windows.setfocus (rtrans.handle) ؛
// محاكاة Ctrl+V Paste
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، 0 ، 0) ؛
keybd_event (ord ('v') ، mapVirtualKey (ord ('v') ، 0) ، 0 ، 0) ؛
keybd_event (ord ('v') ، mapVirtualKey (ord ('v') ، 0) ، keyeventf_keyup ، 0) ؛
keybd_event (vk_control ، mapVirtualKey (vk_control ، 0) ، keyeventf_keyup ، 0) ؛
rtrans.lines.add ('============================'+#13) ؛
ProgressBar1.stepit ؛ // تحركات شريط التقدم
INC (I) ؛ // زيادة العد
إنهاء آخر
يبدأ
Timer1.Enabled: = false ؛
rtrans.lines.savetofile ('temp.txt') ؛
نهاية؛
نهاية؛
// اقرأ قائمة الكلمات في Mlist
الإجراء tform1.button2Click (المرسل: tobject) ؛
يبدأ
إذا od.execute ثم
mlist.lines.loadfromfile (od.filename) ؛
نهاية؛
// وظيفة التحويل ، لأنه لا يمكن عرض الرموز الصوتية بشكل صحيح في الترجمة التي تم الحصول عليها في rtrans
// يجب أولاً تثبيت الخط الصوتي العادي في دليل الخط في Kingsoft Powerword
// تنفيذ العرض الصحيح للرموز الصوتية
الإجراء tform1.button3click (المرسل: tobject) ؛
var
أنا: عدد صحيح.
ابدأ ، ينتهي: عدد صحيح ؛
يبدأ
rconv.clear ؛
لأني : = 0 إلى rtrans.lines.count-1 تفعل
يبدأ
RichEdit3.text: = rtrans.lines [i] ؛
ابدأ: = pos ('[' ، richedit3.text) ؛ // ابحث عن موضع الرمز الصوتي ، والرمز الصوتي في [] []
إذا ابدأ> 0 ثم
يبدأ
ينتهي: = pos (']' ، richedit3.text) ؛
Richedit3.selstart: = ابدأ ؛
RichEdit3.SellNength: = نهايات start-1 ؛
RichEdit3.seLattributes.name: = 'Kingsoft phonetic plain' ؛
نهاية؛
Richedit3.selectall ؛
Richedit3.CopyToclipboard ؛
rconv.pastefromclipboard ؛
Application.ProcessMessages ؛
نهاية؛
نهاية؛
// خروج البرنامج
الإجراء tform1.n3click (المرسل: tobject) ؛
يبدأ
application.layinate ؛
نهاية؛
// copy function
الإجراء tform1.n6click (المرسل: tobject) ؛
يبدأ
rconv.selectall ؛
rconv.copytoclipboard ؛
نهاية؛
// توقف عن التحويل
الإجراء tform1.n8click (المرسل: tobject) ؛
يبدأ
Timer1.Enabled: = false ؛
نهاية؛
نهاية.
حسنًا ، حتى الآن ، تم تصميم جميع البرامج.
كيفية الجري:
تأكد من تشغيل "Kingsoft Powerword 2002" مع هذا البرنامج.
حسنًا ، لقد نجحت في ترجمة 600 كلمة وطباعتها على الورق.
كيفية الحصول على البرامج القابلة للتنفيذ والرمز المصدر:
يمكنك أن ترسل لي بريدًا إلكترونيًا: [email protected]
أو قم بتسجيل الدخول إلى موقعي واترك رسالة: http://redlegend.51.net