一个TLabel的托拽问题

宙斯之神 2006-04-11 08:53:26
我想在一定范围内横向移动TLabel控件,怎样来控制范围,比如说往左移动到某一点后就不能在往左动了!谢谢!
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueDeepOcean 2006-04-14
  • 打赏
  • 举报
回复
那你就修改左右边界的限制值嘛。我写的这个例子在我这边是通过的。
BlueDeepOcean 2006-04-14
  • 打赏
  • 举报
回复
这是由于这些画面是采用重画的方式画上去的。并且,只是单纯的重画。如果需要实现像Microsoft Word那样的粘贴图片的方式,需要通过多个Windows消息和API实现。
在网络上有一个关于VC/C++Builder Debug窗体界面的设计,我也曾实现过,不过实现了,但是效果不好。采用的就是你说的方法2。
宙斯之神 2006-04-14
  • 打赏
  • 举报
回复
十分感谢!RIchedit中放上图片怎么一动就没了?
方法1:
HDC dc;
dc = GetDC(RichEdit1->Handle);
BitBlt(dc,0,0,Image1->Width,Image1->Height,Image1->Picture->Bitmap->Canvas—>HANDLE,0,0,SRCCOPY);
方法2:
TControlCanvas *mycanvas=new TControlCanvas;
mycanvas->Control=RichEdit1;
mycanvas->Draw(10,10,Image1->Picture->Graphic) ;

能否把qq告诉小弟,多谢!
宙斯之神 2006-04-13
  • 打赏
  • 举报
回复
非常感谢!例子的那个滑标可是滑动的时候好像没有界限啊,可以拽出去。
BlueDeepOcean 2006-04-13
  • 打赏
  • 举报
回复
例子没有毛病。我系统地研究过。至于你所说的如何完成类似于Word中的虚线功能,这个涉及到了重画,或者说是用到了一些API函数。在RichEdit中放置图片可以通过TControlCanvase实现。
建议你仔细看例子,仔细看看RichEdit托拽部分的函数。
xiaoshi0 2006-04-12
  • 打赏
  • 举报
回复
在窗体获得焦点的时候画两条线,不用放在那个时间中,放在OnPaint时间中

直接p.x = X,是相对于TLabel控件的左上角的,不是窗体的,所以应该加上TLabel的左上角横坐标

纵坐标也一样
宙斯之神 2006-04-12
  • 打赏
  • 举报
回复
我要控制 Borland\CBuilder6\Examples\Apps\RichEdit 中的上面的滑条,例子里面的滑条有点毛病,请指教一下怎样才能弄出类似word里的滑条的功能!并且再托拽的时候下面的richedit中显示虚线! 还有在richedit中怎样放置图片啊?如果有第三方控件请告诉小弟在那里下啊?
BlueDeepOcean 2006-04-12
  • 打赏
  • 举报
回复
这两块由于匆忙,少写了些,特此修改:
void __fastcall TForm1::Label1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
{
IsOnIt = true;
P.x = X;
P.y = Y;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if (IsOnIt)
{ //水平移动
if (X > P.x)
if (Label1->Left + abs(X - P.x) <= 500)
Label1->Left = Label1->Left + abs(X - P.x);
if (X < P.x)
if (Label1->Left - abs(X - P.x) >= 100)
Label1->Left = Label1->Left - abs(P.x - X);
}
}
BlueDeepOcean 2006-04-12
  • 打赏
  • 举报
回复
大体就是这样。
BlueDeepOcean 2006-04-12
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

bool IsOnIt;
TPoint P;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
P.x = 0;
P.y = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Canvas->Pen->Color = clYellow;
Canvas->MoveTo(100,0);
Canvas->LineTo(100,Height);
Canvas->MoveTo(600,0);
Canvas->LineTo(600,Height);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
FormActivate(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
IsOnIt = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if (IsOnIt)
//水平移动
if (X > P.x)
if (Label1->Left + abs(X - P.x) <= 500)
Label1->Left = Label1->Left + abs(X - P.x);
if (X < P.x)
if (Label1->Left - abs(X - P.x) >= 100)
Label1->Left = Label1->Left - abs(P.x - X);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Label1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
IsOnIt = false;
}
//---------------------------------------------------------------------------
xiaoshi0 2006-04-12
  • 打赏
  • 举报
回复
你说清楚点好么?

如果是设计界面时,没有办法控制,你想拖到哪就拖到哪

如果是编译好了以后,那你判断一下左上角是否在你想要的范围之内就可以了
BlueDeepOcean 2006-04-12
  • 打赏
  • 举报
回复
画那两条线是为了说明一个大体的范围。没有别的什么。
zyyoung 2006-04-12
  • 打赏
  • 举报
回复
友情up

13,825

社区成员

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

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