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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2008, 10:43   #1
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию Передача данных из Memo1 в Memo2

Имеем следующий код.На форме два Memo, в один пишем текст, в другом синхронно отражаются коды символов, вводимых в 1-й Memo.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
  code: byte;
  simbol: char;
begin
   simbol:= Key;          // символ нажатой клавиши
   code:= ord(simbol);    // код ANSII символа
   Form1.Memo2.SelText:= IntToStr(code); // запись кода символа в Memo2
   Form1.Memo2.SelText:= ' ';            // разделяем коды пробелом
end;

end.
Каким образом можно сделать так, что бы -
1. при переносе строки в 1-м Memo во втором также осуществлялся перенос строки.
2. При удалении символа в первом Memo удалялся код удаленного символа во втором.
На рисунке видно процесс программы.

И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 26.11.2008, 11:25   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then memo2.Text:=memo2.Text+#13#10
 else memo2.Text:=memo2.Text+inttostr(ord(Key))+' ';
end;

Последний раз редактировалось SERG1980; 26.11.2008 в 11:29.
SERG1980 вне форума Ответить с цитированием
Старый 26.11.2008, 11:49   #3
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

SERG1980 спасибо - с переносом строки прекрасно работает.А как насчет удаления?
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 26.11.2008, 12:43   #4
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Я бы вообще бы так сделал, но есть недостаток один. При большом количестве символов притормаживать будет.
Код:
procedure TForm1.Memo1Change(Sender: TObject);
var
  I: integer;
begin
  Memo2.Clear;
  for I := 1 to length(Memo1.Text) do
    Memo2.Text := Memo2.Text + IntToStr(Ord(Memo1.Text[i])) + ' ';
end;
Зато можно спокойно удалять любой символ из memo1 =)

P.S. Чтобы не было тормозов, можно выполнять этот по принажатии на кнопку, при необходимости.
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось VVM; 26.11.2008 в 12:58.
VVM вне форума Ответить с цитированием
Старый 26.11.2008, 13:31   #5
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

To VVM что то похожее сейчас "изобретаю".Спасибо за подсказку.Предложеную Вами процедуру можно вызывать из Memo1KeyPress по условию
Код:
if code = 8 then Memo1Change
И думаю еще над вариантом - при этом условии - фокус в Memo2 , и
стереть последние два значения кода, опять вернуть фокус в Memo1.
Вот только как программно симитировать клавишу удаления?
Тут что то типа создать обработчик Memo2KeyPress и через Sender
вызывать с параметром нажатой клавиши удаления.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 26.11.2008, 13:33   #6
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

А если юзверь будет удалять не последний символ?)

Пока что единственная идея-- вариант, предложенный VVM.
NikLik вне форума Ответить с цитированием
Старый 26.11.2008, 14:14   #7
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Цитата:
Вот только как программно симитировать клавишу удаления?
Код:
  keybd_event(VK_BACK, 0, KEY_EVENT, 0);
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.
VVM вне форума Ответить с цитированием
Старый 26.11.2008, 14:49   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,810
По умолчанию

VVM дал правильное решение. А что бы не тормозило сильно, я бы сделал так:
Код:
procedure TForm1.Memo1Change(Sender: TObject);
var
  I: integer;
  Str1, Str2: string;
begin
  Str1 := Memo1.Text;
  Str2 := '';
  for I := 1 to length(Str1) do
  begin
    Str2 := Str2 + IntToStr(Ord(Str1[i])) + ' ';
    if Str1[i] = #13 then Str2 := Str2 + #13#10;
  end; {for}
  Memo2.Text := Str2;
end;
Это должно с переводами строк еще работать.
Arigato вне форума Ответить с цитированием
Старый 26.11.2008, 15:55   #9
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

To Arigato - То, что требовалось. Большое спасибо! Всем откликнувшимся.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат, передача данных Патрон Общие вопросы Delphi 1 24.06.2008 09:15
Передача данных Ivanich JavaScript, Ajax 1 29.04.2008 00:25
отправить содержимое Memo1 на Memo2, по нажатии enter Патрон Общие вопросы Delphi 2 08.03.2008 07:18
Передача данных ChipLink Общие вопросы Delphi 4 06.01.2008 11:28