请大虾支招!谢谢

KobeFeng 2006-05-13 05:51:17
请问各位下图所示的软件用C++builder如何实现?
(图片地址:http://www.newsmth.net/att.php?s.192.31344.698.jpg)
由图可以看出,点阵编辑区一共有40×8=320个小格子,每个小格子当被鼠标点击的时候,它的状态即将翻转,由不显示(黑的)变为绿色,或由绿色变为黑色,这样,点击指定的小格子让其显示绿色,即可显示指定的字符,如图中显示abcde五个字符。图片下边的两个手形按钮的作用是将所有的绿色点阵按照手形的方向(向左或向右)移动,点击一次移动一个格子。当编辑好要显示的字符后,可以点击发送键将代表此状态的代码通过串口发送出去。

请问各位,这些小格子在C++builder中是怎么实现的?
...全文
138 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KobeFeng 2006-05-18
  • 打赏
  • 举报
回复
问题以解决,谢谢各位朋友,尤其是BlueDeepOcean这位朋友!
BlueDeepOcean 2006-05-15
  • 打赏
  • 举报
回复
其中,sb 为StatusBar的缩写,sg 为StringGrid的缩写。
BlueDeepOcean 2006-05-15
  • 打赏
  • 举报
回复
带移动的,仅能实现到如此了。
没有处理当超出边框的边界时,继续往左或右隐藏超出的部分;以及移动到边框内,将隐藏的部分再显示出来这些情况。

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unt_PixelsMove.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool l,r;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
sg->ColCount = 40;
sg->RowCount = 8;
for (int c = 0; c < 40; c++)
for (int r = 0;r < 8;r ++)
sg->Cells[c][r] = "0";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sgDrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
if (sg->Cells[ACol][ARow] == "1"/*State.Contains(gdSelected)*/)
{
sg->Canvas->Brush->Color = clGreen;
sg->Canvas->FillRect(Rect);
sg->Canvas->Font->Color = clWhite;
}
else
{
sg->Canvas->Brush->Color = clWhite;
sg->Canvas->FillRect(Rect);
sg->Canvas->Font->Color = clBlack;
}
//sg->Canvas->TextOutA(Rect.Left,Rect.Top,AnsiString(IntToStr(ACol + 1) + "," + IntToStr(ARow + 1)));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sgSelectCell(TObject *Sender, int ACol, int ARow,
bool &CanSelect)
{
sg->Cells[ACol][ARow] = "1";

sb->Panels->Items[0]->Text = IntToStr(ACol);
sb->Panels->Items[1]->Text = IntToStr(ARow);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
for (int sgr = 0; sgr < 8; sgr ++)
for (int sgc = 0; sgc < 40; sgc ++)
if (sg->Cells[sgc][sgr] == "0" && sg->Cells[sgc + 1][sgr] == "1")
{
sg->Cells[sgc][sgr] = "1";
sg->Cells[sgc + 1][sgr] = "0";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
for (int sgr = 0; sgr < 8; sgr ++)
for (int sgc = 40; sgc > 0; sgc --)
if (sg->Cells[sgc][sgr] == "0" && sg->Cells[sgc - 1][sgr] == "1")
{
sg->Cells[sgc][sgr] = "1";
sg->Cells[sgc - 1][sgr] = "0";
}
}
//---------------------------------------------------------------------------
BlueDeepOcean 2006-05-15
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
sg->ColCount = 40;
sg->RowCount = 8;
for (int c = 0; c < 40; c++)
for (int r = 0;r < 8;r ++)
sg->Cells[c][r] = "0";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sgDrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
sg->Canvas->Brush->Color = clWhite;
sg->Canvas->FillRect(Rect);
sg->Canvas->Font->Color = clBlack;
if (sg->Cells[ACol][ARow] == "1"/*State.Contains(gdSelected)*/)
{
sg->Canvas->Brush->Color = clGreen;
sg->Canvas->FillRect(Rect);
sg->Canvas->Font->Color = clWhite;
}
sg->Canvas->TextOutA(Rect.Left,Rect.Top,AnsiString(IntToStr(ACol + 1) + "," + IntToStr(ARow + 1)));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sgSelectCell(TObject *Sender, int ACol, int ARow,
bool &CanSelect)
{
sg->Cells[ACol][ARow] = "1";
}
//---------------------------------------------------------------------------
KobeFeng 2006-05-14
  • 打赏
  • 举报
回复
非常感谢这位朋友,能具体说一下吗?
编译失败 2006-05-13
  • 打赏
  • 举报
回复
很简单,你可以用StringGrid来做,DrawGrid也可以

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