Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
Пользую VFP7 (роднее, чем 9-ка, хоть она тож в наличии имеется).
Проблема в следующем. Необходимо периодически распихивать содержимое контроллов "чужих" экранных форм (с внутренними гиперссылками) по полям 5-колоночной dbf-таблицы. Поскольку формы генерятся закрытым экзешником, нет возможности добыть содержимое нужных контроллов, кроме как последовательно выделяя и копируя содержимое каждого контролла через буфер обмена с последующей вставкой в соответствующие поля dbf-ника. Решил сей процесс автоматизировать.
Через стандартную виндовскую программу просмотра буфера обмена создал файл (123.clp) и подсмотрел его содержимое FAR-ом. При каждом копировании он содержит одни и те же скопированные в буфер данные в нескольких видах: текстовом, rtf-ном и html-ном. Именно html-ная порция буфера как нельзя лучше подходит для моей задачи - поскольку все формы однотипные, то с помощью анализа нужных html-тэгов можно запросто выделить 5 искомых фрагментов данных для последующего распихивания их по полям dbf-таблицы. Но вот беда - как фоксом заполучить содержимое именно html-ной части буфера обмена? Его системная переменная _CLIPTEXT содержит только текстовую составляющую, без html-тэгов. Поиском по форуму пошарил - вроде не было в обсуждениях ничего похожего. Подскажите, пожалуйста, можно ли фоксом ПОЛНОСТЬЮ заполучить содержимое буфера обмена? Чтоб оно имело вид, примерно, как в прилагаемом файле:

К сообщению приложен файл (123.CLP - 18Kb) cкачать
16 ноя 10, 00:52    [9784644]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
Да, и ещё: к сожалению, переменная _CLIPTEXT не содержит фактических URL-ов, "закреплённых" за некоторыми гиперссылочными контроллами формы, а в html-ной части содержимого буфера обмена такие данные содержатся. Можно ли фоксом их выудить оттудова?
16 ноя 10, 01:07    [9784654]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
проходящий.
Guest
neznajka,
пошарь на forum.foxclub.ru
Там что-то было с использованием WinAPI для определения типа содержимого буфера и работы с ним. Если не найдешь, то спроси местных, подскажут.
16 ноя 10, 09:37    [9785093]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
прошелмимо
Member [заблокирован]

Откуда: Из Курска понаехал
Сообщений: 10363
проходящий.
для определения типа содержимого буфера и работы с ним

есть ф-и в библитеке foxtools.fll

EmptyClip( )
OpenClip( )
CloseClip( )
GetClipDat( )
GetClipFmt( )
SetClipDat( )
IsClipFmt( )

http://support.microsoft.com/kb/268478
16 ноя 10, 10:07    [9785309]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
проходящий.
Guest
прошелмимо
есть ф-и в библитеке foxtools.fll
О, точно. Уже подзабывать стал.
16 ноя 10, 11:43    [9786202]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
Спасибо, на forum.foxclub.ru посмотрю обязательно.
А foxtools.fll, по видимому, ничего не даст, ибо как сказано в Foxtools Help - даже самая походящая по названию функция GetClipDat( ) возвращает всего лишь логическое значение. А мне же нужно заполучить символьный (строчный) фрагмент.
Возможно, правда, что я не правильно понял Help, поскольку не имею опыта применения внешних API-функций из-под Фокса.
16 ноя 10, 18:55    [9790377]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
проходящий.
Guest
neznajka,
вот набрососк на скорую руку:
Set Library To Sys(2004)+'foxtools'
If openclip(0)
  For i=1 to 50
   If isclipfmt(i)
   ?i, getclipfmt(i)
   ?getclipdat(1)
   wait
   EndIf
  next
endif
?closeclip()
16 ноя 10, 20:04    [9790621]     Ответить | Цитировать Сообщить модератору
 Re: Как фоксом получить ПОЛНОЕ содержимое буфера обмена?  [new]
neznajka
Member

Откуда: Украина
Сообщений: 387
Большое спасибо, Проходящий!
Указали, видимо, правильное направление:
содержимое буфера выдаётся на экран. Правда, только в основных текстовых форматах. Чтобы посмотреть другие пришлось вместо 1 передать в функцию i: ?getclipdat(i)
Желаемого эффекта всё равно пока не достиг, но, думаю, он уже где-то рядом :)
Жаль только, что название формата не выдаётся: getclipfmt(i) каждый раз возвращает почему-то пустую строку. Вот если б как-нибудь подсмотреть, какие форматы буфера на данный момент вообще зарегистрированы в системе! Ладно, буду рыть дальше. Спасибо. :)
16 ноя 10, 22:08    [9791172]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить