Настройка DBGrid
И в одной из ячеек данные достаточно большой длины (ну не помешаются на экране). А я хочу чтоб они помешались в половину экрана. Для этого видимо нужен какой-то перенос по словам или определённый формат ячейки. Возможно ли такое сделать вообще? и как тогда это сделать?? Спасибы за внимание!
Ты смотрел компонент DBCtrlGrid? (палитра DataControls)
Посмотрел, но не нашол того шо мне нада :(
А где ты там такую функцию видел? Как с ячейками работать?
Посмотрел, но не нашол того шо мне нада :(
А где ты там такую функцию видел? Как с ячейками
работать?
Это не функция. DBMemo переносит слова автоматически. На DBCtrlGrid можно поместить несколько DBEdit/DBText и один DBMemo.
И в одной из ячеек данные достаточно большой длины (ну не помешаются на экране). А я хочу чтоб они помешались в половину экрана. Для этого видимо нужен какой-то перенос по словам или определённый формат ячейки. Возможно ли такое сделать вообще? и как тогда это сделать?? Спасибы за внимание!
Интересно, решил проблему? Скажу более, что в DBGridEh, например, можно задать RowLines, а в свойстве колонки поставить WordWrap=true; однако... Это изменит все строки грида... Кто-нибудь сталкивался ли с таким компонентом, который мог бы "расширять" только те строки, в которых не умещается информация? Что-то я так и не разобрался, делает ли это DBGridEh?
Есть ещё у TDBGridEh свойство MemoLines (точно не помню), но это, кажется, не то.
Попробуй событие OnGetXXXParams (Cell, Line - что есть).
TColumnEh *Column, TFont *AFont, TColor &Background,
TGridDrawState State)
{
}
void __fastcall TForm1::DBGridEh1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumnEh *Column,
TGridDrawState State)
{
}
void __fastcall TForm1::DBGridEh1DrawDataCell(TObject *Sender,
const TRect &Rect, TField *Field, TGridDrawState State)
{
}
Rect, который хотелось бы изменить, идёт как константа. А вот свойство DBGridEh->OptionsEh имеет dghFitRowHeightToText. Название уж слишком говорит за себя. Пробовал устанавливать в true - результат нулевой, т.е., строки остаются одинакового размера, независимо от длины текста. Кто знает, как это работает и работает ли вообще?
Вот чем не приходилось пользоваться - так этим. Никогда подобной задачи не стояло. Единственно что, могу посоветовать обновиться до последней версии EhLib. Почитай хотя бы в ReadMe, может есть там что-то про этот флаг.
Странно. Тогда поставим вопрос по другому. Кто и как ухитряется сделать так, чтобы текст в гриде возможно было прочитать, даже если ширина колонки этого не позволяет?
Пытаемся переформулировать задачу. Задача грида - отображать данные обзорно. Полностью данные отображаются, если их не так много. Длинные строки мало подходят для вывода в грид, тем более, с возможностью редактирования.
Если так то можно использовать два варианта:
1 - узнаешь длинну текста, путем перевода ее в кол-во пикселей,
и затем расширяешь я чейку до этого размера;
2 - показываешь текст не полностью,либо при наведении на текст у тебя появляется подсказка, в которой ты отображаешь текст, либо на форму пихаешь Edit и после передачи фокуса на ячейку в Edit выводишь текст и там правишь после чего передаешь инфу в ячейку.
1 - узнаешь длинну текста, путем перевода ее в кол-во пикселей,
и затем расширяешь я чейку до этого размера;
Есть мысли, как это сделать?
У меня так и сделано. А надо, чтобы текст был виден всегда. И редактировать мне его не надо, только отображать...
Если не было альтернатив, мы делами именно так. Пользовались, правда, TDBEdit или аналогами.
Компонент принципально не важен, важна идея.
А как провернуть первый вариант скоро напишу до дома дойду
вот тебе пример,
int a=Canvas->TextWidth(Edit1->Text)+5;
StringGrid1->DefaultColWidth=a;
в данном случаетолько на один раз, в своем варианте изменяешь Edit1->Text на свою переменную ставишь цикл чтобы просматривал все ячейки ищешь среди полученных длин максимум, после чего приравниваешь к StringGrid1->DefaultColWidth
+5 поставлено для красоты
И на будующее Width-ширина, Height-высота, смотри от этого зависит многое.
До этого речь шла про ширину. Про высоту соответственно надо только поменять Width на hieght а принцип остается тот же.
Я бы на твоём месте посмотрел в исходниках, или почитал в справке, чего не хватает для работы dghFitRowHeightToText. И создал бы необходимые ему условия, если возможно. Не грид же переписывать.
Если поискать поиском по форуму, вылезут ссылки на DevExpress. С ним к сожалению, не работал.