| 
| 
 | Вопрос # 418/ вопрос открыт / | 
 |  Доброго врямя суток уважаемые програмисты.У меня есть строка (на пример "_X@x^2$-25$-_x-8@x^2$-10x+25$$:_x-20@x-5$^2")
 Надо чтобы у програме UMS вводились соотвецтвенные выражения ("http://seledka2.ho.com.ua/1.png")
 Вопрос у следущем: как сделать так чтобы когда цифры - писать их (посылать ей нажатие), а когда символы(^#&...) мышка нажимала на соотвецтвующие коорденаты, или на стрелки вправо($) и вниз(@)???
 Помогить плз. В пятницу вступительный экзамен по алгебре. Прога будет читьать файл (по строкам, каждая строка - новый пример) и по ФТП и туда же ложить ответ. С ФТП я разобрался, а вот с вводом проблемы. Прошу помощи.
 Приложение:Переключить в обычный режим  unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,  IdFTP, StdCtrls, ExtCtrls, idftpcommon; type  TForm1 = class(TForm)    IdFTP1: TIdFTP;    Timer1: TTimer;    Button1: TButton;    Button2: TButton;    procedure Button1Click(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure Timer1Timer(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} // ------------------------------- START PROCEDURES ---------------------------- function LinesCount(const Filename: string): Integer;var  HFile: THandle;  FSize, WasRead, i: Cardinal;  Buf: array[1..4096] of byte;begin  Result := 0;  HFile := CreateFile(Pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil,    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);  if HFile <> INVALID_HANDLE_VALUE then  begin    FSize := GetFileSize(HFile, nil);    if FSize > 0 then    begin      Inc(Result);      ReadFile(HFile, Buf, 4096, WasRead, nil);      repeat        for i := WasRead downto 1 do          if Buf[i] = 10 then            Inc(Result);        ReadFile(HFile, Buf, 4096, WasRead, nil);      until WasRead = 0;    end;  end;  CloseHandle(HFile);end;   procedure Delay(dwMilliseconds: Longint); var   iStart, iStop: DWORD; begin   iStart := GetTickCount;   repeat     iStop := GetTickCount;     Application.ProcessMessages;   until (iStop - iStart) >= dwMilliseconds; end;    function GrabLine(const s: string; ALine: Integer): string; var   sl: TStringList; begin   sl := TStringList.Create;   try     sl.LoadFromFile(s);     Result := sl[ALine - 1]; // index off by one   finally     sl.Free;   end; end;    // -------------------------------- END PROCEDURS ------------------------------ procedure TForm1.Button1Click(Sender: TObject);begin timer1.Enabled:=true;end; procedure TForm1.FormCreate(Sender: TObject);begin with IdFTP1 do   try    Username:='nazemnow';    Password:='nazemnow';    Host:='s4.ho.com.ua';    Connect;    IdFTP1.ChangeDir('/ums');    IdFTP1.TransferType:=ftBinary;   finally end;end; procedure TForm1.Timer1Timer(Sender: TObject);var i{, Xint, Yint}: integer;s{, Xstr, Ystr, wrd}: string;begin IdFTP1.Get('primer.txt', '.dataprimer.txt',true);   for i:=0 to LinesCount('.dataprimer.txt') do begin   s:=GrabLine('.dataprimer.txt', i);     // START \        // FINISH \    end;end; end.
|  |   Вопрос задал: Наземнов Вячеслав (статус: Посетитель)Вопрос отправлен: 19 марта 2007, 19:25
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Да, дожились. Мы в своё время ручками решали всё. Так надёжнее.
 Теперь по вопросу. То, что вы хотите, называется лексический парсер. Только в вашем случае он предельно прост.Код я привожу ниже, но его лучше вынести в отдельный поток - будет чётче работать. Именно для этого по коду разбросаны Sleep(10).
 Почему не привожу полный код? Если вы в математике не хотите разбираться, тогда программист не получиться.
 
 Так как у меня нет этой проги, а решать я и без неё умею, то некоторые вещи в коде вам прийдётся догадываться самому.
 Приложение:Переключить в обычный режим function Solve(s:string):boolean;var i:integer;h:THandle;begin   for i:=1 to length(s) do begincase s[i] of'0'..'9','.','.':SendMessage(h,WM_CHAR,ord(s[i],0); '^':end;sleep(10);end;end;
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 20 марта 2007, 11:24
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо большое. То что надо.Вадим К - респект !!!
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |