Таблица ListView: смещение текста в ячейке.
От: Antech  
Дата: 16.08.05 05:48
Оценка:
Здравствуйте, уважаемые спецмалисты. Пожалуйста, помогите решить проблемку (поиск не помог).

Имеется ListView, стиль Report. Я редактирую текст ячеек этой таблицы дополнительным editbox'ом. Но вот ведь проблема: как поместить текст в эдитбоксе точно по тем же координатам, что он был в SubItem ListView? Чтобы при нажатии мышкой на ячейку просто появлялся курсор и текст редактировался, но не смещался.

Я заглянул в SDK, и нашел там следующие флаги для LVM_GETSUBITEMRECT:
LVIR_BOUNDS==LVIRLABEL — координаты всей ячейки (SubItem), кстати кривовато работает, ну да ладно.
LVIR_ICON — картинок у меня в таблице нет.
То есть нет и намека на координаты (смещение) самого текста. Их как нибудь можно узнать?
Re: Таблица ListView: смещение текста в ячейке.
От: Antech  
Дата: 16.08.05 06:30
Оценка:
Опытным путем сейчас установил, что смещение текста зависит от выбранного шрифта лист контрола. Поэтому использовать константу не получится.
Re: Таблица ListView: смещение текста в ячейке.
От: Privalov  
Дата: 16.08.05 09:52
Оценка:
Здравствуйте, Antech, Вы писали:

A>Я заглянул в SDK, и нашел там следующие флаги для LVM_GETSUBITEMRECT:

A>LVIR_BOUNDS==LVIRLABEL — координаты всей ячейки (SubItem), кстати кривовато работает, ну да ладно.

А в чем кривизна? Делай поправку в пиксель-два на рамку Edit-а. Тогда второй вопрос отпадет сам собой. С размерами рамки придется немного повозиться, зато подмена ячейки ListView на EditText проходит незаметно.

A>То есть нет и намека на координаты (смещение) самого текста. Их как нибудь можно узнать?
Re[2]: Таблица ListView: смещение текста в ячейке.
От: Antech  
Дата: 16.08.05 10:00
Оценка:
Здравствуйте, Privalov, Вы писали:

P>А в чем кривизна? Делай поправку в пиксель-два на рамку Edit-а.


Если бы все было так просто... Я уже упарился с этим вопросом . Рамки эдита у меня нет, он по размерам занимает всю ячейку, а ячейкой я считаю итем, не включая линий сетки. Но ведь исходный текст в итеме/сабитеме Винда выводит с некоторым смещением относительно границы ячейки (есть поля). Причем смещение это зависит от размера шрифта. Ну это как MARGINS в эдитбоксе (EM_SETMAGINS/EM_GETMARGINS). Но в эдитбоксе можно узнать хотя бы левое и правое поле (не знаю, как еще Это назвать), а в таблице подобных способов я не нешел. На codeguru и codeproject люди лепят эдитбоксы с постоянным смещением типа rcEdit.left=rcItem.left+5, но это же лажа, друзя .
Re[2]: Таблица ListView: смещение текста в ячейке.
От: Antech  
Дата: 16.08.05 10:04
Оценка:
Если бы еще можно было править сообщения...

Да, извиняюсь, так и не написал в чем кривизна LVM_GETITEMRECT. Там у rcItem пара границ совпадает с линиями сетки, другие границы почему-то не включают линии сетки, т. е. смещены на 1 пиксель внутрь ячейки.
Re[3]: Таблица ListView: смещение текста в ячейке.
От: Privalov  
Дата: 16.08.05 10:21
Оценка:
Здравствуйте, Antech, Вы писали:

A>Здравствуйте, Privalov, Вы писали:


P>>А в чем кривизна? Делай поправку в пиксель-два на рамку Edit-а.


A>Если бы все было так просто... Я уже упарился с этим вопросом . Рамки эдита у меня нет,

[...]

Так сделай, чтобы рамка была, да пожирнее, трехмерная. Я вот сейчас посмотрел — действительно есть незначительный сдвиг — пиксель-два. Но если трехмерная рамка ложится точно на клетку, она производит двойной эффект — отвлекает внимание от прыжков и показывает, что именно редактируется. Если бы ты вопрос этот не поднял сейчас, я бы до сих пор никакого сдвига не заметил. А прога уже около года работает, и пока все тихо.
Re[4]: Таблица ListView: смещение текста в ячейке.
От: Antech  
Дата: 16.08.05 10:44
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Так сделай, чтобы рамка была, да пожирнее, трехмерная.


Нет, никаких рамок быть не должно, это я так сказал . Ну действительно, не хочу я рамочки добавлять. Хотя мысль с отвлеканием внимания мне понравилась .

А смещение Вы увидите, когда увеличите шрифт в таблице, скажем Arial на 30. У меня раньше было задано постоянное смещение (для стандартного шрифта работало замечательно), сейчас делаю новую версию интерфейсной бибки, устраняю недостатки и т. д.

Итак, есть версии как определить смещение?
Re[4]: Таблица ListView: смещение текста в ячейке.
От: Antech  
Дата: 16.08.05 10:51
Оценка:
Кстати, еще важный вопрос, немного оффтопик. У меня в этой таблице еще листбокс используется, он вылезает за границы таблицы, ну и в общем для этого надо SetCapture() делать (окно ListBox не WS_CHILD, при клике вне его надо захлопнуть листбокс и т. д.). Допустим, я сделал SetCapture(hWnd) и в оконной функции hWnd ловлю WM_LBUTTONDOWN. Я ввожу изменения и релизаю мышку ReleaseCapture(). Но вот проблема: если нажимаю на другую ячейку таблицы, окно редактирования-то скрывается, но таблица не получает WM_LBUTTONDOWN, и соответственно не начинается редактирование кликнутой ячейки, что совсем неудобно! Как побороть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.