Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 166

/ вопрос решён /

Здравствуйте!
Назрел вопрос:Мне нужно программно скопировать текст из Tedit в буфер обмена,но не как не получается, так как в тексте есть пробелы, тоесть DBLCLK не работает, вот мой код.
В этом случаев буфер помещяеться текст до пробела, а мне нужно скопировать все содержимое TEdit.
Помогите пожплуйста!

Приложение:
  1. SendMessage(MyEd,WM_LBUTTONDBLCLK,0,0);
  2. SendMessage(MyEd,WM_COPY,0,0);


unl0K Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: unl0K (статус: Посетитель)
Вопрос отправлен: 9 сентября 2009, 18:05
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, AHJIoKeR!
а надо ему вначале не двойной клик слать, а прям так и сказать - выдели ка мне всё.
на языка сообщений это будет где то так
SendMessage(handle, EM_SETSEL , 0, -1); //первый параметр - с какого символа выделить, второй - по какой, но если там -1, то это значит "до конца". Ну а дальше вы уже в курсе:)
но что бы было красиво, надо снять выделение. для этого делаем так
SendMessage(handle, EM_SETSEL , -1, 0);

По поводу отправки "текста". можно. например через буфер обмена с сообщением WM_PASTE. а можно через WM_CHAR по символьно.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 9 сентября 2009, 18:21
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Anderson N.N

Здравствуйте, AHJIoKeR!

Можно просто

Edit1.CopyToClipboard;
Затем
Edit2.PasteFromClipboard;

Насчет можно ли направить текст напрямую в другое приложение
ДА через:
1) DDE
2)SetWindowText

при 2 варианте тебе нужно не только знать хендл нужного окна
но и хэндл элемента в который ты собрался вставлять текст.
Если интересно могу пример кинуть.

Ответ отправил: Anderson N.N (статус: 2-ой класс)
Время отправки: 9 сентября 2009, 18:29
Оценка за ответ: 4

Ответ #3. Отвечает эксперт: min@y™

for j:=1 to Length(S) do  // Отправка мессаги
  SendMessage(EditHandle, WM_CHAR, Integer(S[j]), 0);
SendMessage(EditHandle, WM_CHAR, Integer(#13), 0);

Приложение:
  1.  
  2.  


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 10 сентября 2009, 14:33
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 19; последнее сообщение — 9 сентября 2009, 19:49; участников в обсуждении: 3.
unl0K

unl0K (статус: Посетитель), 9 сентября 2009, 18:09 [#1]:

И еще вопрос: возможно ли на прямую отправить текст в другое приложение, в richedit зная его хэндл?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
min@y™

min@y™ (статус: Доктор наук), 9 сентября 2009, 18:21 [#2]:

Можно стырить текст из EDIT напрямую, без буфера обмена.
Объясни задачу подробнее: что есть и что нужно получить.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 18:32 [#3]:

to Anderson N.N
Что то мне кажется, что человек пытается с чужого приложения взять...
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 9 сентября 2009, 18:35 [#4]:

Цитата:


Что то мне кажется, что человек пытается с чужого приложения взять...


Ошибаешься. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 18:39 [#5]:

и как мы это узнали? Хотя вопрошающие могут как угодно завернуть вопрос.
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 9 сентября 2009, 18:45 [#6]:

Пробывал так:
Edit1.CopyToClipboard;
SendMessage(RichE,WM_PASTE,0,0);
SendMessage(OK,WM_LBUTTONDOWN,0,0);
SendMessage(OK,WM_LBUTTONUP,0,0);
и толку не было!
А первый вариарт работает на ура:
SendMessage(MyEd,EM_SETSEL,0,-1);
SendMessage(MyEd,WM_COPY,0,0);
SendMessage(MyEd,EM_SETSEL,-1,0);
SendMessage(RichE,WM_PASTE,0,0);
SendMessage(OK,WM_LBUTTONDOWN,0,0);
SendMessage(OK,WM_LBUTTONUP,0,0);
Из своего я копировал, мб вопрос задал не оч. понятно, но ответ получил!
Относись к людям так, как хотел бы, чтобы они к тебе относились!
min@y™

min@y™ (статус: Доктор наук), 9 сентября 2009, 18:45 [#7]:

Цитата:


и как мы это узнали?

Связался с ним по аське.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 18:53 [#8]:

то min@y™
круто. Видно сразу, хочется балов:)
то AHJIoKeR
а зачем нажимать-отпускать мышку? Хотя я видел человека, который умудрился для едита вызвать всплывающее меню и выбрать там нужный пункт меню, что бы скопировать... вот это высший пилотаж! Текст он выделял через посылку зажатого шифта и стрелочек.
Хотя, иногда, just for fun, такое полезно делать. Зачем? что бы уметь, мало чего....
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 9 сентября 2009, 18:56 [#9]:

Цитата:


круто. Видно сразу, хочется балов:)


Чего хочется?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
unl0K

unl0K (статус: Посетитель), 9 сентября 2009, 18:57 [#10]:

то Вадим К, а с чего бы я нажимал на эдит)
это нажатие\отжатие на кнопку отправить!
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 19:02 [#11]:

to AHJIoKeR
да... недосмотрел...
С кнопкой есть одна фишка, о которой почему то забывают, что когда нажимают руками, то между нажатием и отпусканием есть пауза. обычно часто достаточно вставить небольшой Sleep и всё начинает магическим образом работать:)
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 9 сентября 2009, 19:02 [#12]:

Кстати, а почему нельзя использовать связку клавишь: sendmessage(handle,WM_KEYDOWN,VK_+VK_,0)?
Или можно,только как-то по другому?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 19:03 [#13]:

а что такое VK_+VK_
это просто мнемоника, или как?
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 9 сентября 2009, 19:07 [#14]:

это я имел введу... допустим VK_SHIFT+VK_HOME
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 19:10 [#15]:

можно, но нужно аккуратно. Вначале отсылаем нажатие шифта, потом home. потом отпускаем home и только потом шифт.
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 9 сентября 2009, 19:11 [#16]:

аааааааа, понял! СПАСИБО!
Относись к людям так, как хотел бы, чтобы они к тебе относились!
min@y™

min@y™ (статус: Доктор наук), 9 сентября 2009, 19:17 [#17]:

До сих пор не понимаю, для чего здесь нужен буфер обмена. Почему бы не посылать текст напрямую?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 9 сентября 2009, 19:22 [#18]:

min@y™:
Ну так расскажи человеку, может ему понравиться...
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 9 сентября 2009, 19:49 [#19]:

Цитата (Вадим К):


Ну так расскажи человеку, может ему понравиться...

Пока не спрашивает.
Он мне сказал, какую прогу пишет. Я такую в отрочестве тоже писал, ога. :) И исходники сохранились. Там как раз берётся текст из Memo (или файла, точно не помню) и засылается в чат другую программу + код клавиши Enter.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

31 января 2011, 20:03: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:47
Выполнено за 0.03 сек.