Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.02.2016, 22:30
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию Перехватить и отменить Enter в Мемо

Пишу типа чата. Хочу чтоб сообщения из мемо посылались на Enter
А переход на другую сроку Shift + Enter как вконтакте
Написал так
Код:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (ssShift in Shift) AND (Key=VK_RETURN) then exit;

  if (Key=VK_RETURN) then
  begin
    Key:=0;
    Button3.Click;
    //Memo1.Clear;
    exit;
  end;
end;
Но не могу победить переход на другую строку в мемо.
Кабы очистить мемо после нажатия Enter. Может подскажете что-нибудь?
Ответить с цитированием
  #2  
Старый 12.02.2016, 05:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Отлавливать нажатие на уровне формы. Выстави у формы KeyPreview = true и в обработчике формы очисти Key.
Ответить с цитированием
  #3  
Старый 13.02.2016, 14:05
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Одна фигня. сообщение показывает а в мемо переходит на другую строчку.

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=VK_F5) then showmessage('');// Button8.Click;
  if (Key=VK_RETURN) then
  begin
    showmessage('');
    Key:=0;
    //Button3.Click;

  end;
  if (ssShift in Shift) AND (Key=VK_RETURN) then exit;
end;
Ответить с цитированием
  #4  
Старый 13.02.2016, 19:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Все нормально работает:
Код:
Form1.KeyPreview := True;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  If Key = #13
    Then
      Begin
        Label1.Caption := 'ENTER PRESSED!!!';
        Key := #0;
      End
    Else
      Label1.Caption := 'Not ENTER';
end;
Ответить с цитированием
  #5  
Старый 13.02.2016, 21:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Кстати мемо не очень для этого подходит, т.к. не поддерживает форматирование - используйте RichEdit, только почитайте сначала про формат rtf, тогда сможете и смайлики туда внедрить без проблем.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 14.02.2016, 08:38
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Да спасибо. Заменил. Еще странно не могу скроллинг сделать колесиком мыши для Scrollbar.
Memo, а теперь RichEdit жадно забирает фокус. На FormShow я делаю RichEdit.SetFocus - Колесико работает. A как я помещаю на Memo/RichEdit - всё, конец вечеринки.

Imikle, не понятно а Shift + Enter как же сделать теперь?

Последний раз редактировалось aqula, 14.02.2016 в 08:52.
Ответить с цитированием
  #7  
Старый 14.02.2016, 13:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Код:
procedure TForm9.RichEdit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = VK_RETURN
 then begin
      if Shift = [ssShift]
      then RichEdit2.Lines.Add('')
      else begin
           RichEdit1.Lines.Add(RichEdit2.Text);
           RichEdit2.Text := '';
           end;
      Key := 0;
      end;
end;
А зачем вам отдельный сколбар? В ричедитах и мемо есть же возможность включить их.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 14.02.2016 в 13:58.
Ответить с цитированием
  #8  
Старый 14.02.2016, 16:55
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Спасибо. Та же проблема в RichEdit переходит на следущую строку.
Код:
procedure TChat.RichEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_RETURN
 then begin
      if Shift = [ssShift]
      then RichEdit1.Lines.Add('')
      else begin
      Key := 0;
           Button3.Click;
           RichEdit1.Text := '';
           end;
      end;
end;
скролбар для сообщений. там формирую сообщения в виде панелей ))

Последний раз редактировалось aqula, 14.02.2016 в 17:11.
Ответить с цитированием
  #9  
Старый 14.02.2016, 17:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ничего у меня не переходит. Что-то странное у вас происходит.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 14.02.2016, 18:38
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Даже если так сделать, один раз но переходит на Enter. Второй уже нет. )) Да соглашусь - странно.
Код:
procedure TChat.RichEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if Key = VK_RETURN
 then begin
      if Shift = [ssShift]
      then RichEdit1.Lines.Add('')
      else begin
           RichEdit1.Text:='';
           end;
      Key := 0;
      end;
end;


есть там свойство одно WantReturns так вот у меня он был на True;
на False все как надо. )))

Последний раз редактировалось aqula, 14.02.2016 в 20:09.
Ответить с цитированием
  #11  
Старый 14.02.2016, 20:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от aqula
Imikle, не понятно а Shift + Enter как же сделать теперь?

Есть такая функция - GetKeyState
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter