社区
C++ Builder
帖子详情
求助,动行态改变控件大小
yuanque
2002-09-07 10:42:18
关于动态改变控件大小,我看到网上有不少人讨论这个问题,谁能帮助我们做一个类似CB开发状态下的控件大小、移动调整程序,感激不尽!
...全文
45
21
打赏
收藏
求助,动行态改变控件大小
关于动态改变控件大小,我看到网上有不少人讨论这个问题,谁能帮助我们做一个类似CB开发状态下的控件大小、移动调整程序,感激不尽!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Libran
2002-09-11
打赏
举报
回复
看一下,呵呵
http://61.132.74.87/libran/Project1.exe
还没完成,等出差回来再说
yuanque
2002-09-10
打赏
举报
回复
写得太差。望大家指教一下我这个CB新手,谢谢
yuanque
2002-09-10
打赏
举报
回复
/**
* 功能:从控件上松开按键时的事件处理
* 输入:
* 输出:
* 提示:
* 创建日期:
* 创建人:
**/
void __fastcall TWinDesignTimeForm::Up(TObject * Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
//MoveSize1->ActionControl=(TControl *)Sender;
if(mbLeft==Button&&m_bMoving)
{
Screen->Cursor=crDefault;
TControl *self=(TControl *)Sender;
Repaint();
int iX=((TControl *)Sender)->Left+X-m_iStartX;
int iY=((TControl *)Sender)->Top+Y-m_iStartY;
((TControl *)Sender)->Left=iX;
((TControl *)Sender)->Top=iY;
m_bMoving=false;
if (hintLabel)
{
delete hintLabel;
hintLabel=NULL;
}
}
//参数意义:
//0xF000 SC_SIZE ( No Effect )
//
//0xF001 右边不动,向左边扩大或缩小
//0xF002 左边不动,向右边扩大或缩小
//0xF003 下边不动,向上边扩大或缩小
//0xF004 下边及右边不动,向上边及左边扩大或缩小
//0xF005 下边及左边不动,向上边及右边扩大或缩小
//0xF006 上边不动,向下边扩大或缩小
//0xF007 上边及右边不动,向下边及左边扩大或缩小
//0xF008 上边及左边不动,向下边及右边扩大或缩小
//0xF009 移动
//
//0xF010 SC_MOVE ( No Effect )
//
//0xF011-0xF019 移动
}
yuanque
2002-09-10
打赏
举报
回复
我写的移动与改变大小的程序,请大家指教一下
(没有画八个RECT)
/**
* 功能:从控件上按下按键时的事件处理
* 输入:
* 输出:
* 提示:
* 创建日期:
* 创建人:
**/
void __fastcall TWinDesignTimeForm::Down(TObject * Sender,TMouseButton Button, TShiftState Shift, int X, int Y)
{
//MoveSize1->ActionControl=(TControl *)Sender;
TCursor OldCursor=Screen->Cursor;
/*up-left*/
if( X > 0 && X < 20
&& Y > 0 && Y < 20)
{
Screen->Cursor=crSizeNWSE;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF004,0);
}
/*down-right*/
else if((X > ((TControl *)Sender)->Width-20)
&& (X < ((TControl *)Sender)->Width)
&& (Y > ((TControl *)Sender)->Height-20)
&& (Y < ((TControl *)Sender)->Height))
{
Screen->Cursor=crSizeNWSE;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF008,0);
}
/*up-center*/
else if((X > ((TControl *)Sender)->Width/2-10)
&& (X < ((TControl *)Sender)->Width/2+10)
&& (Y>0) && (Y<20))
{
Screen->Cursor=crSizeNS;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF003,0);
}
/*down-center*/
else if((X > ((TControl *)Sender)->Width/2-10)
&& (X < ((TControl *)Sender)->Width/2+10)
&& (Y > ((TControl *)Sender)->Height-20)
&& (Y < ((TControl *)Sender)->Height))
{
Screen->Cursor=crSizeNS;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF006,0);
}
/*down-left*/
else if((X > 0)
&& (X < 5)
&& (Y > ((TControl *)Sender)->Height-20)
&& (Y < ((TControl *)Sender)->Height))
{
Screen->Cursor=crSizeNESW;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF007,0);
}
/*up-right*/
else if((X > ((TControl *)Sender)->Width-20)
&& (X < ((TControl *)Sender)->Width)
&& (Y > 0)
&& (Y < 5))
{
Screen->Cursor=crSizeNESW;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF005,0);
}
/*mid-left*/
else if((X > 0)
&& (X < 5)
&& (Y > ((TControl *)Sender)->Height/2-10)
&& (Y < ((TControl *)Sender)->Height/2+10))
{
Screen->Cursor=crSizeWE;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF001,0);
}
/*mid-right*/
else if((X > ((TControl *)Sender)->Width-10)
&& (X < ((TControl *)Sender)->Width)
&& (Y > ((TControl *)Sender)->Height/2-10)
&& (Y < ((TControl *)Sender)->Height/2+10))
{
Screen->Cursor=crSizeWE;
ReleaseCapture();
((TControl *)Sender)->Perform(WM_SYSCOMMAND,0xF002,0);
}
else
{
TControl *self=(TControl *)Sender;
self->BringToFront();
controlWidth=self->Width;
controlHeight=self->Height;
selectedControl=self;
//m_MovingControl=self;
SetControlRect(TRect((self->Left-1),(self->Top-1),(self->Left+self->Width+1),(self->Top+self->Height+1)));
if(mbLeft==Button)
{
m_bMoving=true;
m_iStartX=X;
m_iStartY=Y;
if(hintLabel!=NULL)
{
delete hintLabel;
}
hintLabel=new TStaticText(this);
hintLabel->Parent=this;
hintLabel->BorderStyle=sbsSunken;
hintLabel->Caption=IntToStr(self->Left)+","+IntToStr(self->Top);
hintLabel->Left=self->Left+X;
hintLabel->Top=self->Top+Y+20;
hintLabel->Color=clInfoBk;
}
}
}
/**
* 功能:控件移动
* 输入:
* 输出:
* 提示:
* 创建日期:
* 创建人:
**/
void __fastcall TWinDesignTimeForm::Move(TObject *Sender, TShiftState Shift,
int X, int Y)
{
//MoveSize1->ActionControl=(TControl *)Sender;
TCursor OldCursor=Screen->Cursor;
/*up-left*/
if( X > 0 && X < 10
&& Y > 0 && Y < 10)
{
Screen->Cursor=crSizeNWSE;
}
/*down-right*/
else if((X > ((TControl *)Sender)->Width-10)
&& (X < ((TControl *)Sender)->Width)
&& (Y > ((TControl *)Sender)->Height-10)
&& (Y < ((TControl *)Sender)->Height))
{
Screen->Cursor=crSizeNWSE;
}
/*up-center*/
else if((X > ((TControl *)Sender)->Width/2-5)
&& (X < ((TControl *)Sender)->Width/2+5)
&& (Y>0) && (Y<10))
{
Screen->Cursor=crSizeNS;
}
/*down-center*/
else if((X > ((TControl *)Sender)->Width/2-5)
&& (X < ((TControl *)Sender)->Width/2+5)
&& (Y > ((TControl *)Sender)->Height-10)
&& (Y < ((TControl *)Sender)->Height))
{
Screen->Cursor=crSizeNS;
}
/*down-left*/
else if((X > 0)
&& (X < 10)
&& (Y > ((TControl *)Sender)->Height-10)
&& (Y < ((TControl *)Sender)->Height))
{
Screen->Cursor=crSizeNESW;
}
/*up-right*/
else if((X > ((TControl *)Sender)->Width-10)
&& (X < ((TControl *)Sender)->Width)
&& (Y > 0)
&& (Y < 10))
{
Screen->Cursor=crSizeNESW;
}
/*mid-left*/
else if((X > 0)
&& (X < 10)
&& (Y > ((TControl *)Sender)->Height/2-5)
&& (Y < ((TControl *)Sender)->Height/2+5))
{
Screen->Cursor=crSizeWE;
}
/*mid-right*/
else if((X > ((TControl *)Sender)->Width-10)
&& (X < ((TControl *)Sender)->Width)
&& (Y > ((TControl *)Sender)->Height/2-5)
&& (Y < ((TControl *)Sender)->Height/2+5))
{
Screen->Cursor=crSizeWE;
}
else
{
Screen->Cursor=crDefault;
TControl *self=(TControl *)Sender;
int iX=self->Left+X-m_iStartX;
int iY=self->Top+Y-m_iStartY;
if (m_bMoving)
{
Repaint();
SetControlRect(TRect(iX-1,iY-1,iX+controlWidth+1,iY+controlHeight+1));
hintLabel->Caption=IntToStr(iX)+","+IntToStr(iX);
hintLabel->Left=iX+m_iStartX;
hintLabel->Top=iY+m_iStartY+20;
}
}
}
}
gfh21cn
2002-09-10
打赏
举报
回复
我的那个很简单的
在memo中动态创建image,然后当鼠标点击在image上的时候
把这个image四周画个框,把其他的恢复。
拖动image是通过处理image的onmousemove和onmousedown以及onmouseup事件
来处理的
windows系统本身就是画出来的
在什么样的情况下画什么样的效果
这就由你自己定了。
xue_fg
2002-09-09
打赏
举报
回复
我觉得呢,还是把他做在控件内部不错,直接在Canvas上画选中的效果,那样的效果很好,基本上像word 、cb中的效果了
yuanque
2002-09-09
打赏
举报
回复
比较急了,帮帮我!!!
yuanque
2002-09-09
打赏
举报
回复
以前是讨论过,而且我收集了,无非是用perform函数,做得不好,不像cb自己的开发界面一样好用。
huang_jihua
2002-09-09
打赏
举报
回复
你收索一下吧,以前在这里讨论过的
soloxiao
2002-09-09
打赏
举报
回复
好像可以设定控件的 Anchors 属性
将[akLeft,akTop,akRight,akBottom]都设定为true
可能我没有听懂你的问题...
vixkywx
2002-09-07
打赏
举报
回复
修改大小改height,width
移动改left,top
如果还要加点东西的话,就困难了
gfh21cn
2002-09-07
打赏
举报
回复
你用Splitter控件可以实现的
如果更深的话
你要处理消息
判断是否在控件边缘然后显示可以拖动的CURSOR
当鼠标按下时,判断是否在边缘,然后记录
根据鼠标移动的情况来处理
这是我的理解
annkie
2002-09-07
打赏
举报
回复
期待中。。。。
没有就自己写了,我也有这个问题,觉得很麻烦。
什么分辨率啊,字体啊,很难说换了地方还能保证原貌
e_board
2002-09-07
打赏
举报
回复
最好能根据窗口自动调节,
yuanque
2002-09-07
打赏
举报
回复
to gfh21cn(葛凤华):
选中、移动效果用Image来画是个好办法,能不能给我们展示一下你的源代码,感激不尽!
gfh21cn
2002-09-07
打赏
举报
回复
我也作个拖动的程序
我是用image,处理鼠标事件的时候
在image上画出被选中等效果
我想通过一般的可视控件(image、panel)和作一些处理(画)
来达到你的效果
yuanque
2002-09-07
打赏
举报
回复
应该不只是画出来的,CB在开发态拖动的控件应该已经是真正的控件了,而不是只是画个图片在上面(比如你可以设置控件在开发态的某些响应)。
用友的票据通不知大家看见过没有,好像就实现了控件的拖动,改变大小等操作,做得蛮好的,可惜看不到源程序。
gfh21cn
2002-09-07
打赏
举报
回复
CB里那些效果可能是画出来的
coolpony
2002-09-07
打赏
举报
回复
我也期待有这样的控件。。
有的话麻烦给我发一个。。
谢谢了。
yuanque
2002-09-07
打赏
举报
回复
我认为,最好是把这些改变大小,拖动等处理写成一个非可视的控件,使之影响到所有的控件。
期待中……………
加载更多回复(1)
C++ Qt——从入门到入土 (一)
目录 1.环境的配置 ...2.2.2 设置窗口标题和
大小
2.2.3 窗口初始位置的移动 2.2.4 窗口背景颜色设置 1.环境的配置 1.1 Qt的下载 Qt的下载链接如下:Index of /archive/qt/5.12/5.12.3 常见问题&a..
滴滴Android开发面试题及参考答案
继承 View 或其子类:根据具体的需求选择合适的父类进行继承,如果只是简单的绘制自定义图形或显示特定的内容,可以继承...测量 View 的
大小
:重写 onMeasure () 方法,根据 View 的布局参数和内容来测量 View 的
大小
。
微信小程序排队取号功能与地图组件实战
微信小程序作为一种新兴的应用形态,以其即开即用、无需下载安装的特点,在移动互联网领域异军突起。开发微信小程序,首先需要对开发环境有所了解,本章将带领大家从零开始,介绍微信小程序的开发环境搭建、配置以及...
精通 Android Studio3(二)
Studio 专门为 Android 的特点而设计,也是第一个集成新设计功能的工具,比如约束布局,这彻底
改变
了视觉活动的设计。到目前为止,已经涵盖了 IDE 所考虑的所有基本设计问题,并希望向读者介绍了简化和澄清这个常常...
Web前端面试题(附答案及解析)(2025.7月最新版)
(⭐) 2、块元素、行内元素、行内块元素,三者有何不同以及区别?...(⭐) 4、DOCTYPE(⽂档类型) 的作⽤(⭐) 5、localStorage、...(⭐⭐⭐) 特性 Cookie localStorage sessionStorage 存储
大小
4KB 左右 5MB 或更...
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章