:: Visual Foxpro, Foxpro for DOS
Как скопировать текст выделяемый двойным кликом мыши в Combo1
greek_fire

Сообщений: 20
Дата регистрации: 10.11.2009
В строке из нескольких слов при двойном Клике мышки выделяется слово и срабатывает событие Thisform.Combo1.DblClick
Как это выделяемое слово присвоить переменной s1 для обработки?
Буфер обмена, который работает при нажатии ctrl+c не срабатывает
SYS(1500, '_MED_COPY', '_MEDIT')
s1=_cliptext
Остается Применение функций Windows API
Задача оказалась не тривиальной с учетом применительно к Visual Foxpro
Может кто знает, посмотрите пожалуйста.

Например вот такая задача:
*Thisform.Combo1.Init
WITH This
DIMENSION _vDiskDubl[3]
STORE 'Лето прошло' TO _vDiskDubl
FOR i = 1 TO 3
.AddItem(_vDiskDubl[i]+ALLTRIM(STR(i)))
ENDFOR
_Index=1
.AddProperty('_ItemIndexForText',_Index,1,'Индекс массива List на дисплее')
.DisplayValue =.List(_Index)
ENDWITH
*Thisform.Combo1.DblClick
SYS(1500, '_MED_COPY', '_MEDIT')
s1=_cliptext
Это не работпет

Пример с применением API Win32 что то похоже нашел по по ссылке 'https://forum.foxclub.ru/read.php?5,43621' и не уверен, что рабочий, но есть идея.
К тому же там копирутся весь текст, а не выделяемое слово двойным кликом. Вопрос остается открытым.

Вот этот текст
PROCEDURE btnCopy.Click
#define CF_TEXT 1
#define GMEM_MOVEABLE 2
#define GMEM_ZEROINIT 64
Declare Long GlobalAlloc in Win32API Long uFlags, Long dwBytes
Declare Long GlobalFree in Win32API Long hMem
Declare Long GlobalLock in Win32API Long hMem
Declare Long GlobalUnlock in Win32API Long hMem
Declare String lstrcpy in Win32API Long lpDest, String @ lpStr
Declare Long OpenClipboard in Win32API Long
Declare Long CloseClipboard in Win32API
Declare Long EmptyClipboard in Win32API
Declare Long SetClipboardData in Win32API Long uFormat, Long hMem
s = TRIM(ThisForm.Text1.Value)
h = GlobalAlloc(GMEM_MOVEABLE+GMEM_ZEROINIT, LEN(s)+1)
ptr = GlobalLock(h)
lstrcpy(ptr, s)
GlobalUnlock(h)
If(OpenClipboard(0) != 0)
EmptyClipboard()
SetClipBoardData(CF_TEXT, h)
CloseClipboard()
else
GlobalFree(h)
EndIf
ENDPROC
PROCEDURE btnPaste.Click
Declare String GlobalLock in Win32API Long hMem
Declare Long GlobalUnlock in Win32API Long hMem
Declare Long OpenClipboard in Win32API Long
Declare Long CloseClipboard in Win32API
Declare Long GetClipboardData in Win32API Long uFormat
If(OpenClipboard(0) != 0)
h = GetClipBoardData(CF_TEXT)
ptr = GlobalLock(h)
ThisForm.Text1.Value = ptr
GlobalUnlock(h)
CloseClipboard()
EndIf
ENDPROC


------------------
Ratings: 0 negative/0 positive
Re: Как скопировать текст выделяемый двойным кликом мыши в Combo1
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
greek_fire
*Thisform.Combo1.DblClick
SYS(1500, '_MED_COPY', '_MEDIT')
s1=_cliptext
Это не работпет

s1 = This.SelText
Ratings: 1 negative/2 positive
Re: Как скопировать текст выделяемый двойным кликом мыши в Combo1
greek_fire

Сообщений: 20
Дата регистрации: 10.11.2009
greek_fire
*Thisform.Combo1.DblClick
SYS(1500, '_MED_COPY', '_MEDIT')
s1=_cliptext
Это не работпет

Ответ:
s1 = This.SelText
******************************************************
Мистер po2, Вы гений! Спасибо! Все теперь работает.
po2
Я дополню для полноты, коль мне пришлось.
s2 = This.SelText &&Возвращает текст, выделенный пользователем в области ввода текста управляющего элемента или пустую строку
s3 = This.SelLength &&Возвращает число символов выбранных пользователем в области ввода текста управляющего элемента или указывает число символов, которое будет выбрано.
s4 = This.SelStart &&Возвращает начальную точку выбора текста, произведенного пользователем в области ввода текста управляющего элемента или указывает позицию точки вставки такста если текст не выбран
Это весело!
Ratings: 0 negative/0 positive
Re: Как скопировать текст выделяемый двойным кликом мыши в Combo1
greek_fire

Сообщений: 20
Дата регистрации: 10.11.2009
po2
s1 = This.SelText

Я бы хотел разобраться и со вторым вариантом применение функций Windows API для копирования выделяемого слова при двойном клике мыши.
Ratings: 0 negative/0 positive
Re: Как скопировать текст выделяемый двойным кликом мыши в Combo1
ssa

Сообщений: 12951
Откуда: Москва
Дата регистрации: 23.03.2005
greek_fire
greek_fire
*Thisform.Combo1.DblClick
SYS(1500, '_MED_COPY', '_MEDIT')
s1=_cliptext
Это не работпет
А меню вообще есть? А в нём соответствующий пункт?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как скопировать текст выделяемый двойным кликом мыши в Combo1
akvvohinc
Автор

Сообщений: 4001
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Я бы хотел разобраться и со вторым вариантом применение функций Windows API
А разобраться с первым вариантом желание отпало?

А ведь для того, чтобы он заработал, достаточно понимать, что пункты системного меню могут активизироваться (работать) только при их наличии.
И если пункта _MED_COPY в вашем меню нет, и добавлять его вы не хотите, то надо:
1) сохранить текущее меню в стеке
2) добавить в него _MED_COPY
3) выполнить задуманное
4) восстановить меню из стека

Например, так может выглядеть DblClick вашего комбо:
PUSH MENU _MSYSMENU
DEFINE PAD _MED_COPY OF _MSYSMENU PROMPT 'Copy'
SYS(1500, '_MED_COPY', '_MSYSMENU')
s1 = _CLIPTEXT
POP MENU _MSYSMENU



Исправлено 2 раз(а). Последнее : akvvohinc, 21.12.22 18:54
Ratings: 0 negative/2 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 17 (Гостей: 17)

© 2000-2023 Fox Club 
Яндекс.Метрика