怎样让用户在运行期实现设计期那样的界面设计方式

     object frmMain: TfrmMain
     Left = 335
     Top = 199
     BorderStyle = bsSingle
     Caption = 'Form1'
     ClientHeight = 183
     ClientWidth = 320
     Color = clBtnFace
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -10
     Font.Name = 'MS Sans Serif'
     Font.Style = []
     OldCreateOrder = False
     Position = poScreenCenter
     Scaled = False
     PixelsPerInch = 96
     TextHeight = 13
     object GroupBox1: TGroupBox
     Left = 16
     Top = 8
     Width = 73
     Height = 81
     Caption = 'GroupBox1'
     TabOrder = 0
     OnMouseDown = ControlMouseDown
     OnMouseMove = ControlMouseMove
     OnMouseUp = ControlMouseUp
     end
     object CheckBox1: TCheckBox
     Left = 40
     Top = 120
     Width = 97
     Height = 17
     Caption = 'CheckBox1'
     TabOrder = 1
     OnMouseDown = ControlMouseDown
     OnMouseMove = ControlMouseMove
     OnMouseUp = ControlMouseUp
     end
     object Button1: TButton
     Left = 102
     Top = 16
     Width = 75
     Height = 25
     Caption = 'Button1'
     TabOrder = 2
     OnMouseDown = ControlMouseDown
     OnMouseMove = ControlMouseMove
     OnMouseUp = ControlMouseUp
     end
     object Edit1: TEdit
     Left = 136
     Top = 64
     Width = 121
     Height = 21
     TabOrder = 3
     Text = 'Edit1'
     end
     end
    
     ********************************************************
    
    
unit Unit1;
    
    
interface
    
    
uses
    
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    
StdCtrls, Registry, ExtCtrls, ComCtrls;
    
    
type
    
TfrmMain = class (TForm)
    
GroupBox1: TGroupBox;
    
CheckBox1: TCheckBox;
    
Image1: TImage;
    
Button1: TButton;
    
procedure ControlMouseDown(Sender: TObject; Button: TMouseButton;
    
Shift: TShiftState; X, Y: Integer);
    
procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
    
Y: Integer);
    
procedure ControlMouseUp(Sender: TObject; Button: TMouseButton;
    
Shift: TShiftState; X, Y: Integer);
    
private
    
downX, downY: Integer;
    
dragging: Boolean;
    
{ Private-Deklarationen }
    
public
    
{ Public-Deklarationen }
    
end ;
    
    
var
    
frmMain: TfrmMain;
    
    
implementation
    
    
{$R *.DFM}
    
    
type
    
TMoveCracker = class (TControl);
    
    
procedure TfrmMain.ControlMouseDown(Sender: TObject; Button: TMouseButton;
    
Shift: TShiftState; X, Y: Integer);
    
begin
    
downX := X;
    
downY := Y;
    
dragging := TRue;
    
TMoveCracker(Sender).MouseCapture := True;
    
end ;
    
    
procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
    
Y: Integer);
    
begin
    
if dragging then
    
with Sender as TControl do
    
begin
    
Left := X - downX + Left;
    
Top := Y - downY + Top;
    
end ;
    
end ;
    
    
procedure TfrmMain.ControlMouseUp(Sender: TObject; Button: TMouseButton;
    
Shift: TShiftState; X, Y: Integer);
    
begin
    
if dragging then
    
begin
    
dragging := False;
    
TMoveCracker(Sender).MouseCapture := False;
    
end ;
    
end ;
    
    
end .
    

     定义三个方法ControlMouseUp,ControlMouseMove,ControlMouseDown,分别对应桌面所有控件的 OnMouseDown,OnMouseMove,OnMouseUp方法即可。
     2. 关于动态控件生成和控件属性、方法赋值的问题。
     这是标准的Delphi RTTI调用,Delphi Inspector自己也是通过RTTI调用的,没有什么好简单的吧,本来就很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值