C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Компонент TRGrid  (Прочитано 76171 раз)
Admin
Администратор
***

Сказали спасибо: +22/-4
Offline Offline

Сообщений: 286


« : 28 марта 2007, 18:22:46 »

Компонент для C++Builder 6.
Автор: Doga

Описание: таблица строк.

Последняя версия 1.15
Размещение в файловом архиве.
« Последнее редактирование: 25 мая 2009, 14:07:29 от Asher » Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #1 : 04 сентября 2007, 22:38:27 »

Всем привет!

Готова новая версия компонента TRGrid. Её порядковый номер 1.09 .

Исправлены все найденные в предыдущей версии (1.07) неприятные ошибки и глюки.

Добавлен встроенный редактор с настройками цвета фона, шрифтов и цвета каретки. Встроенный редактор должен поддерживать темы Windows (правда, сам еще не проверял - руки не доходят  Веселый). Именно для поддержки этой возможности в составе пакета 2 новых PAS файла (выдрал из BDS с небольшими переделками).

Для класса TRCellsVector добавлена функция расчёта размеров ячейки CalculateSize.

Добавлена поддержка BCB5.



На днях компонент выложу... (болею, однако)


А пока, собственно, картинка рабочего примера:
Записан
al802w
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 3


« Ответ #2 : 05 сентября 2007, 18:07:55 »

Отличный грид! Спасибо.
Только вот есть один маленький глюк. Прога выдает ошибку, хотя и работает, когда добавляешь строку, а потом перерисовываешь грид, пост_мессенджем в drawGridCellsText.
Ещё, если поставить количество строк меньше, чем фиксированных строк, то потом если ставишь больше строк, грид выдает ошибку.
Если можешь, исправь скорее, ну очень срочно нужно.
Записан
al802w
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 3


« Ответ #3 : 05 сентября 2007, 18:09:26 »

Жду версию 1.09. Может Эти глюки уже исправлены.  Улыбка
Записан
al802w
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 3


« Ответ #4 : 05 сентября 2007, 18:10:37 »

Хорошо ещё было бы иметь справочку по гриду. Улыбка
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #5 : 05 сентября 2007, 21:39:23 »

Компонент на сайт загрузил, теперь необходимо участие модераторов для его публикации...

2 al802w
Эта ошибка исправлена. Есть Так же хэлп, правда, ещё незаконченный. Но, лучше так, чем никак  Веселый
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #6 : 30 сентября 2007, 18:57:45 »

В версии 1.09 обнаружено ещё несколько ошибок.

В частности, не удалялись более не существующие объекты объединений после изменения (уменьшения) размеров грида с помощью свойств ColCount и RowCount.  Правда методы DeleteRow и DeleteCol работали корректно. Ну и по мелочи...

Таким образом, версия компонента TRGrid обновлена до 1.10

Желающие могут обращаться ко мне в личку или по E-Mail, вышлю по почте.
Только не забудте указать версию IDE (BCB5, 6, Delphi) и своё реальное имя  Улыбка

На форуме похоже какие-то проблемы - загруженные на сайт файлы, никто не видит... Шокирован
Записан
Лена
Гость
« Ответ #7 : 01 октября 2007, 11:40:05 »

А на С++ Builder 2007 грид можно поставить?  Строит глазки
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #8 : 01 октября 2007, 12:17:31 »

Пока для CB2007 гарантий дать не могу - у меня его пока что нет  Грустный
Достану - сделаю сборку и под него  Улыбка
Записан
Asher
Администратор
***

Сказали спасибо: +111/-5
Offline Offline

Сообщений: 425


« Ответ #9 : 18 октября 2007, 15:52:01 »

Привет.

Благодаря стараниям Admin'а появилась возможность управления файловым архивом.
закачайте пожалуста последнюю версию Вашей компоненты и я ее опубликую.
Можно путем поправки первого поста.

P.S. сейчас там лежит три Ваших файла:
TRGrid v1.09      1189444762RvaLib109.zip   Doga   2616kb
TRGrid v1.09      1189442447RvaLib109.zip   Doga   2338kb
TRGrid v1.09      RvaLib109.zip         Doga   1678kb
последний из них по дате 1189444762RvaLib109.zip
что делать с ними?
Записан
Admin
Администратор
***

Сказали спасибо: +22/-4
Offline Offline

Сообщений: 286


« Ответ #10 : 31 октября 2007, 11:29:01 »

Изменил на последний закачанный.
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #11 : 15 декабря 2007, 22:51:46 »

Всем привет!

Извиняюсь за долгое отсутствие на форуме - 2 месяца в командировках, дел было не в  проворот   Подмигивающий.

Наконец то обновлён компонент TRGrid. Его текущая версия 1.11. Лежит в файловом архиве.

Компонент скомпилирован для следующих версий IDE:
 
  BCB5
  BCB6
  D7
  RAD Studio 2007 C++
  RAD Studio 2007 Delphi
 


