Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.05 c
15-1168654961
Tirael
2007-01-13 05:22
2007.02.04
цена прграммы


15-1168654314
Константинов
2007-01-13 05:11
2007.02.04
Какой будет жизнь лет этак через двадцать?


15-1168936703
NLex
2007-01-16 11:38
2007.02.04
Login в DLL


3-1160361442
Climber
2006-10-09 06:37
2007.02.04
EDBEngineError


15-1168669956
Данил.Ялта
2007-01-13 09:32
2007.02.04
Бесплатный PHP хостинг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский