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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.11.2011, 11:16   #1
VAM
Пользователь
 
Аватар для VAM
 
Регистрация: 06.02.2011
Сообщений: 30
По умолчанию Алгоритм "двойной Enter"

Доброго всем !

Есть у кого-нибудь есть какие-нинибудь наработки.
Никак не выходит. Все время "проскакивает" один перевод строки в компонент.
Компонент - RichEdit
« Amor Componentis Nos Unit »
VAM вне форума
Старый 09.11.2011, 11:26   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Напишите часть кода своего, как текст в компонент попадает, просто там можно проверку делать и лишнее откидывать.

Последний раз редактировалось Aliens_wolfs; 09.11.2011 в 12:11.
Aliens_wolfs вне форума
Старый 09.11.2011, 13:33   #3
VAM
Пользователь
 
Аватар для VAM
 
Регистрация: 06.02.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Напишите часть кода своего, как текст в компонент попадает, просто там можно проверку делать и лишнее откидывать.
Код:
unit Unit1;
interface uses Unit2, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm) Memo1: TMemo; Timer1: TTimer;
    procedure Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private public end;

var
  Form1: TForm1;
  _enter: boolean;
  _count: integer;

implementation
{$R *.dfm}

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if key= VK_RETURN then
   begin
   inc(_count);
   Key := 0;
   if _count=2 then
     begin
     _count:= 0;
     if _enter then
       begin
       memo1.Lines.Add('Двойной Enter ...');
       _enter:= false;
       Key := 0;
       Exit;
       end
     end;
   if not _enter then
     begin
     _enter:= true;
     timer1.Enabled:= true;
     Key := 0;
     end;
   end
   else
   begin
   _count:= 0;
   if _enter then timer1.Enabled:= false;
   Key := 0;
   end;
 inherited;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  _enter:= false;
  timer1.Enabled:= false;
end;

end.
Зачем вы отвечаете с цитированием всего предыдущего поста ?
Чтоб "простыня" подлиннее получилась ?
Чтоб ваш "драгоценнейший" пост занимал весь экран ?
Вы не видите кнопку справа от кнопки "Цитата" ?
Или вам почему-то не видно пустое окно редактора под последним сообщением, куда можно просто ввести ответ ?
За оверквотинг у нас штрафуют, имейте это ввиду.
Дабы не нарушать правила раздела, внимательно их почитайте...
« Amor Componentis Nos Unit »

Последний раз редактировалось mihali4; 09.11.2011 в 17:23.
VAM вне форума
Старый 09.11.2011, 14:28   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Я так понял что при каждом повторном нажатии Enter должна появляться ниже строка?

Если так то вот простой вариант без таймера там он ненужен

Код:
var
  Form1: TForm1;
  _count: integer=0;


procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if key = VK_RETURN then
   begin
   inc(_count);
   if _count > 1 then
   begin
   memo1.Lines.Add('Двойной Enter ...');
   _count:=0;
   end;
   end;
end;

Последний раз редактировалось Aliens_wolfs; 09.11.2011 в 14:41.
Aliens_wolfs вне форума
Старый 09.11.2011, 14:35   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я бы предложил не париться с таймером и отлавливанием нажатий Enter, а перед записью содержимого Memo (наверно не хочется сохранять избыточные переводы строки) пропарсить его содержимое на избыточные переводы строки и удалить их
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 09.11.2011, 14:43   #6
VAM
Пользователь
 
Аватар для VAM
 
Регистрация: 06.02.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Я так понял что при каждом повторном нажатии Enter должна появляться строка Двойной Enter ...?

Если так то вот простой вариант без таймера там он ненужен ...
Понимаете, "двойной Enter" - это как-бы двойной быстрый клик клавишей, и соответствующее действие по нему, а Ваш упрощенный пример просто на каждый 2-й Enter даст событие. В моем случае это, как пример, - memo1.Lines.Add('Двойной Enter ...');
Меня интересует именно двойное быстрое нажатие Enter`а.

Цитата:
Сообщение от Аватар Посмотреть сообщение
Я бы предложил не париться с таймером и отлавливанием нажатий Enter, а перед записью содержимого Memo (наверно не хочется сохранять избыточные переводы строки) пропарсить его содержимое на избыточные переводы строки и удалить их
Это неприемлемо тут.
« Amor Componentis Nos Unit »
VAM вне форума
Старый 09.11.2011, 14:53   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
inherited;
Exit;
не нужен.

p.s.: могу сказать, что таймер в данном коде введен для выдержки, по истечении которой два растянутых по времени ENTER-а подряд аннулируются (т.е. когда человек нажал перевод строки, потом погулял и нажал еще раз)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 09.11.2011 в 14:56.
raxp вне форума
Старый 09.11.2011, 15:03   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

два Enter подряд.
Код:
 
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if key= VK_RETURN then
     PostMessage(Memo1.Handle, WM_KEYUP, VK_RETURN, 0);
end;

или
вам нужно ловить сабытие по двум Enter в Memo?

Последний раз редактировалось Aliens_wolfs; 09.11.2011 в 15:10.
Aliens_wolfs вне форума
Старый 09.11.2011, 15:06   #9
VAM
Пользователь
 
Аватар для VAM
 
Регистрация: 06.02.2011
Сообщений: 30
По умолчанию

Простите. Но это совсем не то.
Повторюсь: мне нужно среагировать на двойной Enter (т.е. на дважды быстро нажатые Enter), а не породить второй на нажатие первого ...

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
...
или
вам нужно ловить сабытие по двум Enter в Memo?
Да.
« Amor Componentis Nos Unit »

Последний раз редактировалось VAM; 09.11.2011 в 15:14.
VAM вне форума
Старый 09.11.2011, 15:25   #10
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

Код:
procedure TForm1.EnterTimerTimer(Sender: TObject);
begin
  Entered := False;
  EnterTimer.Enabled := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Entered := False;
  EnterTimer := TTimer.Create(Self);
  EnterTimer.Interval := 500;
  EnterTimer.OnTimer := EnterTimerTimer;
  EnterTimer.Enabled := False;
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    if Entered then
    begin
      Entered := False;
      Memo1.Perform(WM_CHAR, 8, 0);
      Memo1.Lines.Add('двойной Enter');
      Key := #0;
      EnterTimer.Enabled := False;
    end
    else
    begin
      Entered := True;
      EnterTimer.Enabled := True;
    end;
  end
  else
  begin
    Entered := False;
    EnterTimer.Enabled := False;
  end;
end;
как-то так, думаю.
Хамяг вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно заменять "запятая" на "Enter" Silent-cry Microsoft Office Word 4 26.01.2018 12:03
двойной формат программы "excel.xls.lnk" 0mega Microsoft Office Excel 2 16.06.2010 21:56
Клавиша "enter " для определенных ячеек karud Microsoft Office Excel 1 02.05.2010 11:19
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51