Версия для BDS2006 в состав пакета не включена - вроде как смысла нет.

Пред установкой компонента ознакомтесь с содержимым файла !!!.txt (ежели таковой найдётся для соответсвующей версии IDE).


2Admin
Все предыдущие версии можно(нужно) удалить
Записан
Лена
Гость
« Ответ #12 : 31 января 2008, 13:32:56 »

Снабжен ли последний релиз компонета TRGrid подробным help файлом с примерами?
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #13 : 31 января 2008, 17:21:53 »

Лена привет!  Улыбка

Хелп заканчиваю. Он выйдет вместе с новой версией компонента TRGrid v1.12.

В новой версии устранено моргание при отрисовке компонента (without flickering), добавлена поддержка подсветки горячих кнопок (HotTrakcing), добавлено вертикальное выравнивание текста в многострочном режиме (спасибо EL), исправлено несколько мелких глюков...

Примеры так же будут.

« Последнее редактирование: 07 февраля 2008, 15:51:47 от Doga » Записан
Лена
Гость
« Ответ #14 : 02 февраля 2008, 11:30:18 »

Огромное спасибо!  Целующий
Подожду TRGrid v1.12.
Записан
Лена
Гость
« Ответ #15 : 07 марта 2008, 11:17:05 »

Как там версия TRGrid v1.12? На подходе?  Строит глазки
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #16 : 07 марта 2008, 15:18:30 »

Сам компонент (v1.12) уже готов давно, проблема только с хелпом... вот он еще не готов.
Записан
leksu
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 38


« Ответ #17 : 13 марта 2008, 21:23:15 »

Скажите, а когда хелп будет готов???
а то я чайник, и мне трудного так разобраться...
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #18 : 14 марта 2008, 12:03:21 »

2leksu

Уже скоро  Улыбка

А пока, если что не понятно, задавайте вопросы здесь.
Записан
ruvv
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 15


« Ответ #19 : 09 апреля 2008, 07:20:43 »

Опаньки! Это то, что я искал. Спасибо автору, качну, буду разбираться
Записан
ruvv
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 15


« Ответ #20 : 11 апреля 2008, 06:50:30 »

Видно рано я радовался...

Демо пример прекрасно работает, но при попытке хотя бы записать текст в ячейку - ничего. Даже копирую кусок функции из демо и пусто. В запущенном приложении пишу текст в ячейку - убираю фокус - текст исчезает. Ничего не понятно.
Автору - дайте рабочий примерчик - разобраться.

По большому счету нужна была только зебра строк, хотя вариант группировки ячеек тоже интересен.
Кто-нибудь знает, возможно ли в стандартной StringGrid сделать зебру?
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #21 : 11 апреля 2008, 14:14:16 »

ruvv привет.

По описанию проблемы, без кода, могу предположить следующее.

1. Если текст в ячейке меняется напрямую, без использования редактора, сразу после его (текста) изменения, для немедленного отображения нового текста в ячейке, следует вызвать метод InvalidateCell. Дело в том что свойство Data ячейки (если, конечно, Вы используете именно его), а также строк и колонок, это всего лишь указатель (типа void *) на внешние данные (объекты памяти). Такая организация этого свойства позволяет хранить в нем объекты любого типа. По этому, естественно, компонент ничего не знает о типах, хранимых в этом свойстве данных и не может без помощи разработчика своевременно отслеживать его изменения. Визуализация данных возложена непосредственно на разработчика приложения. Для этого предусмотрены два события - OnDrawCellText (для вывода текста) и OnDrawImage (для отрисовки картинок). Именно обработчики этих двух событий отвечают за визуализацию данных в компоненте. Для принудительного обновления содержимого можно так же использовать следующие методы:

InvalidateCell  - для отдельной ячейки
InvalidateCol   - для отдельной колонки
InvalidateRow  - для отдельной строки
Invalidate       - для полной перерисовки компонента

Таким образом, если основываться на коде примера, этот вариант должен выглядеть приблизительно так:

Код
//Допустим, надо изменить текст ячейки 3ей колонки 3ей строки
 
if (!TRGrid1->Cells[3][3]->Data) //Если свойство Data ещё не проинициализированно
{
  TRGrid1->Cells[3][3]->Data = new TCellText;  
}
 
TCellText *CellText = (TCellText *)TRGrid1->Cells[3][3]->Data;
 
if (CellText->CellText != "Новый текст")
{
 CellText->CellText = "Новый текст"; //Изменяем текст ячейки
 TRGrid1->InvalidateCell(3, 3);          //Обновляем содержимое ячейки
}
 


2.С использованием встроенного редактора текст в ячейке меняется с помощью обработчиков следующих событий:

OnGetEditText - для получения текущего текста ячейки встроенным редактором
OnSetEditText - для замены старого текста ячейки новым, находящимся в данный момент в окне встроенного редактора

