Форум » [x]Harbour » listbox в режиме полного экрана » Ответить

listbox в режиме полного экрана

spair2k: Столкнулся с проблемой отображения содержимого LISTBOX DROPDOWN если окно не стандартногоразмера (80х25). Т.е. в стандартном режиме, если количество строк превышает размер раскрываемого списка, то курсор оказавшись на границах остается видимым. При перемещении вижу курсор на границе списка, записи пролистываются если двинут курсор за границы листа. Тут все в норме... Ситуация меняется, если окну задать нестандартный размер. В моем случае это 160х46 (FAR в полный экран Alt+F9) Курсор на границах списка пропадает, если перейти на строку ниже, и тоже самое происходит, в любую сторону.... К тому же, отображение обновленного списка становится очень странным... Эту "багу" я заметил как в Harbour 2.01 так и в xHarbour 1.20 Кто-нибудь сталкивался с такой штуковиной? Есть ли другой способ кроме создание своих контролов?

Ответов - 8

Andrey: Давай самодостаточный пример ! Будем тогда смотреть !

spair2k: Вот ссылка на архив с примером таблицы и режимов отображения LISTBOX listbox_test список режимов взят из мануала к xHarbour

PSP: Сейчас собрал с Harbour 2.0.0 Вроде LISTBOX на всех режимах одинаков и нормально работает.


spair2k: а что может быть не так у меня? в режимах где строк 50, 60 у меня возникают клюки описанные в первом посте...

Dima: PSP пишет: Сейчас собрал с Harbour 2.0.0 Вроде LISTBOX на всех режимах одинаков и нормально работает. У меня те же проблемы что и у spair2k

PSP: Да. Прошу прощения. "Эффект" есть.

Pasha: Глюк имеет место быть только под gtwin, под gtwvt его нет. Причина глюка в этом операторе: function getListPos( nWidth, nTop, nLeft ) nTop := maxrow()/2 nLeft := int(maxcol()/2-nWidth/2) return nil Значит, терминал gtwin где-то неверно обрабатывает дробное значение позиции курсора Достаточно заменить этот оператор на: nTop := Int(maxrow()/2) и глюк пропадает

spair2k: Pasha Спасибо за подсказку... правда я нашел еще подин глюк, возможно это тоже связано с выводом через gtwin: Если код немного изменить вот так #include 'box.ch' function main() local aList := {} local nListWidth := 40 local nListRows := 10 //для наглядности вида local nTop, nLeft local cCode := '000' local aModes := { {25, 80}, {43, 80}, {50, 80}, {60, 80}, {25, 132}, {43, 132}, {50, 132}, {60, 132} } local nRows, nCols local nOldRows := maxrow() local nOldCols := maxcol() local i //--- use spr05 new index on code to spr05 temporary dbeval( { ||aadd( aList, { spr05->name, spr05->code } ) } ) aSort( aList,,, { |x,y| x[1] < y[1] } ) for i=1 to len(aModes) nRows := aModes[i,1] nCols := aModes[i,2] cls setmode( nRows, nCols ) @ 0,0 say 'rows:'+alltrim(str(nRows))+' cols:'+alltrim(str(nCols)) getListPos( nListWidth, @nTop, @nLeft ) @ nTop, nLeft, nTop + nListRows, nLeft + nListWidth get cCode ; listbox aList dropdown guisend hotBox := B_SINGLE read alert(cCode) next i cls setmode( nOldRows, nOldCols ) return function getListPos( nWidth, nTop, nLeft ) nTop := int(maxrow()/2) //fix by:Pasha nLeft := int(maxcol()/2-nWidth/2) return nil то во всех режимах курсор тонет в последних двух строках, вверх идет нормально, а вниз утопает...



полная версия страницы