运行时,控件设计状态

以下直接加入你的程序就可以啦,
调用方法
var
  SizeControl: TSizerControl;
SizeControl := TSizerControl.Create(self, sender as TLabel);
//改变控件位置及大小
unit SizerControl;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
  TSizerControl = class(TCustomControl)
  private
    FControl: TControl;
    FRectList: Array [1..8] of TRect;
    FPosList: Array [1..8] of Integer;
    { Private declarations }
  protected
    { Protected declarations }
  public
    constructor Create(AOwner: TComponent; AControl: TControl);
    procedure CreateParams(var Params: TCreateParams); override;
    procedure Createhandle;override;
    procedure WmNcHitTest(var Msg: TWmNcHitTest); message wm_NcHitTest;
    procedure WmSize(var Msg:TWmSize); message wm_Size;
    procedure WmLButtonDown(var Msg: TWmLButtonDown); message wm_LButtonDown;
    procedure WmMove(var Msg: TWmMove); message Wm_Move;
    procedure Paint; override;
    procedure SizeControlExit(Sender: TObject);
    { Public declarations }
  published
    { Published declarations }
  end;
const
  sc_DragMove: Longint = $F012;
procedure Register;
implementation
uses djtool;
constructor TSizerControl.Create(AOwner: TComponent; AControl: TControl);
var
  R: TRect;
begin
  inherited Create(AOwner);
  FControl := AControl;
  OnExit := SizeControlExit;
  R := FControl.BoundsRect;
  InflateRect(R, 2, 2);
  BoundsRect := R;
  Parent := FControl.Parent;
  FPosList[1] := htTopLeft;
  FPosList[2] := htTop;
  FPosList[3] := htTopRight;
  FPosList[4] := htRight;
  FPosList[5] := htBottomRight;
  FPosList[6] := htBottom;
  FPosList[7] := htBottomLeft;
  FPosList[8] := htLeft;
end;
procedure TSizerControl.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  //增加透明特性
  Params.ExStyle := Params.ExStyle
  + WS_EX_TRANSPARENT;
end;
procedure TSizerControl.Createhandle;
begin
  inherited Createhandle;
  SetFocus;
end;
procedure TSizerControl.WmNcHitTest(var Msg: TWmNcHitTest);
var
  Pt: TPoint;
  I: Integer;
begin
  Pt := Point(Msg.XPos, Msg.YPos);
  Pt := ScreenToClient(Pt);
  Msg.Result := 0;
  //检测鼠标位置并改变状态
  for I := 1 to 8 do
    if PtInRect(FRectList[I], Pt) then
      Msg.Result := FPosList[I];
  if Msg.Result = 0 then
    inherited;
end;
procedure TSizerControl.WmSize(var Msg:TWmSize);
var
  R: TRect;
begin
  R := BoundsRect;
  InflateRect( R, -2, -2);
  FControl.BoundsRect := R;
  //计算8个黑方框
  FRectList[1] := Rect(0 ,0, 5, 5);
  FRectList[2] := Rect(Width div 2 - 3, 0, Width div 2 + 2, 5);
  FRectList[3] := Rect(Width - 5, 0, Width, 5);
  FRectList[4] := Rect(Width - 5, height div 2 - 3, Width, Height div 2 + 2);
  FRectList[5] := Rect(Width - 5, Height - 5, Width, Height);
  FRectList[6] := Rect(Width div 2 - 3, Height - 5, Width div 2 + 2, Height);
  FRectList[7] := Rect(0, Height -5, 5, Height);
  FRectList[8] := Rect(0, Height div 2 - 3, 5, Height div 2 + 2);
//-------------------------added by guozhaofeng 以下部分用于变动时实时显示高度和宽度
//  djtool.EdtWit.Text:=templen;
//  Edtlen.Text:=inttostr(Width);
end;
procedure TSizerControl.WmLButtonDown(var Msg: TWmLButtonDown);
begin
  //执行拖动命令
  Perform(Wm_SysCommand, sc_DragMove, 0);
end;
procedure TSizerControl.WmMove(var Msg: TWmMove);
var
  R: TRect;
begin
  R := BoundsRect;
  InflateRect( R, -2, -2);
  FControl.Invalidate;
  FControl.BoundsRect := R;
end;
procedure TSizerControl.Paint;
var
  I: Integer;
begin
  Canvas.Brush.Color := clBlack;
  for I := 1 to 8 do
    with FRectList[I] do
      Canvas.Rectangle (Left, Top, Right, Bottom);
end;
procedure TSizerControl.SizeControlExit(Sender: TObject);
begin
  Free;
end;
procedure Register;
begin
  RegisterNoicon([TSizerControl]);
