Witam, chciałem napisać program do poprawiania błędów ortograficznych i interpunkcyjnych, jednak nie bardzo wiem jak to zrobić.
Wyskrobałem coś takiego:
Procedura klikniecia jakiegokolwiek przycisku:
Jezeli w Memo2.Text (log z KeySpyXP) znajdzie się jakiś wyraz z Memo1.Text, wtedy:
1. przypisz do "dlugosc" liczbe ile jest znakow w Memo1.Text (tam gdzie beda zle napisane slowa)
Dopóki "kasuj" (0) jest mniejsze niż "długosc" (wyrazu zle napisanego) to:
1. Dopisz do "kasuj" +1
2. Kliknij BackSpace
Jeżeli zmazaliśmy już wyraz:
Dopoki dlugosc (zle napisanego wyrazu) jest wieksza niz "przebyta" (0) (potrzebne do napisania nowego wyrazu) to:
1. Dodaj do "przebyta" +1
2. dopisz do "znak", litere ktora ma zostac wcisnieta (potrzebne do napisania nowego wyrazu)
3. Kliknij na klawiaturze 1 litere... a potem druga.. az napiszesz caly wyraz
Jeżeli napiszesz już cały wyraz to:
Koniec procedury
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dlugosc: Integer;
przebyta: Integer;
znak: Char;
kasuj: Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
sleep(2000); // czekaj 2 sek. na danie myszki na notepada (narazie tak testuje... bez KeySpyXP)
dlugosc := Length(Memo1.Text); // przypisz do "dlugosc" liczbe ile jest znakow w Memo1.Text (tam gdzie beda zle napisane slowa)
Label3.Caption := IntToStr(Length(Memo1.Text)); // pomaga mi naprawiać błędy
while (kasuj < dlugosc) do // dopoki kasuj jest mniejsze niz dlugosc (wyrazu zle napisanego) to:
begin
Label1.Caption := 'kasuj < dlugosc'; // pomaga znaleźć błąd
kasuj := kasuj+1; // dopisz do kasuj+1
keybd_event(vk_back, 0, 0, 0); //i kliknij BackSpace... i tak na nowo... az kasuj bedzie miala taka sama wartosc jak dlugosc
end; // czyli zmazalismy wyraz zle napisany
while (dlugosc > przebyta) do // dopoki dlugosc (zle napisanego wyrazu) jest wieksza niz "przebyta" (potrzebne do napisania nowego wyrazu) to:
begin
Label1.Caption := 'dlugosc > przebyta'; // tylko do pomagania poprawić błędy
przebyta := przebyta+1; // dodaj do przebyta+1
znak := Memo1.Text[przebyta]; // dopisz do znak, litere ktora ma zostac wcisnieta (potrzebne do napisania nowego wyrazu)
keybd_event(VkKeyScan(znak), 0, 0, 0); // kliknij na klawiaturze 1 litere... a potem druga.. az napiszesz caly wyraz
keybd_event(VkKeyScan(znak), 0, KEYEVENTF_KEYUP, 0);
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
dlugosc := 0; // ustaw "dlugosc" na 0
przebyta := 0; // ustaw "przebyta" na 0
kasuj := 0; // ustaw "kasuj" na 0
end;
end.
To co napisałem może wydawać się niezrozumiałe - ale już taka moja natura ; d
Czego nie wiem jak zrobić?
- Jak zrobić, by.... yyy... dajmy na to że mam 3 memo:
1Memo: Tutaj są logi z KeySpyXP (tego co wystukujemy klawiaturą).
2Memo: Tutaj są źle napisane wyrazy np.:
muglbym
mugłbym
żekłem
żeklem
zeklem
3Memo: Tutaj są dobrze napisane wyrazy, przy czym w tej samej linijce co źle napisany wyraz np.:
mógłbym
mógłbym
rzekłem
rzekłem
rzekłem
No i teraz tak: Aby znajdywało źle napisany wyraz to już mam... teraz jak zrobić, by po znalezieniu tego źle napisanego wyrazu podmieniało go na dobry z Memo3?
Jeżeli coś nie tak wyjaśniłem to piszcie...
Proszę o pomoc,
Pozdrawiam,
Defozo