Vor kurzem bereite ich mich auf die CET-4-Prüfung vor und habe ein DOC-Dokument für "Klasse 4-Hochfrequenzwörter" von meinen Klassenkameraden erhalten. Daher habe ich eine Stapelübersetzung von Wörtern mit Delphi und Kingsoft PowerWord 2002 erstellt und kann die Übersetzungsergebnisse direkt als RTF -Dateien speichern. Die Programmoberfläche lautet wie folgt:
Prinzipanalyse:
Verwenden Sie die Übersetzungsfunktion von "Kingsoft PowerWord 2002", um Wörter zu übersetzen, Delphi zu erhalten, um das Handle des Steuerelements zu erhalten, das das Ergebnis "Kingsoft PowerWord 2002" übersetzt, und die Funktion einfügen und kopieren, um die Übersetzungsergebnisse zu erhalten.
API -Funktionsbeschreibung:
Hwnd FindWindow (
LPCTSTR LPCASSNAME, // Der Klassenname des Formulars zu suchen
LPCTSTR LPWINDowname // Der Titelname des zu durchsuchenden Formulars
) // das erste Kinderfenster finden, das den angegebenen Bedingungen entspricht
Hwnd FindWindowex (
Hwnd hwndParent, // das Handle des übergeordneten Fensters, in dem das Kind durchsucht wird
Hwnd Hwndchildafter, // Die Suche nach diesem Formular starten
LPCTSTR LPSZCLASS, // der Klassenname des Formulars, nach dem gesucht werden soll
LPCTSTR LPSZWINDOW // Title Name des zu durchsuchenden Formulars
) // das erste untergeordnete Fenster finden, das den angegebenen Bedingungen in der angegebenen Formularliste entspricht
Bool showwindow (
Hwnd hwnd, // das Handle des Formulars
int ncmdshow // So zeigen Sie das Formular an
) // die Sichtbarkeit des Fensters angeben
Bool bringwindowtotop (
Hwnd hwnd // Handle des Formulars
) // das angegebene Fenster an die Spitze der Fensterliste bringen
Bool setforecroundWindow (
Hwnd hwnd // das Handle des Formulars
) // das Fenster als Vordergrundprogramm des Systems festlegen
Hwnd setfocus (
Hwnd hwnd // das Handle der fokussierten Form
) // das Fenster fokussieren
Void keybd_event (
Byte BVK, // Code virtueller Key
Byte Bscan, // Hardware -Scancode
DWORD -DWFLAGs, // Flags geben verschiedene Funktionsoptionen an
DWORD DWEXTRAINFO // Zusätzliche Daten, die mit dem Tastenanschlag verknüpft sind
) // die Erzeugung von Schlüssel simulieren
Hier geben wir eine Erklärung der grundlegenden API, spezifische Verwendungsmethoden, und Sie können andere relevante Informationen verwenden.
Spezifische Analyse:
Verwenden Sie zunächst das Spy ++ -Tool, um "Kingsoft PowerWord 2002" zu analysieren, und die Analyseergebnisse sind wie folgt:
Der Name der Form von Kingsoft PowerWord 2002 lautet: Kingsoft PowerWord 2002
Kingsoft Powerword 2002s Worteingangskontrollklassen Name: Bearbeiten (eine untergeordnete Form von Combobox )
Kingsoft PowerWord 2002s Übersetzungsergebnis -Steuerungsklassen Name: xDict_ExplainView
Programmschnittstelle:
Ein Timer -Steuerelement (Timer1, dessen Intervall 3 Sekunden beträgt), eine Memo -Steuerung (Mlist) und zwei Richedit -Steuerelemente (Rtrans, RCONV), der spezifische Code lautet wie folgt:
Schnittstelle
Verwendung
Windows, Nachrichten, Sysutils, Varianten, Klassen, Grafiken, Steuerelemente, Formulare, Dialoge, STDCtrls, Comctrls, Clipbrd, Schaltflächen, extctrls, Menüs;
Typ
Tform1 = Klasse (tform)
Mlist: tmemo;
Rtrans: Trichedit;
Button1: Tbutton;
Timer1: Timer;
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;
Panel1: tpanel;
ProgressBar1: TprogressBar;
Splitter1: TSPLITTERT;
Splitter2: TSPLITTERT;
E1: tmenuitem;
N6: tmenuitem;
N7: tmenuitem;
N8: tmenuitem;
Edit1: tedit;
Label1: Tlabel;
Label2: Tlabel;
Label3: Tlabel;
PROCEDURE Taste1Click (Absender: Tobject);
Procedure Timer1Timer (Absender: Tobject);
PROCEDURE Button2Click (Absender: Tobject);
PROCEDURE Button3Click (Absender: Tobject);
Prozedur N3Click (Absender: Tobject);
Prozedur N6Click (Absender: Tobject);
Prozedur N8Click (Absender: Tobject);
Privat
{Private Deklarationen}
öffentlich
{Öffentliche Erklärungen}
Ende;
var
Form1: tform1;
I: Integer = 0; // Deklarieren Sie eine globale Variable für die Wortauswendungen
Durchführung
{$ R *.dfm}
// Starten Sie das Conversion -Event
procedure tform1.button1click (Absender: tobject);
Beginnen
Rtrans.clear; // den Konversionsbereich löschen
Rconv.clear;
Timer1.Interval: = Strtoint (edit1.text)*1000; // Setzen Sie die Intervallzeit
Timer1.Enabled: = true; //
ProgressBar1.Position: = 0; // Legen Sie den Fortschrittsbalkenstatus fest
I: = 0; // Variablen zum Zählen initialisieren
progresorBar1.max: = mlist.lines.count;
Ende;
procedure tform1.timer1timer (Absender: tobject);
var
King, // Kingsoft Powerword 2002 Hauptfensterhandle
Kombination
Bearbeiten, // Word -Eingabefeld Handwerk
Mittel: Thandle; // Übersetzungsanzeigefensterhandfenster
Beginnen
Wenn ich <= mlist.lines.count-1 dann
Beginnen
König: = FindWindow (NIL, PCHAR ('Kingsoft PowerWord 2002');
Combo: = findWindowex (König, 0, 'Combobox', nil);
bearbeiten: = findWindowex (Combo, 0, 'edit', nil);
Mittel: = findWindowex (König, 0, 'xDict_ExplainView', nil);
// Informationsanzeige
Label3.Caption: = '('+inttoStr (i+1)+'/'+inttoStr (mlist.lines.count)+')'+mlist.lines [i];
// Speicherinformationen
clipboard.astext: = mlist.lines [i];
ShowWindow (König, SW_SHOWNORMAL);
BringWindowtotop (König);
SetforecroundWindow (König);
Windows.setFocus (bearbeiten);
// Simulation von Strg+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);
SetforecroundWindow (Mittel);
Windows.SetFocus (Mittelwerte);
// Simulation Strg+a Wählen Sie alle aus
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);
SetforecroundWindow (Mittel);
Windows.SetFocus (Mittelwerte);
// Simulation von Strg+C Kopie
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);
// Simulation von Strg+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; // Fortschrittsbalkenbewegungen
INC (i); // Erhöhen Sie die Anzahl
Ende sonst
Beginnen
Timer1.Enabled: = false;
Rtrans.lines.savetofile ('temp.txt');
Ende;
Ende;
// Lesen Sie die Wortliste in mlist durch
procedure tform1.button2click (Absender: tobject);
Beginnen
Wenn od.execute dann
Mlist.lines.loadfromFile (od.filename);
Ende;
// Umwandlungsfunktion, da die phonetischen Symbole in der in RTRANS erhaltenen Übersetzung nicht korrekt angezeigt werden können
// Sie müssen zuerst die fonetische Plain -Schriftart im Schriftverzeichnis in Kingsoft Powerword installieren
// Implementieren Sie die richtige Anzeige von phonetischen Symbolen
procedure tform1.button3click (Absender: tobject);
var
I: Ganzzahl;
Start, endet: Ganzzahl;
Beginnen
Rconv.clear;
für i: = 0 bis rtrans.lines.count-1 tun
Beginnen
Richedit3.Text: = rtrans.lines [i];
Start: = pos ('[', Richedit3.Text); // Finden Sie die Position des phonetischen Symbols, das phonetische Symbol ist in []
Wenn Start> 0 dann
Beginnen
endet: = pos (']', Richedit3.text);
Richedit3.SselStart: = Start;
Richedit3.Sellength: = Enden-Start-1;
Richedit3.Selattributes.Name: = 'Kingsoft Phonetic Plain';
Ende;
Richedit3.Selectall;
Richedit3.CopyToclipboard;
Rconv.pastefromclipboard;
application.ProcessMessages;
Ende;
Ende;
// Programmexit
procedure tform1.n3click (Absender: tobject);
Beginnen
application.terate;
Ende;
// Funktion kopieren
procedure tform1.n6click (Absender: tobject);
Beginnen
Rconv.selectall;
Rconv.copytoclipboard;
Ende;
// Stoppen Sie die Konvertierung
procedure tform1.n8click (Absender: tobject);
Beginnen
Timer1.Enabled: = false;
Ende;
Ende.
OK, bisher sind alle Programme gestaltet.
Wie man rennt:
Stellen Sie sicher, dass "Kingsoft Powerword 2002" mit diesem Programm ausgeführt wird.
OK, ich habe diese 600 Wörter erfolgreich übersetzt und sie in Word auf Papier gedruckt.
So erhalten Sie kompilierte ausführbare Programme und Quellcode:
Sie können mir eine E -Mail senden: [email protected]
Oder melden Sie sich bei meiner Website an und hinterlassen Sie eine Nachricht: http://redlegend.51.net