end;
end.
时间: 2024-11-12 00:42:21

运行时,控件设计状态的相关文章

wpf控件设计时支持(3)

原文:wpf控件设计时支持(3) wpf设计时调试 编辑模型 装饰器 1.wpf设计时调试 为了更好的了解wpf设计时框架,那么调试则非常重要,通过以下配置可以调试控件的设计时代码 (1)将启动项目配置成外部的visual studio ide启动程序devenv.exe (2)F5启动调试然后会打开一个新的visual studio ide,这个时候要记得重新打开你要调试的那个项目. 以上两个步骤就可以实现设计时调试了 2.编辑模型体系 当选中某些控件出现的设计时,这个选中的控件便成了可编辑的

基于Extjs的web表单设计器 第二节——表单控件设计

这一节介绍表单设计器的常用控件的设计. 在前面两章节的附图中我已经给出了表单控件的两大分类:区域控件.常用控件.这里对每个分类以及分类所包含的控件的作用进行一一的介绍,因为它们很重要,是表单设计器的基本元素,更是核心组成部门. 一.区域控件,它主要包含三个类型的控件:卡片区域.表格区域.混合区域.这三个控件是我们的其他控件的容器或者叫包装器,相当于VS里面的各种Panel.它们很重要,每种区域控件的作用都不一样,能够包含的控件类型也不大一样,它们三个区域相互配合使用,可以为我们的表单提供强大的支

Android自己定义控件(状态提示图表)

[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重分享成果] 1 背景 前面分析那么多系统源代码了.也该暂停下来歇息一下,趁昨晚闲着看见一个有意思的需求就操练一下分析源代码后的实例演练--自己定义控件. 这个实例非常适合新手入门自己定义控件.先看下效果图: 横屏模式例如以下: 竖屏模式例如以下: 看见没有.这个控件全然自己定义的,连文字等都是自己定义的,没有不论什么图片等资源,就仅仅是一个小的java文件,这个界面仅仅有一个控件.例如以下咱们看下实现代

关于Edit控件focused状态,调用自己编写的键盘

一.涉及编写自己的自己的键盘 由于只使用英文字母跟数字等简单的字符而已,没有包括全角或者中文字符.所以直接使用跟手机的输入密码键盘一样的键盘即可. 遇到的问题:1.使用法keybd_event()的方式进行发送消息,不管发送大小写字母都是显示小写字母 2.键盘不能有焦点状态,否则使用的keybd_event则无法将字符发送给edit框.如果使用有焦点的状态则会导致edit控件跟我自己编写的键盘耦合性太大. 3.由于使用duilib的tilelayout而出现键盘的所有按键无法正常对齐. 解决方案

车号输入控件设计小结

在业务应用系统中,车号输入作为最为频繁动作,其易用性与否,将很大程度上影响用户业务处理的速度.在中国国内,车号的编排有一定的规则,首先车号头一位为各省的简写,第二位为各市的字母代号,车号中涉及到字母的全部为大写.因此在设计车号输入控件的时候,可以采用combobox控件,可以把头两位相对固定的内容作为下拉框选项,涉及到字母输入的时候则不区分大小写,一律识别为大写.     车号输入控件的设置步骤如下:     1.从工具箱处拖出一个combobox控件,作为一个车号输入控件,把combobox控

.Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单

最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobiler Components”拖动一个GridView控件到窗体界面上 2.修改GridView控件的属性 a.load事件代码 VB: Private Sub TestGridView3_Load(senderAs Object, e As EventArgs)Handles MyBase.Load

WPF 控件设计1

使用 ”用户自定义控件“ 定义自己的控件: 创建后生成一个.cs文件定义控件的逻辑,一个.xaml(Generic.xaml)定义控件的style. 在定义style时,使用数据绑定将style中的控件属性绑定到自定义控件的属性上,有两种方法: Angle="{Binding RelativeSource={RelativeSource TemplatedParent},Path=AxiAngle,Mode=TwoWay}" BorderThickness="{Templat

C#控件及常用设计整

C#控件及常用设计整 1.窗体????1 2.Label 控件????3 3.TextBox 控件????4 4.RichTextBox控件????5 5.NumericUpDown 控件????7 6.Button 控件????7 7.GroupBox 控件????7 8.RadioButton控件????8 9.CheckBox 控件????8 10.ListBox 控件????9 11.ComboBox 控件????10 12.CheckedListBox 控件????10 13.Pict

C#控件及常用设计整理

1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2)WindowState属性:用来获取或设置窗体的窗口状态. 取值有三种: Normal (窗体正常显示). Minimized(窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示). (3)StartPosition属性:用来获取或设置运行时窗体的起始位置.(4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字. (5)Width属性