В примере эти обработчики называются соответственно RGrid1GetEditText и RGrid1SetEditText. Скорее всего, у Вас просто отсутствет обработчик события OnSetEditText - без него новый текст в ячейку записан не будет.


Если эти рекомендации не помогут, не сочтите за труд выложить здесь Ваш код - так будет проще разобраться в проблеме  Улыбка

Записан
ruvv
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 15


« Ответ #22 : 12 апреля 2008, 08:16:32 »

Если эти рекомендации не помогут, не сочтите за труд выложить здесь Ваш код - так будет проще разобраться в проблеме  Улыбка

Что-то не доходит до меня кое-что.
Допустим есть форма, на ней Ваш компонент и кнопка - при нажатии на нее в ячейку (3,3) заносится текст:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (!TRGrid1->Cells[3][3]->Data)
{
TRGrid1->Cells[3][3]->Data = new TCellText;
}

TCellText *CellText = (TCellText *)TRGrid1->Cells[3][3]->Data;

if (CellText->CellText != "bla-bla")
{
  CellText->CellText = "bla-bla";
  TRGrid1->InvalidateCell(3, 3);
}
}

Ничего не происходит.  Непонимающий Я так понимаю ячейка не обновилась. Это Ваш код - но он у меня не работает. В какой обработчик его надо засунуть и как это привязать к кнопке?
Как бы теорию я понял, не могу реализовать. Дополните код, чтоб он сработал.

P.S. Сильно не пинайте, я не такой уж опытный в c++.
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #23 : 13 апреля 2008, 18:37:50 »

ruvv привет.

Этот код работает в примере Demo (проверил у себя):
Код
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 if (!RGrid1->Cells[3][3]->Data) //Если свойство Data ещё не проинициализированно
 {
RGrid1->Cells[3][3]->Data = new TCellText;
 }
 
 TCellText *CellText = (TCellText *)RGrid1->Cells[3][3]->Data;
 
 if (CellText->CellText != "Новый текст")
 {
CellText->CellText = "Новый текст"; //Изменяем текст ячейки
RGrid1->InvalidateCell(3, 3);       //Обновляем содержимое ячейки
 }
}
//---------------------------------------------------------------------------
 


В предыдущем моём посте надо было заменить TRGrid1 на RGrid1, я по невнимательности этот момент упустил. А у Вас должна была быть ошибка "Undefined type TRGrid1" при компиляции проэкта  Улыбка

Если это не сработает, единственное что остаётся предположить - у Вас не назначен или отсутствует обработчик события OnDrawCellText. Без него текст в ячейки не выводится вообще. Я уже упоминал обэтом ранее.

Добавьте в демопример кнопку и создайте для неё обработчик события OnClick c исползованием вышеприведённого кода. Всё должно работать.   

В противном случае, повторю:  не сочтите за труд выложить здесь Ваш код - так будет проще разобраться в проблеме Улыбка

Записан
Mhuadeep
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 7


« Ответ #24 : 17 апреля 2008, 12:12:59 »

Обалдеть   Смеющийся Смеющийся Смеющийся огромное спасибо тебе АВТОР, ты волшебник, буду ждать helpa  Улыбка
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #25 : 17 апреля 2008, 17:38:44 »

Хелп - уже скоро, практически вот-вот...  Веселый
Записан
Gedeon
Ы
Администратор
***

Сказали спасибо: +6/-0
Offline Offline

Сообщений: 291


« Ответ #26 : 17 апреля 2008, 17:41:51 »

 Веселый

Да, у меня тоже документация делается последней, если вообще делается.
Записан
Doga
Давний друг
**

Сказали спасибо: +31/-1
Offline Offline

Сообщений: 241


WWW
« Ответ #27 : 17 апреля 2008, 18:17:26 »

Признаться, уже запарился  Подмигивающий
Записан
ruvv
Участник
**

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 15


« Ответ #28 : 18 апреля 2008, 07:13:22 »

Если это не сработает, единственное что остаётся предположить - у Вас не назначен или отсутствует обработчик события OnDrawCellText. Без него текст в ячейки не выводится вообще. Я уже упоминал обэтом ранее.

Добавьте в демопример кнопку и создайте для неё обработчик события OnClick c исползованием вышеприведённого кода. Всё должно работать.   

В противном случае, повторю:  не сочтите за труд выложить здесь Ваш код - так будет проще разобраться в проблеме Улыбка



Спасибо, разобрался. Пришлось пример разбирать по косточкам, чтоб дойти до этой строчки:
CellText = ((TCellText *)Cell->Data)->CellText;
Я как бы понимал, что должен быть обработчик OnDrawCellText - но вот что в него записать. Об этом то и были все вопросы. Буду копать дальше.

Да, хэлп тоже хочу поподробней
Записан
asmn
новенький
*

Сказали спасибо: +0/-0
Offline Offline

Сообщений: 1


« Ответ #29 : 16 мая 2008, 08:11:11 »

А под Delphi7 можно пример?
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в: