joynter |
Отправлено: 16.11.2004, 13:01 |
|

Станционный диспетчер
Группа: Участник
Сообщений: 137

|
задача такая: имеем Мемо с текстом.
по нажатию на клавиши выделенный в Меме текст должен "удваиваться", т.е. если было — "Текст", то должно быть — "ТекстТекст"
CODE |
void __fastcall TForm1::Memo1KeyPress(TObject *Sender, char &Key)
{
if(Key=='q')
{
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(67, 0, 0, 0);
keybd_event(67, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(86, 0, 0, 0);
keybd_event(86, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(86, 0, 0, 0); keybd_event(86, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
}
|
на практике происходит "двойная" вставка того, что было в буфере обмена, т.е. копирования выделенного в Меме не происходит.
пожалуйста помогите разобраться почему?
|
 |
Guest |
Отправлено: 16.11.2004, 13:41 |
|
Не зарегистрирован

|
А почему не сделать так
Memo->Text = Memo->Text.SubString(1, selStart+selLength) + selText + остаток_memo; |
 |
xTrim |
Отправлено: 16.11.2004, 13:45 |
|

Машинист паровоза
Группа: Участник
Сообщений: 208

|
если надо именно через клипбоард
CODE |
#include "Clipbrd.hpp"
...
Clipboard()->Clear();
Clipboard()->AsText = Memo1->SelText;
Memo1->Text = Memo1->Text + Clipboard()->AsText;
|
|
 |
Guest |
Отправлено: 16.11.2004, 13:58 |
|
Не зарегистрирован

|
2xTrim
Так работает только для выделений в конце текста. (по условию — удваивание выделенного текста)
|
 |
xTrim |
Отправлено: 16.11.2004, 14:11 |
|

Машинист паровоза
Группа: Участник
Сообщений: 208

|
согласен, проморгал
|
 |
joynter |
Отправлено: 16.11.2004, 14:21 |
|

Станционный диспетчер
Группа: Участник
Сообщений: 137

|
задача состоит в удвоении выделенного текста в любом окне редактирования, а Мемо я привел в качестве примера
Отредактировано joynter — 16/11/2004, 17:25 |
 |
|