Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск каретки в системе


Страницы:   1 2

cerber1 ©   (2004-04-07 23:18:00) 

Как найти положение каретки в произвольном, использующем его приложении при следующих условиях:
1. Приложение может использовать нестандартные(собственные) виды кареток.
2. приложение позволяет масштабировать текст и следовательно размер каретки.
 Задавал этот вопрос на разных форумах и чатах уже более 6 месяцев НОЛЬ ответов.
 Буду рад даже ссылк.


cerber11   (2004-04-25 11:19:00) [21]

cerber11=cerber1
ЗЫ: забыл пароль...


cerber11   (2004-04-25 11:17:00) [22]

Это уже испробовано:
Word - не отвечает на ЕМ_*** месаги, даже на самую безобидную: EM_GETRECT -> в ответ одни 0. Отсюда вывод(предположение) – перцы из мелкософта сваяли нечто покруче чем RichEdit32, что в принципе и неудивительно.

> самому реализовывать каретку - бессмысслено, когда уже есть готовое.

каретка - это тоже вид ресурса – битмап. Грузится как пестня.

И еще одно:
To display a solid caret, Windows invertsevery pixel in the rectangle; to display a gray caret, Windows invertsevery other pixel; to display a bitmap caret, Windows invertsonly the white bits of the bitmap.

Если "Окна" знают где каретка, то почему все так сложно?
И еще. В messages.pas есть такой прикольній рекорд:

TWMVKeyToItem = TWMCharToItem;
…

TWMCharToItem = packed record
   Msg: Cardinal;
   Key: Word;
   CaretPos: Word;
   ListBox: HWND;
   Result: Longint;
 end;

как им воспользоваться?


Cobalt   (2004-04-14 23:38:00) [23]

То есть, иными словами, ты не пробовал отлавливать положение каретки?
Насчёт того, что не видишь окон - сделай хук, и проверяй все нажатия клавиш - в какие окна они приходят с полной иерархией до самого верха(имя окна, тип, родитель; имя родителя, тип родителя, дедушка :)).
И ещё - а каретка точно используется? (для Matchcad?) а то ведь, сам понимаешь, самому реализовывать каретку - бессмысслено, когда уже есть готовое.


cerber1   (2004-04-14 21:09:00) [24]

2 Cobalt
Вскрываю карты. Идея поиска каретки на экране посетила меня после того как я начал пробовать искать ее в Worde. Основные приложения, на которые должно быть направлено данное снадобье - Microsoft Office(97-XP) и Mathcad(2000-2003). Естественно при желании построить универсальный отлавливатель каретки, абсолютно не было возможности получить от  производителя(что и не удивительно) исходных(первичных) названий контролов в которых будет производиться редактирование текста. Решил попробовать почти универсальную, но криво заточеную тулзу - WinSight32 от Борланда. Каково же было мое удивление, когда эти гребаные приложения не сообщали гражданину  WinSight32 о введеном тексте(сообщались только события WM_KEYDOWN, WM_CHAR, WM_KEYUP). Да есть обработка нажатия клавиш и перемещения мыши, но нет окна с текстом(можете попробовать самостоятельно это недолго и небольно). Решил проверить на Блокноте и Wordpade - рулез все окна с названиями, положением и содержимым - берите хавайте Господа. А с обозначенными выше приложениями - ЛАЖА.
Вот я и подумал: если формально есть Editor в котором происходит редактирование, но система (пардон WinSight32) его не видит, то как можно найти этот гребаный Editor другими методами(под словом "метод" понимать "способ действия") и как до него достучаться через API-функции(собственно поэтому я и задал вопрос в этой ветке)???.
А пример в microsoft SDK не пашет по той причине, что он расчитан на слежение за каретой в клиентском окне, but this is for kids.


Cobalt   (2004-04-12 23:14:00) [25]

Вот теперь понятно.
А прога какая? Что использует для вывода текста?
Или это Word/Excel?
Не совсем понятна проблема с
>Пример приведенный в Microsoft SDK for Delphi не пашет с такими каретами.
что это значит? Возвращает ошибку? Какую?
Возвращает нулевые координаты? Ищите окно, в котором идёт ввод, определяйте его координаты относительно основного окна.


cerber1   (2004-04-12 19:56:00) [26]

2 Cobalt ©   (11.04.04 10:03) [7]
Смысл задачи состоит в том, что необходимо оставить на экране видимой только ту часть изображения(+- вверх, вниз и всторону) в которой в текущий момент идет редактирование(ввод, удаление или изменение) текста. Эта задача действительно из разряда бредовых как для нормальных людей. Но в некоторых сферах деятельности это один из самых дешевых способов решения серьёзных проблем. Извините за тайнопись, работа такая.


Cobalt   (2004-04-11 10:03:00) [27]

2 cerber1 ©   (10.04.04 23:25) [6]
Я дико извиняюсь, но похоже на бред :(
Ты лучше скажи, что  тебе надо получить, а то действия у тебя такие сумбурные. Нахрена тебе эта каретка? Собрался копировать изображение тексат, а потом распознавать его? Пишешь свою OCR?


cerber1   (2004-04-10 23:25:00) [28]

Объясняю дополнительные условия описанные выше:
речь идет не о масштабировании текста(в смысле размера шрифта),
а о масштабировании текста как изображения.
При таких раскладах каретка тоже масштабируется и ее положение даже отностиельно родного окна редактирования изменяется(например в Word, Corel и пр.) Кроме этого при вводе текста в графической оболочке, для него(текста) положение МЕМО-подобного поля ввода определяется мануальным позиционированием(sorry, за слова такие).
Есть конечно вариант: заХУЧИТЬ все месаги от мыши и клавы(и прочеей мануальной вводилки), но это не спасает от масштабирования. Неужели придется через видеопамять все ловить?


Diamond Cat   (2004-04-08 23:26:00) [29]


> > Положение каретки всегда возвращается относительно МЕМО-подобного
> EDITORa где находится каретка. Вопрос si disabled!
собственно по этому и вопрос относительно чего, вдруг относительно экрана.
Getcaretposlдолжна работать полюбому во всех контролах имеющих текстовый ввод. Просто нужно перещитывать позицию относительно фонтов


Cobalt   (2004-04-08 23:07:00) [30]

If the function fails, the return value is zero. To get extended error information, call GetLastError.


cerber1   (2004-04-08 23:01:00) [31]

2 Diamond Cat
> Положение каретки всегда возвращается относительно МЕМО-подобного EDITORa где находится каретка. Вопрос si disabled!
2 Cobalt
> GetCaretPos работает максимум относительно TCustomMemo и не расчитан на нестандартные типы кареток

2 ALL
Пример приведенный в Microsoft SDK for Delphi не пашет с такими каретами.


Cobalt   (2004-04-08 00:47:00) [32]

GetCaretPos ?


Diamond Cat   (2004-04-07 23:23:00) [33]

положение относительно чего?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо