Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Работа с FrmScrollGrid acCheck

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0
Предыдущая тема :: Следующая тема  
Автор Сообщение
S_e_r_g
Гость





СообщениеДобавлено: Пн Дек 14, 2009 10:44 am    Заголовок сообщения: Работа с FrmScrollGrid acCheck Ответить с цитатой

Добрый день!

Необходимо сделать форму с таблицей (FrmScrollGrid). в Таблице используется столбец acCheck.
1. Что можно указать в поле DataSource для колонки CheckBox'ов?
2. Как правильно обновлять колонку с CheckBox'ами при удалении строки из середины таблицы? (строки смещаются вверх, а checkBox'ы нет)
3. Нажал на ячейку CheckBox - на нее переместился фокус. Теперь если нажимаю на любую нередактируемую колонку в этой же таблице, то опять изменяется эта ячейка, т.к. фокус остался на ней.
Что не есть хорошо - пользователь может прокрутив таблицу случайно нажать на нередактируемое поле и не заметит изменений.
Пробовал в событии OnCellClick перемещать фокус на другой элемент с помощью SetFocus. Не помогло, т.к. фокус все равно остается на CheckBox-e.

Как можно решить эту проблему?
Вернуться к началу
treasurer



Зарегистрирован: 10.03.2005
Сообщения: 553

СообщениеДобавлено: Пн Дек 14, 2009 1:48 pm    Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck Ответить с цитатой

S_e_r_g писал(а):
1. Что можно указать в поле DataSource для колонки CheckBox'ов?


Укажи параметр проводки целого типа. Никаких проблем не будет (если сам их не создашь).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Пн Дек 14, 2009 2:35 pm    Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck Ответить с цитатой

S_e_r_g писал(а):
1. Что можно указать в поле DataSource для колонки CheckBox'ов?

Любую переменную целого типа.
S_e_r_g писал(а):
2. Как правильно обновлять колонку с CheckBox'ами при удалении строки из середины таблицы? (строки смещаются вверх, а checkBox'ы нет)

Это потому что переменная в DataSource не понимает смену строки. Нужно использовать BindRow для идентификации строки. Потому удобнее работать с параметрами проводки, Map или массивом.
S_e_r_g писал(а):
3. Нажал на ячейку CheckBox - на нее переместился фокус. Теперь если нажимаю на любую нередактируемую колонку в этой же таблице, то опять изменяется эта ячейка, т.к. фокус остался на ней.
Что не есть хорошо - пользователь может прокрутив таблицу случайно нажать на нередактируемое поле и не заметит изменений.
Это есть "фича" Sad
Можно попробовать побороть, добавив, например, фиктивную редактируемую колонку до CheckBox, уменьшив ее ширину до минимума и не рисуя вертикальную полоску сетки справа.
По хорошему - нужно "ремонтировать" поведение элемента.
S_e_r_g писал(а):
Пробовал в событии OnCellClick перемещать фокус на другой элемент с помощью SetFocus. Не помогло, т.к. фокус все равно остается на CheckBox-e.
setFocus должен отработать по идее. А посмотреть отладчиком состояние фокуса элемента, на который он передается ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
S_e_r_g
Гость





СообщениеДобавлено: Пн Дек 14, 2009 4:43 pm    Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck Ответить с цитатой

olimp писал(а):
Это есть "фича" Sad
Можно попробовать побороть, добавив, например, фиктивную редактируемую колонку до CheckBox, уменьшив ее ширину до минимума и не рисуя вертикальную полоску сетки справа.
По хорошему - нужно "ремонтировать" поведение элемента.
...
setFocus должен отработать по идее. А посмотреть отладчиком состояние фокуса элемента, на который он передается ?

Когда устанавливаешь поле DataSource, то перестает работать событие OnCellClick Sad Соответственно фокус не установишь.
Все это дело удалось побороть с помощью добавления редактируемого поля, как писал olimp, и вот такого класса:
Код:
Class CheckBoxValueClass
   Private cbArray   '
   
   Private Sub Class_Initialize
     cbArray = Array()
   End Sub
   
   Public Default Property Get Value(Index)
      If UBound(cbArray) >= Index Then
         Value = cbArray(Index)
      Else
         Value = False
      End If
   End Property
   
   Public Property Let Value(Index, val)
      If Index > UBound(cbArray) Then
         ReDim Preserve cbArray(Index)
      End If
      cbArray(Index) = val
      Grid1.DeferSetPos Index, 8
   End Property

   Public Sub RemoveRow(Index)
      Dim i
      
      For i = Index To UBound(cbArray) - 1
         cbArray(i) = cbArray(i + 1)
      Next

      ReDim Preserve cbArray(UBound(cbArray) - 1)
   End Sub
End Class


В DataSource пишем cbClass.Value(Grid1.BindRow).

Может есть какой-нибудь более простой вариант? (например поправить Акцент Wink )
Вернуться к началу
treasurer



Зарегистрирован: 10.03.2005
Сообщения: 553

СообщениеДобавлено: Пн Дек 14, 2009 5:01 pm    Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck Ответить с цитатой

S_e_r_g писал(а):
Когда устанавливаешь поле DataSource, то перестает работать событие OnCellClick Sad


А нафига оно тебе? OnBound чем не подходит?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Пн Дек 14, 2009 5:05 pm    Заголовок сообщения: Re: Работа с FrmScrollGrid acCheck Ответить с цитатой

S_e_r_g писал(а):
Может есть какой-нибудь более простой вариант? (например поправить Акцент Wink )

Есть и даже три :)

1. Вспомнить, что есть событие OnBound, которые вызывается вместо CellClick, если DataSource указан.

2. Использовать объект Map вместо массива. Тогда силы придется тратить только сдвиг индексов при удалении элемента внутри списка. Будет работать много быстрее, чем redim для массива

3. Починить CheckBox, но
а) нужно посмотреть насколько это сложно
б) если и исправится, то только в 7.4
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
S_e_r_g
Гость





СообщениеДобавлено: Пн Дек 14, 2009 5:23 pm    Заголовок сообщения: Ответить с цитатой

спасибо, переделал на OnBound и Map Smile
Вернуться к началу
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group