powered by simpleCommunicator - 2.0.31     © 2024 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Как получить позицию курсора в текстовом item
8 сообщений из 8, страница 1 из 1
Как получить позицию курсора в текстовом item
    #38970871
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Forms 4.5

Нужно вставить подстроку в текстовый item в то место где находится курсор.
Как это лучше сделать?
Если есть возможность получить позицию курсора, то проблем нет, но мы так и не смогли найти как это сделать.

Спасибо
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38971122
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Баловались когда-то.
Тема такая:
В формсах на все активные элементы ввода есть одно-единственное окно (в смысле объекта windows), которое при навигации скачет по форме аки заяц.
Handle этого окна поймать возможно - но вот тут деталей не помню, вроде по Title ловили.
Имея handle окна, можно послать серию событий keydown-keyup и в то место, где находится курсор, влетит нужная строка.

Однако, ввиду того, что окно одно - то повесить отсылку такой последовательности, скажем, на кнопку той же формы не выйдет - то-самое-единственное окно будет в момент отсылки находиться на кнопке :)
Зато можно послать из другой формы или вообще из левой приблуды.

Мы пользовались для организации межпроцессного взаимодействия двух форм - работало, в принципе, но в продуктив не пошло ибо костыль уж больно извратный :)
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38971401
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKa,

4.5 не юзал, м.б. есть там что-то подобное => :system.cursor_item/record, :system.mouse_x/y_pos ?
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38971517
ORA_FFI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38972687
123678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В свое время заморачивался с аналогичной задачей, в результате все было крайне сложно.

Не очень понимаю, чем Вам поможет получение позиции курсора. Обернуть через 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'е. Может даже что-то другое.
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38972694
123678
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой мат. В конце приведена работающая последовательность в реальном коде.
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% решается.
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38976168
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKa
Поборол? или не сильно нужно ))) ?
...
Рейтинг: 0 / 0
Как получить позицию курсора в текстовом item
    #38976232
SergeyAKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevSergeyAKa
Поборол? или не сильно нужно ))) ?

Нет, пошли другим путем... Написали на дельфях аналог формы и дергаем хостом из меню. Там с позиционированием курсора в строке проблем нет. Да еще кучу всяких прибамбасов , так горячо любимых пользователями, довеском получили.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Как получить позицию курсора в текстовом item
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]