Powerbuilder: позиционирование всплывающих окон - PullRequest
4 голосов
/ 30 января 2011

У меня есть окно данных master-detail.В подробном окне, когда пользователь щелкает строку, я открываю другое окно данных как всплывающее окно данных, которое расположено чуть ниже строки, по которой щелкнул пользователь.Работает нормально, если в окне подробностей меньше 11 строк.Когда окно содержит более 11 строк, и пользователь нажимает на строку из нижней области, всплывающее окно не помещается там, где оно должно быть.

Я предполагаю, что когда пользователь нажимает на строку внижняя область, окно прокручивается к нижней части, а некоторые строки скрываются в результате прокрутки.Если в результате прокрутки скрываются два ряда, всплывающее окно открывает два ряда под нужным рядом.Моя логика позиционирования следующая:

// "parent" is the user object that contains the datawindow 
// "row" contains clicked row number
// "this" points to the detail datawindow

ll_detail_height = long(this.Object.DataWindow.Detail.Height)
dw_status.y = this.y + ( ll_detail_height * (row) ) + parent.y

Как я могу решить эту проблему?

1 Ответ

5 голосов
/ 30 января 2011

У меня есть решение. Хитрость заключается в том, чтобы использовать свойство FirstRowOnPage окна подробных данных и использовать его для определения позиции y -

ll_first_row =  long( this.Object.DataWindow.FirstRowOnPage)
ll_row = row - ll_first_row + 1
ll_detail_height = long(this.Object.DataWindow.Detail.Height)
dw_status.y = this.y + ( ll_detail_height * ll_row ) + parent.y
...