link9372 link9373 link9374 link9375 link9376 link9377 link9378 link9379 link9380 link9381 link9382 link9383 link9384 link9385 link9386 link9387 link9388 link9389 link9390 link9391 link9392 link9393 link9394 link9395 link9396 link9397 link9398 link9399 link9400 link9401 link9402 link9403 link9404 link9405 link9406 link9407 link9408 link9409 link9410 link9411 link9412 link9413 link9414 link9415 link9416 link9417 link9418 link9419 link9420 link9421 link9422 link9423 link9424 link9425 link9426 link9427 link9428 link9429 link9430 link9431 link9432 link9433 link9434 link9435 link9436 link9437 link9438 link9439 link9440 link9441 link9442 link9443 link9444 link9445 link9446 link9447 link9448 link9449 link9450 link9451 link9452 link9453 link9454 link9455 link9456 link9457 link9458 link9459 link9460 link9461 link9462 link9463 link9464 link9465 link9466 link9467 link9468 link9469 link9470 link9471 link9472 link9473 link9474 link9475 link9476 link9477 link9478 link9479 link9480 link9481 link9482 link9483 link9484 link9485 link9486 link9487 link9488 link9489 link9490 link9491 link9492 link9493 link9494 link9495 link9496 link9497 link9498 link9499 link9500 link9501 link9502 link9503 link9504 link9505 link9506 link9507 link9508 link9509 link9510 link9511 link9512 link9513
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
ctrl+c & ctrl+v, вроде бы все просто, но ...
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



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


Станционный диспетчер

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



задача состоит в удвоении выделенного текста в любом окне редактирования, а Мемо я привел в качестве примера

Отредактировано joynter — 16/11/2004, 17:25

Вернуться в Вопросы программирования в C++Builder