Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

Ctrl + Enter и Memo   Найти похожие ветки 

 
azl ©   (2007-01-17 18:41) [0]

Здравствуйте, глубокоуважаемые мастера!

Подскажите, пожалуйста, следующее. Пытаюсь сделать, чтобы при нажатии клавиш Ctrl + Enter, когда курсор находится в Memo, выполнялась процедура Button1Click (подобно ICQ).

Пишу вот так:

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (ssCtrl in Shift) and (Key = VK_Return) then
    Button1.OnClick(Self);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(Memo1.Text);
end;


Все хорошо, только смущает то, что курсор смещается вниз, как если бы просто была нажата клавиша Enter. А мне нужно, чтобы курсор оставался на месте.

Пример:
___________________________
Этот текст надо отправить<|>

___________________________

После нажатия Ctrl + Enter
___________________________
Этот текст надо отправить
<|>
___________________________

Почему так происходит? Как это исправить?


 
Плохиш ©   (2007-01-17 18:45) [1]

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_Return) then
begin
   Button1.OnClick(Self);
   Key := 0;
end;
end;


 
azl ©   (2007-01-17 19:04) [2]

Плохиш, тот же эффект. (((


 
Calibr ©   (2007-01-17 20:25) [3]


> azl ©   (17.01.07 18:41)
>


procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (Key = VK_Return) then
  begin
    Button1.OnClick(Self);
    Memo1.SetFocus;
    keybd_event(8, 0, 0, 0);
    keybd_event(8, 0, KEYEVENTF_KEYUP, 0);
  end;
end;


 
azl ©   (2007-01-17 23:06) [4]

Calibr, к сожалению опять не все слава богу. Вот что получается после нажатия Ctrl + Enter.
__________
Test

__________
Мало того, что курсор переходит на следующую строку, так еще и квадратик добавляется.


 
TRUNK ©   (2007-01-17 23:20) [5]

Привожу код, который я использовал в одной из своих программ:

в дизайнере: MainForm.KeyPreview := true;

в коде:


var
 FCtrl: Boolean;

procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = 17) then
 FCtrl := true;
if (Key = 13)and FCtrl  then
 Button1.OnClick(Self);
end;

procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Key = 17) then
 FCtrl := false;
end;

procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if FCtrl and((Key = #10)or(Key = #13)) then
 Key := #0;
end;


 
Johnmen   (2007-01-17 23:38) [6]

Достаточно
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = VK_Return) then Button1.Click;
end;

и
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key=#10 then Key:=#0;
end;


 
azl ©   (2007-01-18 00:07) [7]

УрррААААААА!!! Заработало. Всем спасибо.
Johnmen, варивант [6] мне понравился.
А почему так происходит?
Зачем еще событие он KeyPress обрабатывать надо? Просто интересно знать, на будущее.


 
Германн ©   (2007-01-18 00:11) [8]


> Зачем еще событие он KeyPress обрабатывать надо? Просто
> интересно знать, на будущее.

Если событие есть, должен же кто-то его обрабатывать :)



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.082 c
4-1159123015
Fio
2006-09-24 22:36
2007.02.04
Поиск и регистрация процессов в WinXP


15-1168882323
AntiUser
2007-01-15 20:32
2007.02.04
Госдума ужесточила наказание за пиратство


3-1163579842
kulkse
2006-11-15 11:37
2007.02.04
Если сервер отключен (как обработать ошибку)


15-1168677363
Kostafey
2007-01-13 11:36
2007.02.04
В дебрях IF


15-1168704775
default
2007-01-13 19:12
2007.02.04
кто-нибуль писал графические редакторы типа ERwin?