Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2012, 16:30   #1
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию Своя функция ReadLN

Мне понадобилось написать функцию типа консольного Read (ReadLN) но для TMemo
Во-первых как это вообще сделать, во-вторых как сделать так, чтобы вызывая ReadLN вызывалась из моего юнита а не из System?
Функция _ReadLn из модуля System использует TTextRec, а сама вообще на ассемблере
DelhiProgramer вне форума Ответить с цитированием
Старый 08.09.2012, 18:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Во-первых как это вообще сделать
Код:
function Readln:String;
begin Result:='';
 with Memo1 do begin
  if Count=0 then exit;
  Result:=Lines[0];
  Delete(0);
 end;
end;
Цитата:
во-вторых как сделать так, чтобы вызывая ReadLN вызывалась из моего юнита а не из System?
Пиши полный путь:
ИмяТвоегоМодуля.Readln;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2012, 09:31   #3
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

function Readln:String;
begin Result:='';
with Memo1 do begin
if Count=0 then exit;
Result:=Lines[0];
Delete(0);
end;
end;
Мне надо чтоб можно было написать readln(r: integer); то есть можно было не только строки, но и вообще всё, что можно напечатать
DelhiProgramer вне форума Ответить с цитированием
Старый 09.09.2012, 09:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то есть можно было не только строки, но и вообще всё, что можно напечатать
Можешь обьяснить зачем тебе это.
Readln это не просто процедура, это скорее системная инструкция. Так вот запросто ее повторить не просто.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2012, 09:47   #5
DelhiProgramer
Пользователь
 
Регистрация: 10.08.2012
Сообщений: 84
По умолчанию

Приведу пример где это реализовано:
Pascal ABC - написан на Delphi 5(6). Там модуль CRT - просто окно. Он на канву текст выводит. Но дисассемблер не всё показывает...Как они туда запёрли свой реадлн
Что касается системных инструкций то ReadLN:
Код:
procedure _ReadLn(var t: TTextRec);
asm
// -> EAX Pointer to text record

        PUSH     EBX
        MOV      EBX,EAX
@@loop:
        MOV      EAX,EBX
        CALL     _ReadChar

        CMP      AL,cLF            // accept LF as end of line
        JE       @@exit
        CMP      AH,cEOF
        JE       @@eof
        CMP      AL,cCR
        JNE      @@loop

        MOV      EAX,EBX
        CALL     _ReadChar

        CMP      AL,cLF            // accept CR+LF as end of line
        JE       @@exit
        CMP      AH,cEOF           // accept CR+EOF as end of line
        JE       @@eof
        DEC      [EBX].TTextRec.BufPos
        JMP      @@loop            // else CR+ anything else is not a line break.

@@exit:
@@eof:
        POP      EBX
end;
DelhiProgramer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция Readln в Delphi - как заменить Умагаджи Помощь студентам 2 06.04.2012 08:11
Readln и задержка Freezy Паскаль, Turbo Pascal, PascalABC.NET 0 17.04.2011 15:26
Readln BaJIuK Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.06.2010 04:21
своя функция LeoN PHP 3 01.08.2009 21:54