Label的caption中放长箭头???? 直接画布上画出来吧。或者用image 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [size=44px]↖↗↑←→↓↘↙[/size] 这种效果也试过了,问题是我的Label放在一个Panel上,当这个Label移动的时候,我的Panel也要一起移动的,其实就是做了一个箭头的效果 鼠标会拖动这个label?直接在这个label的canvas上画就得了。 这种效果也试过了,问题是我的Label放在一个Panel上,当这个Label移动的时候,我的Panel也要一起移动的,其实就是做了一个箭头的效果这样有什么问题么? 是的,运行期要支持拖动,现在想了个办法,用SHAPE来表示直线,于在Label里面放特殊字符的Label,就可以达到这种效果了,直接绘图的话,拖动是个麻烦的事情 绘图代码写在控件的OnPaint里,如果没有OnPaint就它的WM_PAINT消息中处理,跟拖动没啥冲突啊,怎么麻烦呢 如何在WM_PAINT消息中处理绘图?我对消息机制不是太了解,能详细说一上吗? unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) lbl1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure LabelWndProc(var m: TMessage); // 给label控件定义一个新的窗口过程 end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);begin // 子类化 label 控件,接管其窗口过程 lbl1.WindowProc := LabelWndProc;end;procedure TForm1.LabelWndProc(var m: TMessage);var cc: TControlCanvas; // 控件画布begin if m.Msg = WM_PAINT then begin cc := TControlCanvas.Create; cc.Control := lbl1; // cc 即为该控件的canvas // 用 cc 在这里画你的箭头 cc.Free; m.Result := 0; // 返回0表示已处理了该消息 end; lbl1.Dispatch(m); // 消息传递下去end;end. 如果是Panel上画箭头,这个接管的过程能行吗?因为Panel是没有Canvas的 刚刚试了下,好像没效果,因为我是想要在Panel上画箭头,然后这个Panel运行期是可拖动的,然后箭头也跟着动 这里错了 。 cc.Free; m.Result := 0; // 返回0表示已处理了该消息 end else // 加上else lbl1.Dispatch(m); // 把WM_PAINT之外的消息传递下去end; unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) pnl1: TPanel; lbl1: TLabel; procedure FormCreate(Sender: TObject); procedure lbl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure lbl1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure lbl1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } procedure NewWndProc(var m: TMessage); // 给label控件定义一个新的窗口过程 end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }var x1, y1: Integer; flag: Boolean;procedure TForm1.FormCreate(Sender: TObject);begin // 子类化 lbl1 控件,接管其窗口过程 lbl1.WindowProc := NewWndProc;end;procedure TForm1.NewWndProc(var m: TMessage);var cc: TControlCanvas; // 控件画布begin if m.Msg = WM_PAINT then begin cc := TControlCanvas.Create; cc.Control := lbl1; // cc 即为该控件的canvas // 用 cc 在这里画你的箭头 lbl1.AutoSize := False; lbl1.Width := cc.TextWidth('假装我是箭头--------->'); cc.Brush.Style := bsClear; cc.TextOut(0, 0, '假装我是箭头--------->'); cc.Free; m.Result := 0; // 返回0表示已处理了该消息 end else lbl1.Dispatch(m); // 消息传递下去end;// 以下是拖动处理procedure TForm1.lbl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin x1 := x; y1 := y; flag := True;end;procedure TForm1.lbl1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if flag then begin pnl1.Left := pnl1.Left + x - x1; pnl1.Top := pnl1.Top + y - y1; end;end;procedure TForm1.lbl1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin flag := False;end;end. 申请担任CSDN数据库板块的版主 Delphi中将数据导入到Excel中的问题 接收到消息LParam处理问题 怎样转换xml文件格式? 向大家隆重推荐ELDOS的控件!其中有一个ELPage真的COOL!不过奇怪的很... 招募網羅遊戲輔助程式開發人員 一个矛盾的问题,请解决以下!! !delphi 6 ctrl+上箭头做微调?? 我使用Delphi5的Coolbar,但却发现,没有办法显示提示, 在MDIFORM上加上Image控件并加上图片,运行后好象没有显示出来,怎么解决? 关于窗口显示在屏幕右下角问题 FileDisk.sys 如何做虚拟光驱用?
这样有什么问题么?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
lbl1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure LabelWndProc(var m: TMessage); // 给label控件定义一个新的窗口过程
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
begin
// 子类化 label 控件,接管其窗口过程
lbl1.WindowProc := LabelWndProc;
end;procedure TForm1.LabelWndProc(var m: TMessage);
var
cc: TControlCanvas; // 控件画布
begin
if m.Msg = WM_PAINT then
begin
cc := TControlCanvas.Create;
cc.Control := lbl1; // cc 即为该控件的canvas // 用 cc 在这里画你的箭头 cc.Free;
m.Result := 0; // 返回0表示已处理了该消息
end;
lbl1.Dispatch(m); // 消息传递下去
end;end.
。
cc.Free;
m.Result := 0; // 返回0表示已处理了该消息
end
else // 加上else
lbl1.Dispatch(m); // 把WM_PAINT之外的消息传递下去
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
pnl1: TPanel;
lbl1: TLabel;
procedure FormCreate(Sender: TObject);
procedure lbl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure lbl1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure lbl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
procedure NewWndProc(var m: TMessage); // 给label控件定义一个新的窗口过程
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }var
x1, y1: Integer;
flag: Boolean;procedure TForm1.FormCreate(Sender: TObject);
begin
// 子类化 lbl1 控件,接管其窗口过程
lbl1.WindowProc := NewWndProc;
end;procedure TForm1.NewWndProc(var m: TMessage);
var
cc: TControlCanvas; // 控件画布
begin
if m.Msg = WM_PAINT then
begin
cc := TControlCanvas.Create;
cc.Control := lbl1; // cc 即为该控件的canvas // 用 cc 在这里画你的箭头
lbl1.AutoSize := False;
lbl1.Width := cc.TextWidth('假装我是箭头--------->');
cc.Brush.Style := bsClear;
cc.TextOut(0, 0, '假装我是箭头--------->'); cc.Free;
m.Result := 0; // 返回0表示已处理了该消息
end
else
lbl1.Dispatch(m); // 消息传递下去
end;// 以下是拖动处理procedure TForm1.lbl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x1 := x;
y1 := y;
flag := True;
end;procedure TForm1.lbl1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if flag then
begin
pnl1.Left := pnl1.Left + x - x1;
pnl1.Top := pnl1.Top + y - y1;
end;
end;procedure TForm1.lbl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
flag := False;
end;end.