起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 162|回复: 4

【搞定】关于TRect的获取值的问题(API函数)**

[复制链接]
发表于 2007-6-2 11:23:46 | 显示全部楼层 |阅读模式
我在程序中需要获取系统工作区,即要执行API函数 SystemParametersInfo。

我的做法是:
  SystemParametersInfo 中的一个参数是TRect类型。
X3系统中是不能中指针的。就必须定义一个类来替换TRect。

定义如下:
TWorkArea=class(TObject)
     Left,Right,Bottom,Top: Longint;
//     Left,Top,Right,Bottom: Longint;   本来Delphi 中 TRect 的规定顺序是这样,但在本环境中却不一致,先这样改到。
  end;

以下为调用API函数过程

var
   WorkArea: TWorkArea;
begin
   WorkArea:=TWorkArea.Create;
   Borland.Delphi.Windows.SystemParametersInfo(Borland.Delphi.Windows.SPI_GETWORKAREA,0,WorkArea,0);

如果类按Delphi 中的顺序定义。
能够获取到 工作区域的值。但是 顺序却不一致,比如
WorkArea.Top得到的是Right的值。

我想问一下,像类似这种情况,有否好的方法来来正确地获得对象的属性值。
(这个程序中我是根据调试情况来修改的)。

或则用其他的方法来执行这个API函数。。
谢谢!
回复

使用道具 举报

发表于 2007-6-2 15:05:40 | 显示全部楼层
已经有这个类型了,你可以直接使用
NameSpace: Business.System
--------------------------------------------------------------------------------
TRect = record
  Left: Longint;
  Top: Longint;
  Right: Longint;
  Bottom: Longint;
  TopLeft: TPoint;
  BottomRight: TPoint;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-4 08:58:20 | 显示全部楼层
如何用,能够给个Demo.
我在Delphi中是这样用的。
var
   WorkArea: TRect;
begin
   SystemParametersInfo(SPI_GETWORKAREA,0,@WorkArea,0);

在X3中不能用@。是吗?
那如何处理。
在X3中这样无法取值。
var
   WorkArea: TRect;
begin

   Borland.Delphi.Windows.SystemParametersInfo(Borland.Delphi.Windows.SPI_GETWORKAREA,0,WorkArea as TObject,0);
   而
   Borland.Delphi.Windows.SystemParametersInfo(Borland.Delphi.Windows.SPI_GETWORKAREA,0,WorkArea ,0);编译不过。类型不 兼容。Tobject and TRect .

我还是没有清楚。麻烦说仔细点。
谢谢。!
回复 支持 反对

使用道具 举报

发表于 2007-6-4 09:06:25 | 显示全部楼层
不用调API函数,直接就有一个对象可以得到
Business.Forms.Forms.Screen

NameSpace: Business.Forms
--------------------------------------------------------------------------------
TScreen = class(Business.System.TComponent)
public
  constructor create(AOwner: Business.System.TComponent);
  procedure Destroy; override;
  procedure DisableAlign;
  procedure EnableAlign;
  function MonitorFromPoint(Point: Business.System.TPoint; MonitorDefault: TMonitorDefaultTo): TMonitor;
  function MonitorFromRect(Rect: Business.System.TRect; MonitorDefault: TMonitorDefaultTo): TMonitor;
  function MonitorFromWindow(Handle: Longword; MonitorDefault: TMonitorDefaultTo): TMonitor;
  procedure Realign;
  procedure ResetFonts;
  property ActiveControl: TWinControl; readonly;
  property ActiveCustomForm: TCustomForm; readonly;
  property ActiveForm: TFormControl; readonly;
  property Cursor: Smallint;
  property Cursors[Longint]: Longword;
  property CustomFormCount: Longint; readonly;
  property CustomForms[Longint]: TCustomForm; readonly;
  property DataModuleCount: Longint;
  property DataModules[Longint]: Business.System.TDataModule;
  property DefaultIme: string;
  property DefaultKbLayout: Longword;
  property DesktopHeight: Longint;
  property DesktopLeft: Longint;
  property DesktopRect: Business.System.TRect;
  property DesktopTop: Longint;
  property DesktopWidth: Longint;
  property Fonts: Business.System.TStrings;
  property FormCount: Longint;
  property Forms[Longint]: TFormControl;
  property Height: Longint;
  property HintFont: Business.System.TFont;
  property IconFont: Business.System.TFont;
  property Imes: Business.System.TStrings;
  property MenuFont: Business.System.TFont;
  property MonitorCount: Longint;
  property Monitors[Longint]: TMonitor;
  property OnActiveControlChange: Business.System.TNotifyEvent;
  property OnActiveFormChange: Business.System.TNotifyEvent;
  property PixelsPerInch: Longint;
  property Width: Longint;
  property WorkAreaHeight: Longint;
  property WorkAreaLeft: Longint;
  property WorkAreaRect: Business.System.TRect;
  property WorkAreaTop: Longint;
  property WorkAreaWidth: Longint;

end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-4 12:56:58 | 显示全部楼层
搞定了,多谢哈。!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-11 06:00 , Processed in 0.037014 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表