![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Пишу типа чата. Хочу чтоб сообщения из мемо посылались на 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  |