Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многострочный текст в StringGrid 
V
    Опции темы
artsb
Дата 7.2.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Всем привет!

Такая задача:
Нужно отображать многострочный текст в ячейке StringGrid'а, причём, размер ячейки должен подгоняться под размер текста.

Я уже понял, что многострочный текст StringGrid не отображает. Его нужно рисовать самому.
Проблема в том, что я не могу найти свойства Height для конкретной строки и Width для конкретного столбца. Хотя у самого StringGrid'a в опциях можно разрешить изменение размеров строк и столбцов. А следовательно, он их должен где-то хранить...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Usper
Дата 7.2.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ширина столбца - StringGrid1->ColWidths[№ столбца]. Высота строки - StringGrid1->RowHeights[№ строки].



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
THandle
Дата 7.2.2009, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



artsb, посмотри эти статью, может быть найдешь что то полезное:

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=806
http://www.delphimaster.ru/articles/stringgrid/index.html

PM   Вверх
artsb
Дата 7.2.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Usper, спасибо. Какой-то я не внимательный. smile

THandle, спасибо, посмотрю.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
THandle
Дата 8.2.2009, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Кстати, что интересно, bose, вчера же написал на данную тему у себя в блоге:

http://tdelphi.blogspot.com/2009/02/dbgrid.html
PM   Вверх
artsb
Дата 8.2.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(THandle @  8.2.2009,  10:42 Найти цитируемый пост)
Кстати, что интересно, bose, вчера же написал на данную тему у себя в блоге:

Спс. В принципе, то же что и по первой ссылке выше smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 8.2.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Тестовая функция StringGrig1DrawCell выглядит так:
Код

{
TRect tr;
AnsiString s = "Hello world! Hello world!\nAnd hello world!";
const pole = 5;

DrawText(SrtingGrid1->Canvas->Handle, s.c_str, s.Length(), &tr, DT_WORDBREAK | DT_CALCRECT); // определяю длину и высоту текста

StringGrid1->RowHeights[ARow] = tr.Height() + pole * 2;
StringGrid1->ColWidth[ACol] = tr.Width() + pole * 2;

Rect = StringGrid1->CellRect[ARow][ACol];
StringGrid1->Canvas->FillRect(Rect);
tr.left = Rect.left + pole;
tr.top = Rect.top + pole;
tr.right = Rect.right - pole;
tr.bottom = Rect.bottom - pole;

DrawText(SrtingGrid1->Canvas->Handle, s.c_str, s.Length(), &tr, DT_WORDBREAK);
}

При условии, что есть фиксированные строки и столбцы, код рабочий. Как только убираю их - нормально прорисовывается только первая ячейка (остальные перерисовываются после кликов по ним). Оказывается, при вызове DrawText (когда определяю длину и высоту) для первой ячейки tr заполняется нормально, а при последующих - всякая белебирда(точнее она вообще не заполняется, остаются значения, полученные после создания переменной).
Стал думать, из-за чего это может быть...
Объявил s глобально - всё стало отлично.
Объявил tr глобально - началась таже пляска, только теперь все поля в tr заполнены нулями. Вернул tr обратно - всё нормально.

Не пойму, что за чертовщина? Что-то не то с DrawText?

ЗЫ код набирал по памяти, так что могут быть ошибки. smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 8.2.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



smile все глюки пропали, после того, как убрал флаг DT_WORDBREAK при первом вызове DrawText. Теперь независимо от того, где объявлены s и tr, результат одинаков.

Как-то странно всё это...  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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