1. 程式人生 > >獲取視窗矩形的四種方法: GetClientRect、ClientRect、GetWindowRect、BoundsRect

獲取視窗矩形的四種方法: GetClientRect、ClientRect、GetWindowRect、BoundsRect

其中 GetClientRect、ClientRect 獲取的是視窗的客戶區矩形;

GetWindowRect、BoundsRect 是獲取視窗矩形;

另外, 還有一個 Windows.GetClientRect(使用方法同 GetWindowRect, 它們都是 API 函式), 
這裡使用的 GetClientRect 是 Forms.GetClientRect.
本例效果圖:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)     procedure FormCreate(Sender: TObject);     procedure FormPaint(Sender: TObject);     procedure FormResize(Sender: TObject);   end; var   Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin   Color := clWhite; end; procedure TForm1.FormPaint(Sender: TObject); const
  str = 'L:%d; T:%d; R:%d; B:%d - '; var   R1,R2,R3,R4: TRect;   buf: array[Byte] of Char;   x,y,h: Integer; begin   R1 := GetClientRect;   R2 := Self.ClientRect;   GetWindowRect(Handle, R3);   R4 := Self.BoundsRect;   x := 10;   y := 10;   h := 10;   Randomize;   Canvas.Font.Color := Random($FFFFFF
);   wvsprintf(buf, str + 'GetClientRect', @R1);   Canvas.TextOut(x, y, buf);   y := y + h + Canvas.TextHeight(buf);   wvsprintf(buf, str + 'Self.ClientRect', @R2);   Canvas.TextOut(x, y, buf);   y := y + h + Canvas.TextHeight(buf);   Canvas.Font.Color := Random($FFFFFF);   wvsprintf(buf, str + 'GetWindowRect', @R3);   Canvas.TextOut(x, y, buf);   y := y + h + Canvas.TextHeight(buf);   wvsprintf(buf, str + 'Self.BoundsRect', @R4);   Canvas.TextOut(x, y, buf); end; procedure TForm1.FormResize(Sender: TObject); begin   Repaint; end; end.