Récemment, je me prépare pour l'examen CET-4 et j'ai obtenu un document DOC pour "les mots à haute fréquence de classe 4" de mes camarades de classe. Par un manuellement. L'interface du programme est la suivante:
Analyse principale:
Utilisez la fonction de traduction de "Kingsoft Powerword 2002" pour traduire les mots, utilisez Delphi pour obtenir la poignée du contrôle qui traduit le résultat dans "Kingsoft Powerword 2002" et utilisez la fonction de pâte et de copie pour obtenir les résultats de traduction.
Description de la fonction de l'API:
Hwnd findwindow (
Lpctstr lpclassName, // le nom de classe du formulaire à rechercher
Lpctstr lpwindowname // le nom de titre du formulaire à rechercher
);
Hwnd findwindowex (
Hwnd hwndparent, // la poignée de la fenêtre parent dans laquelle l'enfant est fouillée
Hwnd hwndchildafter, // Démarrer la recherche après ce formulaire
Lpctstr lpszclass, // le nom de classe du formulaire à rechercher
Lpctstr lpszwindow // nom du titre du formulaire à rechercher
);
Bool showwindow (
Hwnd hwnd, // la poignée de la forme
int ncmdshow // comment afficher le formulaire
);
Bool BringwindowTotop (
Hwnd hwnd // manche du formulaire
);
Bool Setforegroundwindow (
Hwnd hwnd // la poignée du formulaire
);
Hwnd setfocus (
Hwnd hwnd // la poignée de la forme focalisée
);
Void keybd_event (
BYTE BVK, // Code de clé virtuelle
BYTE BSCAN, // CODE DE SCAN MARRIEUX
DWORD DWFLAGS, // Flags spécifiant diverses options de fonction
DWORD DWEXTRAINFO // Données supplémentaires associées à Keystroke
);
Ici, nous fournissons une déclaration de l'API de base, des méthodes d'utilisation spécifiques et vous pouvez utiliser d'autres informations pertinentes.
Analyse spécifique:
Tout d'abord, utilisez l'outil SPY ++ pour analyser "Kingsoft Powerword 2002", et les résultats de l'analyse sont les suivants:
Le nom de la forme de Kingsoft Powerword 2002 est: Kingsoft Powerword 2002
Nom de la classe de contrôle de la saisie de Kingsoft Powerword 2002: Edit (une forme enfant de ComboBox )
Nom de la classe de contrôle des résultats de la traduction de Kingsoft Powerword 2002: XDICT_EXPLAINVIEW
Interface de programme:
Un contrôle de la minuterie (Timer1, dont l'intervalle est de 3 secondes), un contrôle de la note (MLIST) et deux contrôles riches en riches (RTRANS, RCONV), le code spécifique est le suivant:
interface
usages
Windows, messages, systèmes, variantes, classes, graphiques, contrôles, formulaires, dialogues, stdctrls, comctrls, clipbrd, boutons, extctrls, menus;
taper
Tform1 = classe (tform)
MLIST: TMEMO;
RTRANS: trichedit;
Button1: Tbutton;
Timer1: Ttimer;
Button2: TBUTTON;
RCONV: TRICHEdit;
Button3: Tbutton;
OD: TOPENDIAGE;
RichEdit3: Trichedit;
MainMenu1: TmainMenu;
F1: TMEUTIMEM;
N1: tMenuItem;
N2: tMenuem;
N3: tMenuem;
C1: tMenuem;
N4: tMenuem;
N5: tMenuem;
RTF1: TMENUITEM;
Panel1: Tpanel;
ProgressBar1: tprogressbar;
Splitter1: Tsplitter;
Splitter2: Tsplitter;
E1: tMenuItem;
N6: tMenuItem;
N7: tMenuItem;
N8: tMenuItem;
Edit1: Tedit;
Label1: Tlabel;
Label2: Tlabel;
Label3: Tlabel;
Procédure Button1Click (expéditeur: tobject);
Procédure Timer1Timer (expéditeur: tobject);
Procédure Button2Click (expéditeur: tobject);
Procédure Button3Click (expéditeur: tobject);
Procédure N3Click (expéditeur: tobject);
procédure n6click (expéditeur: tobject);
procédure n8click (expéditeur: tobject);
Privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
FORM1: TFORM1;
i: entier = 0; // déclare une variable globale pour la mémorisation des mots
Mise en œuvre
{$ R * .dfm}
// Démarrez l'événement de conversion
Procédure tform1.button1Click (expéditeur: tobject);
Commencer
Rtrans.clear; // effacer la zone de conversion
RConv.Clear;
timer1.interval: = strToint (edit1.text) * 1000; // définir l'intervalle
timer1.enabled: = true; //
ProgressBar1.Position: = 0; // Définissez l'état de la barre de progression
i: = 0; // initialise les variables pour compter
ProgressBar1.max: = mList.lines.Count;
fin;
Procédure TForm1.Timer1Timer (expéditeur: TOBject);
var
King, // Kingsoft Powerword 2002 Poignée de fenêtre principale
combo, // word d'entrée Boîte à la fenêtre parent
Modifier, //
signifie: thandle; //
Commencer
Si je <= mlist.lines.count-1 alors
Commencer
King: = FindWindow (nil, phar («Kingsoft Powerword 2002»));
combo: = findwindowex (King, 0, «combobox», nil);
edit: = findWindowEx (combo, 0, 'edit', nil);
signifie: = findwindowex (King, 0, 'xdict_explainview', nil);
// affichage d'informations
label3.caption: = '(' + intToStr (i + 1) + '/' + inttoStr (mList.lines.count) + ')' + mList.lines [i];
// Informations de stockage
Clipboard.astext: = mList.lines [i];
Showwindow (King, SW_Shownormal);
Bringwindowtotop (roi);
Setforegroundwindow (roi);
windows.setFocus (édition);
// Simuler la pâte Ctrl + V
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 (moyens);
windows.setFocus (moyens);
// simulation ctrl + a sélectionnez tout
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 (moyens);
windows.setFocus (moyens);
// Simuler Ctrl + C Copie
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);
// Simuler la pâte Ctrl + V
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; // Bar de progression se déplace
inc (i); // augmenter le nombre
fin d'autre
Commencer
timer1.enabled: = false;
Rtrans.lines.savetofile ('temp.txt');
fin;
fin;
// Lire la liste des mots dans Mlist
Procédure tform1.button2click (expéditeur: tobject);
Commencer
Si od.execcute alors
MList.lines.loadFromFile (od.FileName);
fin;
// Fonction de conversion, car les symboles phonétiques ne peuvent pas être affichés correctement dans la traduction obtenue dans RTRANS
// Vous devez d'abord installer la police phonétique Plain dans le répertoire de la police à Kingsoft Powerword
// implémenter l'affichage correct des symboles phonétiques
Procédure TForm1.Button3Click (expéditeur: tobject);
var
I: entier;
Début, se termine: entier;
Commencer
RConv.Clear;
pour i: = 0 à rtrans.lines.count-1 do
Commencer
RICHEDIT3.Text: = rtrans.lines [i];
Démarrer: = pos ('[', richedidit3.text); // trouver la position du symbole phonétique, le symbole phonétique est dans []
Si démarrer> 0 alors
Commencer
se termine: = pos (']', richEdit3.Text);
RICHEDIT3.SERSTART: = START;
RICHEDIT3.Sellngth: = start-start-1;
RICHEDIT3.SELATTRIBUTES.NAME: = «Kingsoft Phonetic Plain»;
fin;
RICHEDIT3.Selectall;
RICHEDIT3.COPYTOCLIPBOOD;
RConv.PasteFromClipboard;
application.ProcessMessages;
fin;
fin;
// Exit de programme
Procédure TForm1.N3Click (expéditeur: tobject);
Commencer
application.terminer;
fin;
// Copier la fonction
Procédure tform1.n6click (expéditeur: tobject);
Commencer
RConv.Selectall;
RConv.CopyToclipboard;
fin;
// Arrête la conversion
Procédure tform1.n8click (expéditeur: tobject);
Commencer
timer1.enabled: = false;
fin;
fin.
OK, jusqu'à présent, tous les programmes sont conçus.
Comment courir:
Assurez-vous que "Kingsoft Powerword 2002" s'exécute avec ce programme.
Ok, j'ai réussi à traduire ces 600 mots et je les ai imprimés sur papier.
Comment obtenir des programmes exécutables compilés et du code source:
Vous pouvez m'envoyer un e-mail: [email protected]
Ou connectez-vous à mon site et laissez un message: http://redlegend.51.net