|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
Добрый день! Forms 4.5 Нужно вставить подстроку в текстовый item в то место где находится курсор. Как это лучше сделать? Если есть возможность получить позицию курсора, то проблем нет, но мы так и не смогли найти как это сделать. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 14:59 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
Баловались когда-то. Тема такая: В формсах на все активные элементы ввода есть одно-единственное окно (в смысле объекта windows), которое при навигации скачет по форме аки заяц. Handle этого окна поймать возможно - но вот тут деталей не помню, вроде по Title ловили. Имея handle окна, можно послать серию событий keydown-keyup и в то место, где находится курсор, влетит нужная строка. Однако, ввиду того, что окно одно - то повесить отсылку такой последовательности, скажем, на кнопку той же формы не выйдет - то-самое-единственное окно будет в момент отсылки находиться на кнопке :) Зато можно послать из другой формы или вообще из левой приблуды. Мы пользовались для организации межпроцессного взаимодействия двух форм - работало, в принципе, но в продуктив не пошло ибо костыль уж больно извратный :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2015, 18:07 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
SergeyAKa, 4.5 не юзал, м.б. есть там что-то подобное => :system.cursor_item/record, :system.mouse_x/y_pos ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 07:20 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
SergeyAKa, Уже не помню была ли во времена Forms 4.5 d2kwutil.pll или она появилась позже, но если есть, то как-то так: WIN_API_SHELL.SendMessage( Get_Item_Property( Name_In( 'SYSTEM.CURSOR_ITEM' ), WINDOW_HANDLE ), 770 /*WM_PASTE 0x0302*/, 0 /*wParam*/, 0 /*lParam*/ ); Если нет, то надо самому заморочиться с ORA_FFI ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2015, 10:12 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
В свое время заморачивался с аналогичной задачей, в результате все было крайне сложно. Не очень понимаю, чем Вам поможет получение позиции курсора. Обернуть через ORA_FFI SendMessage/PostMessage делов на пару часов (конечно если уметь). Но вот заставить текст вставать туда куда нужно и тогда когда нужно - я очень долго мучался. На Forms 6i проблемы начинались при навигации между item'ами. А в реальном приложении, скорее всего, навигация явная или не явная будет. Если я правильно помню, поборол через таймер: на триггере кнопки /button/ взводил таймер и весь код выполнялся уже в таймере, когда вся не явная навигация в Oracle Forms уже завершена. Было это давно, кода не осталось (или нужно раскапывать старые залежи CD-дисков, вдруг где исходники сохранились ))) ) Другое дело, что у нас приложение было многоязыковым. С поддержкой UTF-8. Возможно, на однобайтных кодировках глюков будет меньше. Где-то на форуме должен остаться топик с моим матом по данному поводу andrey_anonymous Полу правда, полу нет. 1. Окно действительно для _некоторых_ item'ов одно. Но лично мне, это проблемы особой не составляло. 2. Handle окна в Forms 6i вроде добывается стандартным образом, нафига замарачиваться через title, не очень понятно 3. Послать из той же формы можно. Действительно есть проблема с навигацией. Но "если долго мучаться, что нибудь получится" ( C ). По крайне мере я поборол и ушло в продуктив. 4. Через keydown-keyup это, извините, полное извращение. Почему просто через EM_SET_TEXT /вроде так/ для текстовых item'ов не работать? Если нужно нажать на кнопку, все вообще проще. 5. Насчет межпроцессорного взаимодействия, делал, работало. Проблем вообще не было: 5.1. Рисовал прогресс бар. В Forms 6i client-server есть специальный тип User Item. Если его использоваться, можно взять его handle окна и "делай с ним, что хош". Я в нем просто делал свое child окно через WinAPI и стандартным образом (при обработке WM_PAINT) отрисовывал прогресс бар. Собственно тяжелая обработка файлов (нарезания в JTIP граф. файлов с проф. камеры >500-1000 Mb) выполнялась параллельно запущенным EXE'шником. Другое дело, что межпроцессорное взаимодействие (получение %-ов обработки) делал толи через Named Pipe толи просто через стандартные потоки ввода-вывода. Хотя, можно было и через сообщения Windows. Но мне так было проще отлаживать EXE'шник без Forms. 5.2. Делал прием-отправку на сервер графических файлов. Был свой просмоторщик JTIP написанный в виде DLL на MFC запускался в параллельном потоке. Но когда ему нужно было подгрузить очередной файл из БД, приходилось отправлять call back в поток Forms'а с запросом на очередной кусок (что бы работать в сессии Forms'а), поток Forms'а получал файл из БД через PRO*C, отдавал кусок изображения в просмоторщик. Что являлось callback'ом в Forms, уже не помню. Возможно просто кнопка на форме висела и я ее нажимал. Возможно свое child окно в User Item'е. Может даже что-то другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2015, 14:52 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
Мой мат. В конце приведена работающая последовательность в реальном коде. http://www.sql.ru/forum/179355/forms-client-server-kak-proverit-chto-item-poteryal-fokus?hl=sendmessage Если я правильно понял, данный свой топик, то: Не получилось через ORA_FFI объявить ф-цию SendMessage для вариантов EM_SETSEL и EM_GETSEL - печалька для топик стартера. Если нужно и получать и устанавливать позицию курсора - возможно нужно брать C и делать внешнею библиотеку. Так же паралелльно нашел еще одну тему: http://www.sql.ru/forum/777861/vopros-po-cut-region?hl=sendmessage Похоже, и на однобайтных кодировках в Keep Cursor Position есть проблемы. Но, в случае, если к проекту разрешено цеплять DLL'ки, задача 100% решается. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2015, 15:09 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
SergeyAKa Поборол? или не сильно нужно ))) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2015, 13:20 |
|
Как получить позицию курсора в текстовом item
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevSergeyAKa Поборол? или не сильно нужно ))) ? Нет, пошли другим путем... Написали на дельфях аналог формы и дергаем хостом из меню. Там с позиционированием курсора в строке проблем нет. Да еще кучу всяких прибамбасов , так горячо любимых пользователями, довеском получили. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2015, 14:01 |
|
|
start [/forum/topic.php?fid=51&fpage=5&tid=1878058]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 315ms |
total: | 476ms |
0 / 0 |