小菜鸟请教一个画图问题!

hebuliyan 2003-03-21 10:37:12
各位高手,小弟新学BCB,要做一个类似于WORD里的那样的画点画线的东东,要求可删除可移动,是用函数好,还是用控件好?哪位能给我说一下graphics.h和canvas怎么用呀?还有BCB里有没有画线的控件呀?!!
谢了!!
...全文
16 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hebuliyan 2003-03-24
  • 打赏
  • 举报
回复
实在是太感谢各位了,
多谢多谢!!
waterain 2003-03-21
  • 打赏
  • 举报
回复
这是我写的一小段画图程序,看看对你有没有用
unit1.cpp
---------------------------------------------------------------------------
void __fastcall TForm1::Image3MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
//Image3->Canvas->MoveTo(m_Origin.x,m_Origin.y);
Image3->Canvas->Pen->Mode=pmCopy;
//Image3->Canvas->MoveTo(X,Y);
if(Shift.Contains(ssLeft))
{
switch(Drawing)
{
case dsLine:
Image3->Canvas->LineTo(move.x,move.y);
Image3->Canvas->LineTo(X,Y);
break;
case dsRectangle:
Image3->Canvas->Rectangle(m_Origin.x,m_Origin.y,move.x,move.y);
Image3->Canvas->Rectangle(m_Origin.x,m_Origin.y,X,Y);
break;
case dsArc:
break;
case dsEllipse:
Image3->Canvas->Ellipse(m_Origin.x,m_Origin.y,move.x,move.y);
Image3->Canvas->Ellipse(m_Origin.x,m_Origin.y,X,Y);
break;
case dsRoundRect:
Image3->Canvas->RoundRect(m_Origin.x,m_Origin.y,move.x,move.y,(m_Origin.x-move.x)/2,
(m_Origin.y-move.y)/2);
Image3->Canvas->RoundRect(m_Origin.x,m_Origin.y,X,Y,(m_Origin.x-X)/2,
(m_Origin.y-Y)/2);
break;
default:
break;
}
move=Point(X,Y);
}
}
void __fastcall TForm1::Image3MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Image3->Canvas->MoveTo(X,Y);
m_Origin.x=X;
m_Origin.y=Y;
move.x=X;
move.y=Y;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TRect ARect;
Clipboard()->Assign(Image3->Picture);
Image3->Canvas->CopyMode=cmWhiteness;
ARect=Rect(0,0,Image3->Width,Image3->Height);
Image3->Canvas->CopyRect(ARect,Image3->Canvas,ARect);
Image3->Canvas->CopyMode=cmSrcCopy;

}
unit1.h
class TForm1 : public TForm
{
private:
enum DrawingStyle {dsLine,dsArc,dsEllipse,dsRectangle,dsRoundRect};
DrawingStyle Drawing;
TPoint m_Origin;
TPoint move;
}
头文件只写了我加的几个变量
xuv2002 2003-03-21
  • 打赏
  • 举报
回复
楼上的各位讲的都对了

想可删除可移动的话,可以在画线时记录下来
可以自己组织一种格式存成文件或是用数据库存起来,线条好存,只要记录两点
然后在画线区的mousemove事件里面判断一下当前点是否在已保存的线条上
假如在上边就可以从记录删除该线条
移动就需要重画,然后重新记录了
大概就是使用Canvas->Pen->Mode= pmNotXor;
重画了
wu_07 2003-03-21
  • 打赏
  • 举报
回复
在窗口上画网格:
Graphics::TBitmap *newbmp = new Graphics::TBitmap();
newbmp->Width = 10;
newbmp->Height = 10;
newbmp->Canvas->Pen->Color=clSilver;
newbmp->Canvas->Rectangle(0,0,11,11);
Canvas->Brush->Bitmap = newbmp;
Canvas->FillRect(Rect(0,0,Width,Height));
wu_07 2003-03-21
  • 打赏
  • 举报
回复
在Paint事件中用Canvas对象画线
在TForm TImage等对象中都有Canvas属性
Canvas->MoveTo(x,y);
Canvas->LineTo(x1,y1)
favorit 2003-03-21
  • 打赏
  • 举报
回复
画线可以用Canvas的MoveTo和LineTo来画

13,824

社区成员

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

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