13,826
社区成员
发帖
与我相关
我的任务
分享
int nRow = 0;
int nCol = 0;
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
nRow = Edit1->Text.ToIntDef(0);
nCol = Edit2->Text.ToIntDef(0);
StringGrid1->Invalidate();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *sg = dynamic_cast <TStringGrid *> (Sender);
if (!sg) return;
if (ARow == 0 || ACol == 0) return;
sg->Canvas->Pen->Color = clRed;
sg->Canvas->Pen->Width = 2;
int nLineLen = 15; // 线条的长度
if (ARow == nRow - 1 && ACol == nCol - 1) // 左上格子绘制右和下的线条
{
// 下方线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
// 右侧线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
}
else if (ARow == nRow - 1 && ACol == nCol) // 右上格子绘制左和下的线条
{
// 下方线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top + Rect.Height());
// 左侧线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left, Rect.Top + Rect.Height());
}
else if (ARow == nRow && ACol == nCol - 1) // 左下格子绘制右和上的线条
{
// 上方线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top);
// 右侧线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + nLineLen);
}
else if (ARow == nRow && ACol == nCol) // 右下格子绘制左和上的线条
{
// 上方线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top);
// 左侧线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left, Rect.Top + nLineLen);
}
}
int nRowStart = 0;
int nRowEnd = 0;
int nColStart = 0;
int nColEnd = 0;
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
nRowStart = Edit1->Text.ToIntDef(0);
nRowEnd = Edit2->Text.ToIntDef(0);
nColStart = Edit3->Text.ToIntDef(0);
nColEnd = Edit4->Text.ToIntDef(0);
StringGrid1->Invalidate();
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *sg = dynamic_cast <TStringGrid *> (Sender);
if (!sg) return;
if (ARow == 0 || ACol == 0) return;
sg->Canvas->Pen->Color = clRed;
sg->Canvas->Pen->Width = 2;
int nLineLen = 15; // 线条的长度
if (ARow == nRowStart && ACol == nColStart) // 左上格子绘制右和下的线条
{
// 下方线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
// 右侧线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
}
else if (ARow == nRowStart && ACol == nColEnd) // 右上格子绘制左和下的线条
{
// 下方线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top + Rect.Height());
// 左侧线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left, Rect.Top + Rect.Height());
}
else if (ARow == nRowEnd && ACol == nColStart) // 左下格子绘制右和上的线条
{
// 上方线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top);
// 右侧线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + nLineLen);
}
else if (ARow == nRowEnd && ACol == nColEnd) // 右下格子绘制左和上的线条
{
// 上方线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top);
// 左侧线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left, Rect.Top + nLineLen);
}
}
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int a=0;
int b=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *sg = dynamic_cast <TStringGrid *> (Sender);
if (!sg) return ;
sg->Canvas->Pen->Color = clRed;
sg->Canvas->Pen->Width = 1;
int nLineLen = 15; //½u±øªºªø«×
int nRowStart = a; //±q²Ä¤T¦æ¶}©l
int nRowEnd = b; //¨ì²Ä¥|¦æµ²§ô
int nColStart = a; //±q²Ä¤T¦C¶}©l
int nColEnd = b; //¨ì²Ä¥|¦Cµ²§ô
if (ARow == nRowStart && ACol == nColStart &&a!=0 && b!=0) //¥ª¤W®æ¤lø»s¥k©M¤Uªº½u±ø
{
// ¤U¤è½u±ø
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
// ¥k°¼½u±ø
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
}
else if (ARow == nRowStart && ACol == nColEnd &&a!=0 && b!=0) //¥k¤W®æ¤lø»s¥ª©M¤Uªº½u±ø
{
// ¤U¤è½u±ø
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top + Rect.Height());
// ¥ª°¼½u±ø
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left, Rect.Top + Rect.Height());
}
else if (ARow == nRowEnd && ACol == nColStart &&a!=0 && b!=0) //¥ª¤U®æ¤lø»s¥k©M¤Wªº½u±ø
{
// ¤W¤è½u±ø
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top);
// ¥k°¼½u±ø
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + nLineLen);
}
else if (ARow == nRowEnd && ACol == nColEnd &&a!=0 && b!=0) //¥k¤U®æ¤lø»s¥ª©M¤Wªº½u±ø
{
// ¤W¤è½u±ø
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top);
// ¥ª°¼½u±ø
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left, Rect.Top + nLineLen);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit1->Text!=""&&Edit2->Text!="")
{
a=StrToInt(Edit1->Text);
b=StrToInt(Edit2->Text);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *sg = dynamic_cast <TStringGrid *> (Sender);
if (!sg) return;
sg->Canvas->Pen->Color = clRed;
sg->Canvas->Pen->Width = 2;
int nLineLen = 15; // 线条的长度
int nRowStart = 3; // 从第三行开始
int nRowEnd = 4; // 到第四行结束
int nColStart = 3; // 从第三列开始
int nColEnd = 4; // 到第四列结束
if (ARow == nRowStart && ACol == nColStart) // 左上格子绘制右和下的线条
{
// 下方线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
// 右侧线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + Rect.Height());
}
else if (ARow == nRowStart && ACol == nColEnd) // 右上格子绘制左和下的线条
{
// 下方线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height());
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top + Rect.Height());
// 左侧线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top + Rect.Height() - nLineLen);
sg->Canvas->LineTo(Rect.Left, Rect.Top + Rect.Height());
}
else if (ARow == nRowEnd && ACol == nColStart) // 左下格子绘制右和上的线条
{
// 上方线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width() - nLineLen, Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top);
// 右侧线条
sg->Canvas->MoveTo(Rect.Left + Rect.Width(), Rect.Top);
sg->Canvas->LineTo(Rect.Left + Rect.Width(), Rect.Top + nLineLen);
}
else if (ARow == nRowEnd && ACol == nColEnd) // 右下格子绘制左和上的线条
{
// 上方线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left + nLineLen, Rect.Top);
// 左侧线条
sg->Canvas->MoveTo(Rect.Left, Rect.Top);
sg->Canvas->LineTo(Rect.Left, Rect.Top + nLineLen);
}
}
StringGrid1->Canvas->Pen->Color=clRed;
StringGrid1->Canvas->MoveTo(Rect.Left-1, Rect.Top -1); //右
StringGrid1->Canvas->LineTo(Rect.Right - 1, Rect.Top - 1);
StringGrid1->Canvas->MoveTo(Rect.Left-1, Rect.Top -1); //下
StringGrid1->Canvas->LineTo(Rect.Left-1, Rect.Bottom - 1);
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Pen->Color=clRed;
StringGrid1->Canvas->MoveTo(50,50);
StringGrid1->Canvas->LineTo(50,80);
StringGrid1->Canvas->MoveTo(50,50);
StringGrid1->Canvas->LineTo(50,20);
StringGrid1->Canvas->MoveTo(50,50);
StringGrid1->Canvas->LineTo(80,50);
StringGrid1->Canvas->MoveTo(50,50);
StringGrid1->Canvas->LineTo(20,50);
}