Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.056 c