• 用户界面设计(3)- 窗体的主要方法


    窗体的显示与隐藏:

    Form2.Show;//显示该窗体,是过程,代码会继续往下执行
    Form2.ShowModal{显示该窗体,是函数,该窗体显示时其他窗体不能进行任何操作。
                      不关闭该窗体,代码不会往下执行。该函数有一个整型返回值,
                      0代表mrNone,1代表mrOK,2代表mrCancel}
    Hide;//隐藏当前显示的窗体

    窗体中子组件的焦点设置:

    FocusControl(Button1);//指定窗体上某个组件是否获得焦点,参数为所有可视化组件
    Edit1.SetFocus;//指定当前方法所在的组件获得焦点
    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      //该方法可以按照指定的Order顺序获取窗体中组件的焦点
      if key = #13 then
      Self.FindNextControl(Self.ActiveControl,True,True,False).SetFocus;
    end;

    对窗体中组件的查找:

    Control属性是一个组件数组,用来存储窗体中的所有子组件。

    property Controls[Index: Integer]: TControl read GetControl;

    Index参数为窗体中组件的索引值。

    示例:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      {试想如果一个一个设置窗体中同类子组件的可用不可用,会很麻烦}
      for i=0 to Self.ControlCount-1 do //子组件数量
      begin
        if Self.Controls[i] is TEdit then
          TEdit(Self.Controls[i]).Enabled:= False;
      end;
    end;

    TControl、TComponent可参考面对对象编程分类下。

    FindChildControl方法用于查找窗体中的子组件,并返回子组件的TControl类。

    function TWinControl.FindChildControl(const ControlName: string): TControl;

    FindComponent方法查找窗体中的子组件,并返回子组件的TComponent类

    function TComponent.FindComponent(const AName: string): TComponent;

    示例:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    const
      nameprefix = 'Edit';//用于创建的TEdit组件前缀
    begin
      button1.Enabled:= false;
      for i:= 0 to 10 do
      begin
        TEdit.Create(Self).Name:= nameprefix+ IntToStr(i);
        with TEdit(FindComponent(nameprefix+ IntToStr(i))) do
        begin
          if i mod 2 <> 0 then
          Left:= 30
          else
          Left:= 230;
          if (i mod 2 = 0) then
          Top:= (i-1)*20
          else
          top:= i*20;
          Parent:= Self;
        end;
      end;
    end;

    窗体坐标的转换:

    ClientToScreen方法用于将客户坐标转换成屏幕坐标

    function TControl.ClientToScreen(const Point: TPoint): TPoint;

    参数Point是一个结构类型,该结构类型制定了坐标X 和Y,该方法返回转换后的屏幕坐标值。

    ScreenToClient方法用于将屏幕坐标转换成客户坐标

    function TControl.ScreenToClient(const Point: TPoint): TPoint;

    参数Point是一个结构类型,该结构类型制定了坐标X 和Y,该方法返回转换后的客户坐标值。

    ClientToParent方法用于将客户坐标转换为父类的坐标

    function TControl.ClientToParent(const Point: TPoint; AParent: TWinControl): TPoint;

    参数AParent是要转换坐标的父类组件,默认值为空,此时Aparent为当前组件的直接父类。

     对1024x768的屏幕分辨度,假设我们的游戏窗口Clent大小为800x600

    X方向为0到1023个像素点,y方向为0到767个像素点

        屏幕的高 Screen,height=1024

        屏幕的高 Screen,width=768

    定义rect:TRect;

    用以下API函数得到窗口的对角位置

         GetWindowRect (h, rect); 窗口句柄为h,

    用以下API函数得到窗口Clent的对角位置

         GetClientRect(h, rect); 窗口句柄为h,

    这里的位置是相对全屏图的原点(0,0)。

          为了缩小找图的范围,提高速度,我们找图一般是先得到游戏窗口句柄,再把游戏窗口Clent区抓成bmp,然后在bmp里找,这样找到的位置p(x,y),是相对Clent区原点(0,0),还要换算成屏幕的位置。换算可以用API函数ClientToScreen(h, p);

    举例

       p.x:=0;

       p.y:=0;

       ClientToScreen(h, p); // (p.x, p.y)就是Clent区原点在屏幕上的位置

        知道了图片所在的屏幕位置,就可以用mouseMoveTo和moseLeftClick等来模拟动作了。

  • 相关阅读:
    二进制文件
    Python的特殊成员
    中标麒麟Linux7 如何关闭广播消息
    双重循环输出
    输出星期数
    九九乘法表
    打印菱形
    加法表
    求100以内所有偶数和
    猜大小
  • 原文地址:https://www.cnblogs.com/fansizhe/p/12764709.html
Copyright © 2020-2023  润新知