TGridCoord gc;
...
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
gc=StringGrid1->MouseCoord(X,Y);
Rect1 = StringGrid1->CellRect(gc.X, gc.Y);
}
//------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
long Column, Row;
StringGrid1->MouseToCell(X, Y, Column, Row);
gc=StringGrid1->MouseCoord(X,Y);
Rect2 = StringGrid1->CellRect(gc.X, gc.Y);
Caption="caption";
::UnionRect(&Rect, &Rect1, &Rect2);
StringGrid1->Canvas->Brush->Color = StringGrid1->FixedColor;
StringGrid1->Canvas->FillRect(Rect);
Frame3D(StringGrid1->Canvas, Rect, clBtnHighlight, clWindowFrame, 1);
CaptionLength = Caption.Length();
::SetBkMode(StringGrid1->Canvas->Handle, TRANSPARENT );
::DrawText(StringGrid1->Canvas->Handle, Caption.c_str(), CaptionLength, &Rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
}
Объединение ячеек в StringGrid
у меня мышью можно выделить несколько ячеек в StringGrid, но, выделяя другие ячейки, объединение предыдущих пропадает. Как это обойти?
Цитата: j_anna
у меня мышью можно выделить несколько ячеек в StringGrid, но, выделяя другие ячейки, объединение предыдущих пропадает. Как это обойти?
Код:
TGridCoord gc;
...
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
gc=StringGrid1->MouseCoord(X,Y);
Rect1 = StringGrid1->CellRect(gc.X, gc.Y);
}
//------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
long Column, Row;
StringGrid1->MouseToCell(X, Y, Column, Row);
gc=StringGrid1->MouseCoord(X,Y);
Rect2 = StringGrid1->CellRect(gc.X, gc.Y);
Caption="caption";
::UnionRect(&Rect, &Rect1, &Rect2);
StringGrid1->Canvas->Brush->Color = StringGrid1->FixedColor;
StringGrid1->Canvas->FillRect(Rect);
Frame3D(StringGrid1->Canvas, Rect, clBtnHighlight, clWindowFrame, 1);
CaptionLength = Caption.Length();
::SetBkMode(StringGrid1->Canvas->Handle, TRANSPARENT );
::DrawText(StringGrid1->Canvas->Handle, Caption.c_str(), CaptionLength, &Rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
}
...
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
gc=StringGrid1->MouseCoord(X,Y);
Rect1 = StringGrid1->CellRect(gc.X, gc.Y);
}
//------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
long Column, Row;
StringGrid1->MouseToCell(X, Y, Column, Row);
gc=StringGrid1->MouseCoord(X,Y);
Rect2 = StringGrid1->CellRect(gc.X, gc.Y);
Caption="caption";
::UnionRect(&Rect, &Rect1, &Rect2);
StringGrid1->Canvas->Brush->Color = StringGrid1->FixedColor;
StringGrid1->Canvas->FillRect(Rect);
Frame3D(StringGrid1->Canvas, Rect, clBtnHighlight, clWindowFrame, 1);
CaptionLength = Caption.Length();
::SetBkMode(StringGrid1->Canvas->Handle, TRANSPARENT );
::DrawText(StringGrid1->Canvas->Handle, Caption.c_str(), CaptionLength, &Rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
}
1. Запоминать где-нибудь выделенные ячейки (напр. StringGrid1->Objects[col][row]...)
2. В обработчике OnDrawCell их отрисовывать
по идее, получается, что нужно запоминать несколько значений о:
превом объединении ячеек, их координатах(left,top.right,bottom),текст;
втором объединении ячеек, их координатах(left,top.right,bottom),текст;
...
последнем объединении ячеек, их координатах(left,top.right,bottom),текст;
Пререрисовывается ведь весь StringGrid