var
i: integer
begin
i:=i+1;
if i=0 then
Memo1.Lines.Add('Превед');
if i=1 then
begin
Memo1.Clear;
Memo1.Lines.Add('Превед сказал');
end;
if i>=2 then
begin
Memo1.Lines.Add('Превед сказал медвед');
Timer1.Enabled:=false;
end;
вывод текста в memo поле
(Вспомним фильм MATRIX), чёрный экран, зелёные буковки которые выводятся (мне нужен такой эффект, но что бы программа делала это сама).
Мошт создать таймер и с помощью него приписывать по букве едит?А если надо горизонтально,то вставляеш пробелы где надо...
Можно послать WM_KEYPRESS компоненту.
Опиши пожалуйста поподробней (желательно с примером)
Код:
Первое что пришло в голову...
[COLOR=red]учимься пользоваться ссылкой "редактировать", а не создавать новые сообщения. please.[/COLOR]
Кидаешь таймер и в его обработчик пишешь
(str - строка для вывода в мемо, глобальная переменная n=1):
Код:
if (n<length(str)) then
begin
SendMessage(Memo1.Handle,WM_CHAR,str[n],NULL) ; inc(n);
end else
Timer1->Enabled=false;
begin
SendMessage(Memo1.Handle,WM_CHAR,str[n],NULL) ; inc(n);
end else
Timer1->Enabled=false;
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
St: String;
begin
St := 'Текст который наджо напечатать';
Memo1.Text := Memo1.Text + St;
Inc(i);
if i > Length(St) then Timer1.Enabled := false;
end;
var
St: String;
begin
St := 'Текст который наджо напечатать';
Memo1.Text := Memo1.Text + St;
Inc(i);
if i > Length(St) then Timer1.Enabled := false;
end;
Или просто последовательно выводилось что-то типа: "Это ты Нео?" :)
Дак ты хочешь чтобы было совсем как в матрице, чтобы куча буковок сыпалась сверху? или печаталось в одну строку, если в одну строку то листинг я тебе привел.
я хочу, чтобы они печатались не только в одну строку
А как еще?
Сейчас напрягу свои способности ментата. В крайнем случае поинтересуюсь у Муаддиба, что собственно требуется и каковы последствия.
Цитата:
Попытка понять Муаддиба, не поняв его смертельных врагов,
- это попытка увидеть правду без знания лжи. Это попытка
понять, что такое свет, не зная, что такое тьма. Это просто
невозможно.
Принцесса Ирулэн.
Руководство Муаддиба.
- это попытка увидеть правду без знания лжи. Это попытка
понять, что такое свет, не зная, что такое тьма. Это просто
невозможно.
Принцесса Ирулэн.
Руководство Муаддиба.
(Герберт. Дюна)
Ты вообще хоть что-нть руками делаешь? Ты это набирать пробовал (см. #6)? Там в строке str добавляешь символы #13 и все!
Например вот так: Str := 'This is simple text' + #13#10 + '...';
Например вот так: Str := 'This is simple text' + #13#10 + '...';[/QUOTE]
мне надо, чтобы они появлялись по одной букве (как будто это печатается в настоящий момент), и я знаю как перенести на другую строку!!!
я же тебе показывал как сделать чтобы печаталось по одной букве, на предыдущей странице смотри листинг, процедура активирования таймера. Там как раз все хорошо работает.
Вот тут почему то выскакивает ошибка:
Цитата:
Memo1.Text:= Memo1.Text + St;
вылезла ошибка, будь добр написать ее, или не замусаривай форум.
вылезла ошибка, будь добр написать ее, или не замусаривай форум.[/QUOTE]
конечно объявил, чтож я со всем чтоль глупый
Цитата:
Memo1.Text:= Memo1.Text + St;
А у тебя в St есть i символов? Или, может быть, у тебя i=0? - Так тоже нельзя
Сопостовляем события на таймер, на создание формы и на нажатие клавиши. На таймере поставить оптимально что-то типа 100мс. Данный пример выводит последовательно строку из буфера St и очищает этот буфер. Если появляются новые данные (после нажатия баттона), они сразу выводятся.
Код:
var
Form1: TForm1;
St : String ;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Length(St) = 0 then
exit ;
SendMessage(Memo1.Handle,WM_CHAR,ord(st[1]),0) ;
// Если использовать SendMessage, вместо Memo1.Text := Memo1.Text + St[1];, то еще и курсорчик будет бежать.
St := copy(St,2,length(st) - 1) ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
St := 'Текст который нужно напечатать';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
St := St + 'Еще текст' ;
Memo1.SetFocus ;
end;
Form1: TForm1;
St : String ;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Length(St) = 0 then
exit ;
SendMessage(Memo1.Handle,WM_CHAR,ord(st[1]),0) ;
// Если использовать SendMessage, вместо Memo1.Text := Memo1.Text + St[1];, то еще и курсорчик будет бежать.
St := copy(St,2,length(st) - 1) ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
St := 'Текст который нужно напечатать';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
St := St + 'Еще текст' ;
Memo1.SetFocus ;
end;
И буквочки могут летать хоть как...