C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
WordWrap в Grid'e, перевод строки в гриде
T@rEn
Отправлено: 21.12.2006, 10:42


Ученик-кочегар

Группа: Участник
Сообщений: 18



Здравствуйте !!!

Помогите пожалуйста !!!

В ячейки грида надо вводить многострочные данные в виде:
____________
Слово1
слово2
слово3
____________

Есть ли в гриде свойство, подобное Wordwrap?
Можно ли это сделать в гриде, и если нельзя то где можно?

Заранее благодарен!!!
olegenty
Отправлено: 21.12.2006, 10:47


Ветеран

Группа: Модератор
Сообщений: 2412



В гриде это сделать можно, но с ограничениями. Этот грид называется TDBGridEh, он легко позволяет показывать многострочный текст. А ограничение следующее: фиксированная высота ячейки. Три строки — так все ячейки три строки. Если же нужен эффект типа таблицы Word (высота ячейки варьируется в зависимости от содержимого), то лично я знаю только один компонент, с помощью которого это легко можно сделать: TVirtualStringTree
T@rEn
Отправлено: 21.12.2006, 10:59


Ученик-кочегар

Группа: Участник
Сообщений: 18



Спасибо !!!

А где его (TVirtualStringTree) приобрести можно?
olegenty
Отправлено: 21.12.2006, 11:24


Ветеран

Группа: Модератор
Сообщений: 2412



http://www.soft-gems.net/VirtualTreeview/
бесплатен

а тут на пальцах прикинуто, как с ним работать:
http://forum.vingrad.ru/index.php?showtopic=97620
Doga
Отправлено: 21.12.2006, 11:28


Мастер участка

Группа: Участник
Сообщений: 575



Вообще то, вертикальные размеры ячейки вычислить не так уж и сложно. Например вот так:
CODE

for (int k = 0; k < Grid->RowCount; k++)
{
RECT CellRect2 = ...; //Координаты и размеры ячейки

AnsiString CellText = ...; //Текст ячейки

Grid->RowHeights[k] = 7 + DrawText(Grid->Canvas->Handle, CellText.c_str(), CellText.Length(), &CellRect2, DT_CALCRECT | DT_LEFT | DT_VCENTER | DT_WORDBREAK | DT_EXPANDTABS | DT_NOPREFIX | DT_END_ELLIPSIS);
}


Рисовать текст можно той же DrawText в событии OnDrawCell.

У RxDrawGrid есть метод DrawMultiline.

Что же касается TVirtualStringTree, то есть у него пара неприятных недостатков. В режиме грида он не может перемещать сфокусированную ячейку вдоль строки и нет фиксированных колонок sad.gif . Но, в остальном он, конечно, супер smile.gif

Отредактировано Doga — 21.12.2006, 11:49
olegenty
Отправлено: 21.12.2006, 11:37


Ветеран

Группа: Модератор
Сообщений: 2412



чего он куда не может перемещать в режиме грида??? у меня все везде перемещается и редактируется прямо по месту именно в режиме грида. т.е. имею полноценный грид. вот про фиксированные согласен. однако, я согласен с этим мириться за остальные другие плюсы: компонент абсолютно беспредельный smile.gif
olegenty
Отправлено: 21.12.2006, 11:40


Ветеран

Группа: Модератор
Сообщений: 2412



да, а ещё вот тут пример от Doga:
http://www.rxlib.ru/forums/index.php?s=64a...virtualtreeview

ценен тем, что те, кто ещё не работал с Shell — научатся. и ценен подходом к работе с TVirtualStringTree посредством класса-оператора. наглядно, просто, понятно.
Doga
Отправлено: 21.12.2006, 11:45


Мастер участка

Группа: Участник
Сообщений: 575



2olegenty

Возможно я тут не доглядел, каюсь biggrin.gif

Да и фиксированные колонки самому нарисовать можно вообще то... smile.gif

Отредактировано Doga — 21.12.2006, 11:48
olegenty
Отправлено: 21.12.2006, 11:52


Ветеран

Группа: Модератор
Сообщений: 2412



кстати, фиксацию можно сымитировать: делать колонки Visible=false при определенных условиях, а у юзера от этой простой манипуляции будет создаваться устойчивое впечатление, что присутствуют фиксированные колонки.
Лена
Отправлено: 21.12.2006, 12:14


Мастер участка

Группа: Участник
Сообщений: 501



Очень хороший компонет ADVStringGrid от компании TMS. Надо установить несколько свойств в инспекторе объектов и будет перенос строк — все автоматом.
olegenty
Отправлено: 21.12.2006, 14:36


Ветеран

Группа: Модератор
Сообщений: 2412



он платный. TVirtualStringTree — бесплатный. в последнее время стремлюсь использовать только то, что бесплатно либо куплено и в исходниках. на следующий год постараюсь выбить в своё подразделение только лицензионный софт, Turbo C++ — в том числе.
T@rEn
Отправлено: 22.12.2006, 11:26


Ученик-кочегар

Группа: Участник
Сообщений: 18



Всем спасибо!!!

Но у меня вопросик тупой возник, по установке VirtualTree.

Когда начинаю компилировать Package, Builder просит найти Package Import, и ссылается на файл *.bpi. Если Вам не трудно объясните, пожалуйста, чего ему надо и где это взять.

Заранее благодарен!!!
olegenty
Отправлено: 22.12.2006, 11:47


Ветеран

Группа: Модератор
Сообщений: 2412



setup сам всё ставит, можешь ничего не компилировать, просто разнеси *.bpl, *.bpi, *.lib в соответствующие подкаталоги $(BCB)\Project
T@rEn
Отправлено: 22.12.2006, 12:10


Ученик-кочегар

Группа: Участник
Сообщений: 18



Спасибо!!

Вернуться в Вопросы программирования в C++Builder