delphi 拖动窗体

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 拖动窗体相关的知识,希望对你有一定的参考价值。

//声明函数
procedure chitTest(var m:TWMNchittest);
message WM_Nchittest;

//这个函数用来捕获系统消息。一般我们只能单击窗体的标题栏,才能拖动窗体!但我的窗体没有标题栏,我还想让他能拖动。这个函数测试成功了,能实现!即鼠标在客户区(中间白色的地方)单击,也可以拖动窗体
procedure Tform1.chitTest(var m:TWMNCHITTEST);
begin
inherited; //调用默认的事件处理程序
if m.Result=htclient then
//如果鼠标在客户区
m.Result:=htcaption;
//让鼠标在标题栏
end;

窗体上有2个按钮,一个Button1 一个SpeedButton1
当点击Button1时,可以正常触发Button1Click事件,
但点击SpeedButton1时,无法触发SpeedButton1Click事件?而是触发了我上面写的那个函数(窗体拖动事件)..哪位高手教教我,谢谢..
(注:因为我的界面是图片。所以得用到SpeedButton1按钮)

参考技术A //左边是DataGrid1 右边是2,选中一行,点查询按钮后var MyKey;//查询关键字begin MyKey := DATAGRID1.DataSource.DataSet.FieldByName('查询关键字段').AsString; with DataGrid2.DataSource.DataSet do begin Close; Sql.Text := 'select * from [YourTableName] where [关键字段]='''+MyKey+''''; Open; end;

在delphi中,在运行时如何让拖动的控件显示在最上方?

比如窗体上有panel1、panel2、panel3三个控件。可以拖动panel1到panel2上,也可以拖动panel2到panel1上。总之,可以让拖动那个控件能够位于其他的控件上方,而不是被别的控件遮住了。

参考技术A 我也最近才实现了这个功能,可以说是MPI窗口!
用PageControl控件可以实现,你把窗体的边框设为无边框,打开的时候最大化,每打开一个窗体就在主窗体的PageControl上面新建一个标签页,标签显示窗体的Caption属性,并把窗体的父控件设标签页,再在PageControl的标签双击事件中写入双击可以关闭当前标签页的事件就可以了!
参考技术B (Sender as TPanel).BringToFront; 参考技术C unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
procedure Panel1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;

var
Form1: TForm1;

implementation

$R *.dfm

procedure TForm1.FormCreate(Sender: TObject);
begin
RadioButton1.Caption := '置前';
RadioButton2.Caption := '置后';
RadioButton1.Checked := True;
Panel2.OnClick := Panel1Click;
Panel3.OnClick := Panel1Click;

Panel1.ParentBackground := False;
Panel1.Color := clRed;
Panel2.ParentBackground := False;
Panel2.Color := clLime;
Panel3.ParentBackground := False;
Panel3.Color := clBlue;
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
if RadioButton1.Checked then TPanel(Sender).BringToFront;
if RadioButton2.Checked then TPanel(Sender).SendToBack;
end;

end.
--------------------------------------------------------------------------------
窗体文件:
--------------------------------------------------------------------------------

object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 174
ClientWidth = 264
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 8
Top = 16
Width = 151
Height = 41
Caption = 'Panel1'
TabOrder = 0
OnClick = Panel1Click
end
object Panel2: TPanel
Left = 46
Top = 40
Width = 151
Height = 41
Caption = 'Panel2'
TabOrder = 1
end
object Panel3: TPanel
Left = 102
Top = 63
Width = 151
Height = 41
Caption = 'Panel3'
TabOrder = 2
end
object RadioButton1: TRadioButton
Left = 32
Top = 136
Width = 113
Height = 17
Caption = 'RadioButton1'
TabOrder = 3
end
object RadioButton2: TRadioButton
Left = 151
Top = 136
Width = 113
Height = 17
Caption = 'RadioButton2'
TabOrder = 4
end
end本回答被提问者采纳
参考技术D 去看下万一博客吧.
有这样的一个实类!

以上是关于delphi 拖动窗体的主要内容,如果未能解决你的问题,请参考以下文章

delphi窗体的问题

delphi实现窗体组建随窗体大小改变而改变

FireMonkey下的异形窗体拖动(句柄转换)

关于delphi 中的canvas重影问题

delphi 如何改变主窗体

delphi 子窗体如何继承主窗体的方法