Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FireMonkey 2.0 TGrid, Проблема с объектом TGrid 
:(
    Опции темы
vivien
Дата 10.3.2014, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.3.2014

Репутация: нет
Всего: нет



Здравствуйте уважаемые форумчане!
Есть такая проблема, в FireMonkey (Delphi XE 4) есть объект TGrid, его столбцы могут быть различных типов, но особенно интересует TCheckColumn. Ранее, в XE 2, у TColumn был метод CellControlByRow, и работала такая конструкция:

Код

   var tc : TTextCell;
   ...
   tc := columns[col].CellControlByRow(row) as TTextCell;
    if assigned(tc) then tc.Text := 'текст';


Таким образом можно было сделать текст у чекбокса в столбце. В XE 4 этого метода нет, я обошел это таким образом:

Код

(TFmxObject(Grid1.Columns[col].Controls.Items[row]) as TCheckCell).Text


Но тут нарисовалась другая проблема, при прокрутке Grid все нормально перерисовывается, но стоит только кликнуть по ячейке в столбце, который типа TCheckColumn, как отрисовка этого столбца сбивается,  например щелкнув на первом элементе, и прокрутив вниз, а потом вернувшись назад, я наблюдаю смещение на 2 строки ниже, текста, который я назначил для чекбокса этой ячейки. 
Т.к. я только начинаю копаться с этим объектом в FireMonkey, прошу не судить строго, если какую-то очевидную вещь я не до понял. Пока я отрабатываю только событие OnGetValue, в нем такой код для назначение заголовков чекбоксов ячеек (само состояние чекбокса через объект Value я пока не трогую, хотелось бы разобраться так сказать с его заголовком) :

Код

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;  var Value: TValue);
var _row: integer;
begin
  _row:=Row-Grid1.TopRow; // т.к. в Columns[Col].Controls содержатся (?) объекты только для видимых строк столбца, 
                                             // а Row - это абсолютный индекс строки в таблице, то считаем относительный, для того чтобы в ячейку чекбокса,
                                             // для которой нет данных из массива, занести пустую строку
  case Сol of
    0:begin
        if (Row<Length(array_test)) and (Grid1.TopRow<Length(array_test)) then    // если строка для прорисовки, входит в диапазон массива, назначаем чекбоксу текст                    
          (TFmxObject(Grid1.Columns[Col].Controls.Items[Row]) as TCheckCell).Text:=array_test[Row]  
        else // иначе текст пустой
          (TFmxObject(Grid1.Columns[Col].Controls.Items[_row]) as TCheckCell).Text:='';
      end;
  end;
end;


array_test - массив строк, инициализируется при создании формы, заполняет Grid по событию OnGetValue

В общем я не понимаю где проблема :(. Заранее спасибо за помощь. 


Это сообщение отредактировал(а) vivien - 10.3.2014, 17:54
PM MAIL   Вверх
Akella
Дата 10.3.2014, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329




 ! 
Akella
Используй кнопку КОД

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.