|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перехватить и отменить 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
|
|||
|
|||
Отлавливать нажатие на уровне формы. Выстави у формы KeyPreview = true и в обработчике формы очисти Key.
|
#3
|
|||
|
|||
Одна фигня. сообщение показывает а в мемо переходит на другую строчку.
Код:
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
|
|||
|
|||
Все нормально работает:
Код:
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
|
||||
|
||||
Кстати мемо не очень для этого подходит, т.к. не поддерживает форматирование - используйте RichEdit, только почитайте сначала про формат rtf, тогда сможете и смайлики туда внедрить без проблем.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Да спасибо. Заменил. Еще странно не могу скроллинг сделать колесиком мыши для Scrollbar.
Memo, а теперь RichEdit жадно забирает фокус. На FormShow я делаю RichEdit.SetFocus - Колесико работает. A как я помещаю на Memo/RichEdit - всё, конец вечеринки. Imikle, не понятно а Shift + Enter как же сделать теперь? Последний раз редактировалось aqula, 14.02.2016 в 08:52. |
#7
|
||||
|
||||
Код:
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
|
|||
|
|||
Спасибо. Та же проблема в 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
|
||||
|
||||
Ничего у меня не переходит. Что-то странное у вас происходит.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#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
|
|||
|
|||
Цитата:
Есть такая функция - GetKeyState |