社区
C++ Builder
帖子详情
如何在GroupBox中实现不同控件之间的连线? (C++ Builder),运行时画的线能随控件的移动而移动,并且线还能被删除!
upcqiyou
2011-09-28 07:57:39
如何在GroupBox中实现不同控件之间的连线? (C++ Builder),运行时画的线能随控件的移动而移动,并且线还能被删除!
...全文
218
8
打赏
收藏
如何在GroupBox中实现不同控件之间的连线? (C++ Builder),运行时画的线能随控件的移动而移动,并且线还能被删除!
如何在GroupBox中实现不同控件之间的连线? (C++ Builder),运行时画的线能随控件的移动而移动,并且线还能被删除!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ccrun.com
2011-10-03
打赏
举报
回复
[Quote=引用 5 楼 zzbinfo 的回复:]
我仔细考虑了一下,用shap实现不了.不好意思误导你了.
[/Quote]
楼主的需求,需要斜线的功能。Shape肯定是不行的。
zzbinfo
2011-10-03
打赏
举报
回复
我仔细考虑了一下,用shap实现不了.不好意思误导你了.
upcqiyou
2011-10-03
打赏
举报
回复
有人提醒我:
全部用类来实现,各处理各的事;对象有多个连接点,连接线也有多个连接点;连接点是对象,连接线也是对象 ;各个图形对象(控件、连接线)都是不同的类,连接关系(连接点)为这些相关对象的内部属性, 根据用例来完成相应的设计处理,各完成各的事的方法来做,但说的太笼统了,具体怎么来实现还是一大难题?
upcqiyou
2011-10-03
打赏
举报
回复
谢谢!
两个控件的连接与随便拖动一个控件,连线跟着变的功能我已经实现了(虽然做的很粗糙,但功能可以达到),包括斜线的功能。
现在主要问题是如果面板上有七八个控件,怎么随机连接其中两个控件,然后把七八个控件连接成流程图后,拖动其中一个控件,跟它连接(如果有2条或3条)的线也随之移动。我邮箱qiy898@163.com,欢迎交流。
upcqiyou
2011-10-01
打赏
举报
回复
控件的移动我已经做出来了,代码见下。
我主要问的是:运行时实现不同控件之间的连线,且画的线能随控件的移动而移动,并且线还能被删除!
控件的移动我已经做出来了,代码见下:
unit.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
bool bMouseDown = false;
int iX,iY;
Boolean Start;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Graphics::TBitmap *BmpTree = new Graphics::TBitmap(); //创建装载元素的位图
//装载元素图片,这里是一颗树的图片,除了叶子和树干外,其它地方都背填充为黑色了。
BmpTree->LoadFromFile("c:\\1.bmp");
// 或则指定图片的某个位置的颜色为透明色
// BmpTree->TransparentColor =BmpTree->Canvas->Pixels[50][50];
Image1->Canvas->Draw(10,10,BmpTree ); //把树的位图画到背景上面,树是透明的
delete BmpTree; //释放对象
}
//---------------------------------------------------------------------------
void __fastcall TForm1::closeClick(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
iX = X;
iY = Y;
bMouseDown = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
bMouseDown = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1DragOver(TObject *Sender, TObject *Source,
int X, int Y, TDragState State, bool &Accept)
{
Accept = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(bMouseDown)
{
DoubleBuffered = True; //使用双缓冲
Image1->Left = Image1->Left + X - iX;
Image1->Top = Image1->Top + Y - iY;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Graphics::TBitmap *Bmpm = new Graphics::TBitmap(); //创建装载元素的位图
//装载元素图片,这里是一颗树的图片,除了叶子和树干外,其它地方都背填充为黑色了。
Bmpm->LoadFromFile("c:\\2.bmp");
// 或则指定图片的某个位置的颜色为透明色
// Bmpm->TransparentColor =Bmpm->Canvas->Pixels[50][50];
Image1->Canvas->Draw(100,100,Bmpm ); //把树的位图画到背景上面,树是透明的
delete Bmpm; //释放对象
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Graphics::TBitmap *BmpTree = new Graphics::TBitmap(); //创建装载元素的位图
//装载元素图片,这里是一颗树的图片,除了叶子和树干外,其它地方都背填充为黑色了。
BmpTree->LoadFromFile("c:\\2.bmp");
// 或则指定图片的某个位置的颜色为透明色
// BmpTree->TransparentColor =BmpTree->Canvas->Pixels[50][50];
Image2->Canvas->Draw(10,10,BmpTree ); //把树的位图画到背景上面,树是透明的
delete BmpTree; //释放对象
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
iX = X;
iY = Y;
bMouseDown = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
bMouseDown = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(bMouseDown)
{
DoubleBuffered = True; //使用双缓冲
Image2->Left = Image2->Left + X - iX;
Image2->Top = Image2->Top + Y - iY;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
Start=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Start = True;
Form1->Canvas->MoveTo(X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Form1->Canvas->LineTo(X, Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1Click(TObject *Sender)
{
HDC hDC=GetWindowDC(this-> Handle);
TCanvas *mCanvas=new TCanvas;
mCanvas-> Handle=hDC;
int left,top,width,heigth,yCaption;
left=Image1-> Left;
top=Image1-> Top;
width=Image1-> Width;
heigth=Image1-> Height;
mCanvas-> Brush-> Color=clBlack;
yCaption=::GetSystemMetrics(SM_CYCAPTION);
//注意这里的画矩形的,我没有计算窗体的边框的宽度,所以left实际上不是Button的了left
mCanvas-> Rectangle(left,top+yCaption,left+10,top+10+yCaption);
ReleaseDC(this-> Handle,hDC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
}
//---------------------------------------------------------------------------
upcqiyou
2011-10-01
打赏
举报
回复
麻烦你花两分钟,能否说的具体一点
upcqiyou
2011-10-01
打赏
举报
回复
谢谢(zzbinfo) 的建议。
请问如何实现运行时,用鼠标来实现不同控件之间的连线,且控件连线完成后,连线能随控件的移动而移动,并且连线还能被删除!
zzbinfo
2011-09-30
打赏
举报
回复
你用个shape模拟实现吧,实现删除和移动可能简单些
将一个容器
中
控件
拖到另一个容器
中
Group
Box
中
,并可以在右边
Group
Box
区域
中
进行
移动
该
控件
及变动宽度和高度。 2.从左边容器(
Group
Box
)
中
Button,拖到右边的
Group
Box
区域后,重新创建一个Button,并不
移动
之前的Button, 新创建的Button可在该区域
移动
...
给
group
box
加上滚动条
这是一个用c#开发,简单的给
group
box
加上滚动条的代码,可以举一反三,以后如果哪个
控件
没有自动出现滚动条的功能,皆可以用这个方法
实现
免费DataGridView打印及.NET轻松打印
控件
5.0版
4、增加了直接打印Panel、
Group
Box
等容器
控件
中
的内容的DrawPanel函数(对容器
中
的Text
Box
控件
与Label
控件
以文本的形式打印,除此之外的其他除容器
控件
之外的
控件
如Check
Box
、Combo
Box
、Button
控件
等则直接以图片的...
V
C++
2010权威开发指南+源代码
5.4.9 在列表
控件
中
实现
工作区 205 5.4.10 处理列表
控件
中
的通知消息 206 5.4.11 更改列表
控件
样式 206 5.4.12 虚拟列表
控件
207 5.4.13 列表
控件
的消息映射 209 5.4.14 列表
控件
的风格选项及表头设置 ...
Delphi7下简单
实现
Panel透明化
Delphi7下简单
实现
Panel透明化
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章