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

 
DBGrid, Изменить высоту заголовков
** Pan-SQL
Отправлено: 22.06.2006, 11:30


Не зарегистрирован







Здравствуйте уважаемые участники форума. Подскажите как изменить высоту заголовков в DBGride?. Вот нашел одну статейку, но так ничего не понял. Статейка следующая :

Высота любой строки любого наследника TCustomGrid определяется свойством RowHeights[номер строки]. Так как это свойство объявлено protected, для того, чтобы высота области заголовков DBGrid'а была большая, чем стандартная, используется обычный прием доступа к защищенным свойствам компонента, с описанием наследника от требуемого класса и повышением области видимости требуемого свойства:
type
THackGrid = class(TCustomGrid)
public
property RowHeights;
end;
Высоту области надо задать один раз, что и делается в обработчике события FormShow
procedure TForm1.FormShow(Sender: TObject);
var
....
H : Integer;
{ Определение необходимой высоты строки для многострочных заголовков }
H := DbGrid1.Canvas.TextHeight('gW');
THackGrid(DBGrid1).RowHeights[0] := (H + 2) * RowCount; { RowCount
принудительно объявлено 2 }
end;

olegenty
Отправлено: 22.06.2006, 11:43


Ветеран

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



а что конкретно не понятно-то?
** Pan-SQL
Отправлено: 22.06.2006, 11:59


Не зарегистрирован







Я так понял,нужно создать наследника TCustomGrid
AVC
Отправлено: 22.06.2006, 12:05


Ветеран

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



Можете так,
CODE

class tmpDBGrid : TDBGrid
{public: void __fastcall SetRow0Height (int);
};

void __fastcall tmpDBGrid::SetRow0Height (int newH)
{ TCustomGrid::RowHeights [0] = newH;
}

void __fastcall TForm1::Button10Click(TObject *Sender)
{ // пример использования
static int H = 12;
((tmpDBGrid*)DBGrid3)->SetRow0Height(++H);
}

Но этот способ очень нестабилен. Лучше сделать своего наследника от ??Grid'а и там перекрыть метод LayoutChanged
Например так
CODE

void __fastcall TDBGridM::LayoutChanged (void)
{
if (LayoutLock == 1 && Options.Contains(dgTitles) && FTitleLines > 1)
   RowHeights[0] = FTitleLines * (Canvas->TextHeight("Gg") + 4);

inherited::LayoutChanged();
}
** Pan-SQL
Отправлено: 22.06.2006, 12:06


Не зарегистрирован







В каом месте необходимо писать следующие строки:

type
THackGrid = class(TCustomGrid)
public
property RowHeights;
end
AVC
Отправлено: 22.06.2006, 12:36


Ветеран

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



QUOTE (** Pan-SQL @ 22/06/2006, 11:06)
В каом месте необходимо писать следующие строки:

type
THackGrid = class(TCustomGrid)
public
property RowHeights;
end

В паскале

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