Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

МНОГОСТОЧНЫЕ ЗАГОЛОВКИ DBGrid

2.7K
06 ноября 2003 года
shwarts
12 / / 17.10.2003
Понимаю конечно что это немного нагло, но слезно прошу помочь.
С системными функциями Windows абсолютно незнаком, а прогу сделать надо срочно...
Мне нужно реализовать в DBGrid многострочные заголовки. Взял код на Delphi и переделал в С.
Но не знаю как побороть несколько ошибок. Помогите пожалуйста:

class TForm1 : public TForm{
...
public:
__fastcall TForm1(TComponent* Owner);
void __fastcall InvalidateGridTitles();
void __fastcall GridWndProc (TMessage);
private:
HWND GridWnd ;
long OldWndProc;
bool *GridTitles;
};
int RectHeight(TRect);

class THackGrid:public TCustomGrid{ // класс создан для доступа к RowHeights.
public:
__property RowHeights;
};

int RowCount=2;
//---------------------------
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if (!GridTitles[Column->Index])
{
AnsiString *Titles=new AnsiString[RowCount];
TRect ARect;
int RH;
int BlankPos;
BlankPos = Column->Title->Caption.AnsiPos(' ');
if (BlankPos!=0)
{
Titles[1] = Column->Title->Caption.SubString(1, BlankPos-1);
Titles[2] = Column->Title->Caption.SubString(BlankPos+1,Column->Title->Caption.Length() - BlankPos);
RH = RectHeight(Rect);
SetRect(&ARect, Rect.left, 0, Rect.right, RH); /* насчет & перед ARect не уверен, но без него ошибка*/
InflateRect(&ARect, -2, -2);
//Dec(RH, 2); - так в коде Delphi и написано
TCanvas *Cv= DBGrid1->Canvas;
Cv->Brush->Color = DBGrid1->FixedColor;
Cv->FillRect(ARect);
ARect.bottom = RH;
DrawText(Handle, Titles[1].c_str(), -1, &ARect, DT_CENTER || DT_SINGLELINE);
OffsetRect(ARect, 0, RH-2);
DrawText(Handle, Titles[2].c_str(), -1, &ARect,DT_CENTER || DT_SINGLELINE);
}
GridTitles[Column->Index] = true;
}
}
//----------------
int RectHeight (TRect R)
{
return R.bottom - R.top;
}
//----------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
int I,H;

GridTitles=new bool[DBGrid1->Columns->Count];
for (I=0 ;DBGrid1->Columns->Count;I++)
{
DBGrid1->Columns->Items->Title->Alignment= taCenter;
GridTitles = false;
}

H = DBGrid1->Canvas->TextHeight("gW");
((THackGrid*)DBGrid1)->RowHeights[0] = (H + 2) * RowCount;

GridWnd = DBGrid1->Handle;
OldWndProc = GetWindowLong(GridWnd, GWL_WNDPROC);
SetWindowLong(GridWnd, GWL_WNDPROC, MakeObjectInstance(GridWndProc)); /* здесь ошибка, не понял почему GridWndProc без аргументов*/

delete [] GridTitles;
}
//-------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
InvalidateGridTitles();
}
//--------------------------------------------------
void __fastcall TForm1::InvalidateGridTitles()
{
int I;
for (I=0;I<DBGrid1->Columns->Count;I++)
GridTitles = false;
}
//-------------------------------------------------------------
void __fastcall TForm1::GridWndProc(TMessage Message)
{
switch(Message.Msg){
case WM_ERASEBKGND, WM_VSCROLL:
InvalidateGridTitles();
break;
case WM_HSCROLL:
InvalidateGridTitles();
InvalidateRect(GridWnd, NULL, true); /* в коде вместо NULL было nil - наверно опечатка*/
break;
}
return CallWindowProc(OldWndProc, GridWnd,Message.Msg, wParam, lParam);/*здесь ошибка откуда wParam, lParam и где их объявлять*/
}

Помогите, если не трудно..
989
06 ноября 2003 года
Vlad232ua
182 / / 02.04.2003
Цитата:
Originally posted by shwarts
Мне нужно реализовать в DBGrid многострочные заголовки.



Мне как-то посоветовали сходить на http://www.ehlib.com/ щелкни там на (See screenshots) посмотри че он умеет, тем более что для нас пока бесплатно.

371
06 ноября 2003 года
Non_prog
193 / / 20.03.2000
Цитата:
Originally posted by Vlad232ua


Мне как-то посоветовали сходить на http://www.ehlib.com/ щелкни там на (See screenshots) посмотри че он умеет, тем более что для нас пока бесплатно.


EhLib 3.2 Evaluation Version там есть надпись: (works only within IDE) т.е. без среду разработки работать не будет, поэтому советую искать более раннею версию которая будет без ограничений.
:)

293
06 ноября 2003 года
SEDEGOFF
586 / / 06.10.2002
Могу поделиться
362
06 ноября 2003 года
_kolyan
339 / / 03.12.2002
Могу поделиться

Поделись!
Поделись!!!
Пожалуйста.
Я: [email]_kolyan@ngs.ru[/email] (в начале - символ подчеркивания, а то часто пропускают ;-))
293
06 ноября 2003 года
SEDEGOFF
586 / / 06.10.2002
Можно забрать отсюда
http://sources.codenet.ru/index.php?path=incoming
362
06 ноября 2003 года
_kolyan
339 / / 03.12.2002
2 SEDEGOFF:
Спасибо, получил!
362
12 ноября 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by SEDEGOFF
Можно забрать отсюда
http://sources.codenet.ru/index.php?path=incoming



Архив требует пароль при распаковке. Поскажите ежели не секрет.

293
13 ноября 2003 года
SEDEGOFF
586 / / 06.10.2002
КАК СКАЗАНО НА САЙТЕ разкаботчика
ФЕВРАЛЬФЕВРАЛЬ
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог