Копирование невыделяемого текста

dangerr

В стандартных тулкитах (gtk и qt) по крайней мере по-дефолту далеко не весь текст возможно выделить и скопировать.
Например, как правило таков текст в различных диалоговых окнах, сообщениях об ошибках и прочее.
Искренне непонимаю какой м... чудак до такого додумался.
Гугл мало что даёт по теме.
Может кто-нибудь знает есть ли какие-нибудь хаки/патчи, чтобы исправить положение?

YUAL

под виной была охуенная прога, которая позволяла выелить любой текст. по никсу без понятия.

msluska

кнопка PrtSc, далее вставить в Paint, подрезать и оформить и сохранить, для дальнейшего использования. :cool:

YUAL

ну это как минимум можно делать на лету через апи файн ридера.

kill-still

интересно, как ты будешь графику выделять, а не контрол? :grin:

kill-still

мессаджи и эксэпшены обычно не выделяются, а по Ctrl+C копируются.

YUAL

интересно, как ты будешь графику выделять, а не контрол? :grin:
чё?
сделать горячую кнопку на типа альт+шифт+принтскрин по нажатию на неё появляется инструмент графического выделения. выделяешь нужную область, она её автоматом вырезает, ерез апи файнридера распознает и копирует в буфер обмена.

Serab

это называется ABBYY screenshot reader, ага
У файнридера нету API, есть FineReader Engine, можешь сам нагуглить сколько это стоит.

YUAL

есть FineReader Engine
именно его я имел ввиду под апи.
про стоимость разговора не было.

Dimon89

Под виндой есть фриварный Windows Scanner, который позволяет, в частности, получить текст любого стандартного контрола.

Dasar

если делать это по месту, то достаточно сложная задача.
так сложилось что весь gui (вне зависимости от платформы) строится на двух примитивах: label и textbox.
label предназначен только для вывода, и не умеет выделять и копировать текст.
textbox предназначен для редактирования текста, и умеет выделять и копировать текст.
подменить один другим проблематично, чтобы при этом ничего не испортить.
заменить label на более расширенный тоже может не прокатить, потому что проги часто используют свои расширения label-а.
но из label-а можно обычно получить текст внешним способом.
под виндой это будет: FindWindow, поиск контрола, например, по координатам, GetText,
под другими ОС думаю будет что-то похожее.

yroslavasako

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

Dasar

Подозреваю, что на свинге он обламывается
если он просто в dc рисует, то - да
зы
.net-ные проги на wpf-е тоже может игнорировать, если специально не поддержали

Dimon89

Подозреваю, что на свинге он обламывается
Действительно обламывается.

dangerr

мессаджи и эксэпшены обычно не выделяются, а по Ctrl+C копируются.
Обычно - это где?
Я вот сейчас попробовал запустить eclipse при одном уже запущенном, он ругнулся что ворспейс уже используется. Ни ctrl-c, ни ctrl-ins содержимое буфера обмена не изменило.

hwh2010

Обычно - это где?
В Караганде!
В венде

kill-still

ключевое слово контрола :)
и это только при том, что он на
#define WM_GETTEXT 0x000D
отвечает как надо :)

dangerr

если делать это по месту, то достаточно сложная задача.
В каком смысле "по месту"? По-моему самый правильный способ это сделать - пропатчить тулкиты. Конечно, при этом необходимо для прикладного софта оставить всё api без изменений, чтобы какие бы они не использовали расширения стандартных контролов. Хотя зачем делать такие расширения я не очень понимаю и не особо верю, что они часто используются. Потому как если не хватает какого-то функционала в тулките, то логичнее доработать сам тулкит, чем городить к нему костылей.
но из label-а можно обычно получить текст внешним способом
По идее это зависит не от ОС, а от тулкита. Меня интересуют, конечно же, gtk и qt в первую очередь. Кто-нибудь знает можно ли такое в них?

Dasar

По-моему самый правильный способ это сделать - пропатчить тулкиты.
пропатчить как? перехватить мышку? но тогда получается, что если этот label вставлен в кнопку (или в пункт меню, или еще куда-то то кнопка мышку не получит, и приложение работать не будет.

durka82

заменить label на более расширенный тоже может не прокатить, потому что проги часто используют свои расширения label-а

JavaScript в этом смысле рулит. Только на нём примитивы ГУИ вроде как не делают.

dangerr

Ну я бы, конечно, по возможности предпочёл на мышку завязывать минимум функционала.
Сделал бы хоткей, по которому курсор перебирает лейблы. Таб бы трогать не стал, так как он перебирает активные элементы интерфейса и с такой кнопкой с леблом возникли бы проблемы.

dangerr

JavaScript в этом смысле рулит.
Подробнее можно?

Dasar

JavaScript в этом смысле рулит. Только на нём примитивы ГУИ вроде как не делают.
делают, да еще как, посмотри любой тулкит, например, тот же jquery.
календарь, табы, загрузка файлов, выпадающий список и т.д.

Dasar

Сделал бы хоткей, по которому курсор перебирает лейблы.
обычно label не может иметь фокус, а если делать свой показ выбранности, то придется лезть в процедуру отрисовки label-а

dangerr

ну так я поэтому и говорю, что это отдельно от таба (а значит и фокуса) надо делать.

durka82

JavaScript в этом смысле рулит.
Подробнее можно?

В нём можно до/переопределить уже существующие классы.
То есть в данном случае можно было бы просто поправить label, чтобы его можно было выделять/копировать.

kill-still

ну, если так рассуждать, то да, из qt можно выдрать - он же на спп, а там есть доступ к rtti. а вот в гтк хз. в общем всё равно это изврат.

Dasar

нём можно до/переопределить уже существующие классы.
То есть в данном случае можно было бы просто поправить label, чтобы его можно было выделять/копировать.
доопределить можно, и делается и в обычных фреймворках.
основная проблема-то в том, что как избежать конфликтов с другими доопределениями, разработчики программ-то считали, что такого доопределения нету.

kill-still

эээ в яваскрипте есть классы? о.О

Dasar

эээ в яваскрипте есть классы? о.О
функцию порождающую определенный вид объектов можно считать классом

durka82

Ключевое слово prototype
Оставить комментарий
Имя или ник:
Комментарий: