МНОГОСТОЧНЫЕ ЗАГОЛОВКИ DBGrid
С системными функциями 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 и где их объявлять*/
}
Помогите, если не трудно..
Цитата:
Originally posted by shwarts
Мне нужно реализовать в DBGrid многострочные заголовки.
Мне нужно реализовать в DBGrid многострочные заголовки.
Мне как-то посоветовали сходить на http://www.ehlib.com/ щелкни там на (See screenshots) посмотри че он умеет, тем более что для нас пока бесплатно.
Цитата:
Originally posted by Vlad232ua
Мне как-то посоветовали сходить на http://www.ehlib.com/ щелкни там на (See screenshots) посмотри че он умеет, тем более что для нас пока бесплатно.
Мне как-то посоветовали сходить на http://www.ehlib.com/ щелкни там на (See screenshots) посмотри че он умеет, тем более что для нас пока бесплатно.
EhLib 3.2 Evaluation Version там есть надпись: (works only within IDE) т.е. без среду разработки работать не будет, поэтому советую искать более раннею версию которая будет без ограничений.
:)
Могу поделиться
Поделись!
Поделись!!!
Пожалуйста.
Я: [email]_kolyan@ngs.ru[/email] (в начале - символ подчеркивания, а то часто пропускают ;-))
Можно забрать отсюда
Спасибо, получил!
Цитата:
Архив требует пароль при распаковке. Поскажите ежели не секрет.
ФЕВРАЛЬФЕВРАЛЬ