Решение:
- используем Prop:Edit, в динамике создаем Entry-контрол
- определяем размеры этого Entry-контрола через GetWindowRect
- действительные координаты можно вычислить учитывая положение окна, на котором находится ListBox
Т.е., насколько я понимаю, вся разница с предыдущим методом - это использование GetWindowRect, а не Prop:Xpos, Prop:Width etc
Ниже код, для определения "левой" и "правой" координат колонки, я думаю, что названия переменных понятны:
Код: Выделить всё
xHdrClass.GetColumnLeftPos PROCEDURE(LONG inColumn)
loc:EntryControl LONG ! eip entry поле
loc:Rect LIKE(xhdr_RECT) ! прямоугольник
loc:RetValue LONG ! возвращаемая Xpos координата колонки
code
loc:RetValue = 0
loop col# = (inColumn-1) to 1 by -1 ! ищем колонку левее указанной
LastOnLine# = SELF.ListBoxFEQ{PROPLIST:LastOnLine,col#}
if NOT LastOnLine# then break.
end
if NOT col# ! не нашли колонку - т.е. левее нет колонки
if xhdr_GetWindowRect(SELF.ListBoxFEQ{Prop:Handle},address(loc:Rect))
loc:RetValue = loc:Rect.left
end
else
loc:EntryControl = CREATE(0,CREATE:Entry)
SELF.ListBoxFEQ{Prop:Edit,col#} = loc:EntryControl
if xhdr_GetWindowRect(loc:EntryControl{Prop:Handle},address(loc:Rect))
loc:RetValue = loc:Rect.right
end
SELF.ListBoxFEQ{Prop:Edit,col#} = 0
DESTROY(loc:EntryControl)
end
return loc:RetValue
Код: Выделить всё
xHdrClass.GetColumnRightPos PROCEDURE(LONG inColumn)
loc:EntryControl LONG
loc:Rect LIKE(xhdr_RECT)
loc:RetValue LONG
code
loc:RetValue = 0
loc:EntryControl = CREATE(0,CREATE:Entry)
SELF.ListBoxFEQ{Prop:Edit,inColumn} = loc:EntryControl
if xhdr_GetWindowRect(loc:EntryControl{Prop:Handle},address(loc:Rect))
loc:RetValue = loc:Rect.right
end
SELF.ListBoxFEQ{Prop:Edit,inColumn} = 0
DESTROY(loc:EntryControl)
return loc:RetValue