Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Максимальная длина видимой строки в Grid'e / 5 сообщений из 5, страница 1 из 1
12.05.2006, 09:45
    #33722055
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальная длина видимой строки в Grid'e
Hi Alles

Возникла надобность определения максимальной длины видимых в Grid'e строк

Т.е например если полноценных строк 20 + (часть последней) округляем до 21

Например берем поле для 1 колонки Grid'a

Накатал код который делает следующее: сначала встаем на первую строку мотаем в цикле до RelativeRow = 1

Потом желательно бы узнать количество видимых строк.
Мотаю в цикле вниз пока RelativeRow перестанет изменяться т.е дошли до 21

Но Grid начинает Scroll'иться вниз.
Вся беда в том как потом спозиционироваться на исходную строку до начала поиска без использования LOCATE GOTO seek так как это очень долго.
Кто-нибудь решал что-то подобное?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 lcAlias = ALIAS()
 
 ThisForm.rgrid1.SetFocus()
 ThisForm.LockScreen = .T.
 
 DO WHILE ThisForm.rgrid1.RelativeRow <>  1      &&Встаем на первую видимую строку
   ThisForm.rgrid1.ActivateCell(ThisForm.rgrid1.ActiveRow -  1 , ThisForm.rgrid1.ActiveColumn)
 ENDDO

 m.lcField = SUBSTR(ThisForm.rgrid1.Column1.ControlSource, ; &&Поле в которм ищем MAX LEN
    AT(".",  ThisForm.rgrid1.Column1.ControlSource)+ 1 )
          
 m.lnLast = ThisForm.rgrid1.RelativeRow
 m.lnNew =  0 
 DO WHILE lnLast <> lnNew  &&Пока не встанем на последнюю видимую строку
   DIMENSION arrCaption(ThisForm.rgrid1.RelativeRow,  2 )
         
   arrCaption[ThisForm.rgrid1.RelativeRow,  1 ] = ALLTRIM(&lcAlias .&lcField)
   arrCaption[ThisForm.rgrid1.RelativeRow,  2 ] = LEN(ALLTRIM(&lcAlias .&lcField))
   m.lnLast = ThisForm.rgrid1.RelativeRow
   ThisForm.rgrid1.ActivateCell(ThisForm.rgrid1.ActiveRow +  1 , ThisForm.rgrid1.ActiveColumn)
   m.lnNew  = ThisForm.rgrid1.RelativeRow
 ENDDO

 ASORT(arrCaption,  2 , - 1 ,  0 )  &&Сортируем по длинам строк, наша будет в конце

 m.lnTextWidth = ;  &&Максимальная длина текста в элементе текста в Gride
   TXTWIDTH(arrCaption(ALEN(arrCaption, 1 ),  1 ), "Arial",  9 ) * ;
      FONTMETRIC( 6 , "Arial",  9 )
 
 ThisForm.rgrid1.ActivateCell(m.lnRow, ThisForm.rgrid1.ActiveColumn)  &&Иногда глючит
       
 ThisForm.rgrid1.Column1.Width = m.lnTextWidth +  5 

ThisForm.LockScreen = .F.
...
Рейтинг: 0 / 0
12.05.2006, 17:18
    #33723707
po2
po2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальная длина видимой строки в Grid'e
Не уверен насчет 8-ки, но вот в 9-й версии есть штатная процедура установки минимально необходимой ширины столбца. Для младших версий я бы не стал связываться с RelativeRow, с ростом числа записей будет заметна задержка. Лучше открыть таблицу ещё раз в другой области и двигать указатель там. Для определения верхней отображаемой строки, от которой необходимо производить отсчет, можно воспользоваться методом из примера по ссылке: Ориентирование в Grid'е .
...
Рейтинг: 0 / 0
13.05.2006, 10:09
    #33724471
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальная длина видимой строки в Grid'e
Fox 7

Почему с RelativeRow возможно какая-то задержка? мне кажется ему без разницы сколько в таблице записей он смотрит на количество видимых на экране строк в Gride если что сразу сбрасывается в 0.

Я как- то пытался посчитать количество строк но там погрешность есть и она может сделать Scroll иногда что-то типа учитывающая Grid.Height, Grid.Rowheight Form.height.

Мне же нужно не скролировая ни разу Grid запомнить первый раз RelativeROw
пройтись по всем строкам найти максимальную и потом ActivateCell на RerlativeRow
...
Рейтинг: 0 / 0
15.05.2006, 06:13
    #33725873
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальная длина видимой строки в Grid'e
Все перепробывал даже параллельный курсор.
Если б можно было определить содержимое 1 строки Grid'a не активируя ее.

Неужели никто неделал автоподбор ширины столбца?
...
Рейтинг: 0 / 0
17.05.2006, 13:03
    #33732408
Sea.Starry
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Максимальная длина видимой строки в Grid'e
Yraa только-что сделал.

в 7 FOX'e

Обеспечивает автоподбор ширины столбца по doubleclick'u на разделительной черте между headera'ми . Ищет максимальную длинную видимую строку в Gride и сравнивает ее с Caption Header'a и выбирает MAX длину из их длин. Не требует дополнительных столбцов и параллельных курсоров как в примере "Ориентироване в Gride"

Пример прилагается

Вопросы и пожелания принимаются ^^
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Максимальная длина видимой строки в Grid'e / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]