Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 418

Раздел: Delphi » Прочее
/ вопрос открыт /

Доброго врямя суток уважаемые програмисты.
У меня есть строка (на пример "_X@x^2$-25$-_x-8@x^2$-10x+25$$:_x-20@x-5$^2")
Надо чтобы у програме UMS вводились соотвецтвенные выражения ("http://seledka2.ho.com.ua/1.png")
Вопрос у следущем: как сделать так чтобы когда цифры - писать их (посылать ей нажатие), а когда символы(^#&...) мышка нажимала на соотвецтвующие коорденаты, или на стрелки вправо($) и вниз(@)???
Помогить плз. В пятницу вступительный экзамен по алгебре. Прога будет читьать файл (по строкам, каждая строка - новый пример) и по ФТП и туда же ложить ответ. С ФТП я разобрался, а вот с вводом проблемы. Прошу помощи.

Приложение:
  1.  
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8. Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  9. IdFTP, StdCtrls, ExtCtrls, idftpcommon;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. IdFTP1: TIdFTP;
  14. Timer1: TTimer;
  15. Button1: TButton;
  16. Button2: TButton;
  17. procedure Button1Click(Sender: TObject);
  18. procedure FormCreate(Sender: TObject);
  19. procedure Timer1Timer(Sender: TObject);
  20. private
  21. { Private declarations }
  22. public
  23. { Public declarations }
  24. end;
  25.  
  26. var
  27. Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.dfm}
  32.  
  33. // ------------------------------- START PROCEDURES ----------------------------
  34.  
  35. function LinesCount(const Filename: string): Integer;
  36. var
  37. HFile: THandle;
  38. FSize, WasRead, i: Cardinal;
  39. Buf: array[1..4096] of byte;
  40. begin
  41. Result := 0;
  42. HFile := CreateFile(Pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil,
  43. OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  44. if HFile <> INVALID_HANDLE_VALUE then
  45. begin
  46. FSize := GetFileSize(HFile, nil);
  47. if FSize > 0 then
  48. begin
  49. Inc(Result);
  50. ReadFile(HFile, Buf, 4096, WasRead, nil);
  51. repeat
  52. for i := WasRead downto 1 do
  53. if Buf[i] = 10 then
  54. Inc(Result);
  55. ReadFile(HFile, Buf, 4096, WasRead, nil);
  56. until WasRead = 0;
  57. end;
  58. end;
  59. CloseHandle(HFile);
  60. end;
  61.  
  62.  
  63.  
  64. procedure Delay(dwMilliseconds: Longint);
  65. var
  66. iStart, iStop: DWORD;
  67. begin
  68. iStart := GetTickCount;
  69. repeat
  70. iStop := GetTickCount;
  71. Application.ProcessMessages;
  72. until (iStop - iStart) >= dwMilliseconds;
  73. end;
  74.  
  75.  
  76.  
  77. function GrabLine(const s: string; ALine: Integer): string;
  78. var
  79. sl: TStringList;
  80. begin
  81. sl := TStringList.Create;
  82. try
  83. sl.LoadFromFile(s);
  84. Result := sl[ALine - 1]; // index off by one
  85. finally
  86. sl.Free;
  87. end;
  88. end;
  89.  
  90.  
  91.  
  92.  
  93. // -------------------------------- END PROCEDURS ------------------------------
  94.  
  95. procedure TForm1.Button1Click(Sender: TObject);
  96. begin
  97. timer1.Enabled:=true;
  98. end;
  99.  
  100. procedure TForm1.FormCreate(Sender: TObject);
  101. begin
  102. with IdFTP1 do
  103. try
  104. Username:='nazemnow';
  105. Password:='nazemnow';
  106. Host:='s4.ho.com.ua';
  107. Connect;
  108. IdFTP1.ChangeDir('/ums');
  109. IdFTP1.TransferType:=ftBinary;
  110. finally
  111.  
  112. end;
  113. end;
  114.  
  115. procedure TForm1.Timer1Timer(Sender: TObject);
  116. var i{, Xint, Yint}: integer;
  117. s{, Xstr, Ystr, wrd}: string;
  118. begin
  119. IdFTP1.Get('primer.txt', '.dataprimer.txt',true);
  120. for i:=0 to LinesCount('.dataprimer.txt') do begin
  121. s:=GrabLine('.dataprimer.txt', i);
  122.  
  123. // START \
  124.  
  125.  
  126.  
  127.  
  128. // FINISH \
  129.  
  130. end;
  131. end;
  132.  
  133. end.


Наземнов Вячеслав Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Наземнов Вячеслав (статус: Посетитель)
Вопрос отправлен: 19 марта 2007, 19:25
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Да, дожились. Мы в своё время ручками решали всё. Так надёжнее.

Теперь по вопросу. То, что вы хотите, называется лексический парсер. Только в вашем случае он предельно прост.Код я привожу ниже, но его лучше вынести в отдельный поток - будет чётче работать. Именно для этого по коду разбросаны Sleep(10).
Почему не привожу полный код? Если вы в математике не хотите разбираться, тогда программист не получиться.

Так как у меня нет этой проги, а решать я и без неё умею, то некоторые вещи в коде вам прийдётся догадываться самому.

Приложение:
  1. function Solve(s:string):boolean;
  2. var i:integer;
  3. h:THandle;
  4. begin
  5.  
  6.  
  7.  
  8. for i:=1 to length(s) do begin
  9. case s[i] of
  10. '0'..'9','.','.':SendMessage(h,WM_CHAR,ord(s[i],0);
  11.  
  12. '^':
  13. end;
  14. sleep(10);
  15. end;
  16. end;


Ответ отправил: Вадим К (статус: Академик)
Время отправки: 20 марта 2007, 11:24
Оценка за ответ: 5

Комментарий к оценке: Спасибо большое. То что надо.
Вадим К - респект !!!

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.02 сек.