-2
我知道我會爲此投票。但我仍然發佈這個問題如何轉換delphi代碼從c + +代碼
任何一個請在delphi中轉換下面的兩個函數代碼。
#include <windows.h>
#include "multimon.h"
#define MONITOR_CENTER 0x0001 // center rect to monitor
#define MONITOR_CLIP 0x0000 // clip rect to monitor
#define MONITOR_WORKAREA 0x0002 // use monitor work area
#define MONITOR_AREA 0x0000 // use monitor entire area
//
// ClipOrCenterRectToMonitor
//
// The most common problem apps have when running on a
// multimonitor system is that they "clip" or "pin" windows
// based on the SM_CXSCREEN and SM_CYSCREEN system metrics.
// Because of app compatibility reasons these system metrics
// return the size of the primary monitor.
//
// This shows how you use the multi-monitor functions
// to do the same thing.
void ClipOrCenterRectToMonitor(LPRECT prc, UINT flags)
{
HMONITOR hMonitor;
MONITORINFO mi;
RECT rc;
int w = prc->right - prc->left;
int h = prc->bottom - prc->top;
//
// get the nearest monitor to the passed rect.
//
hMonitor = MonitorFromRect(prc, MONITOR_DEFAULTTONEAREST);
//
// get the work area or entire monitor rect.
//
mi.cbSize = sizeof(mi);
GetMonitorInfo(hMonitor, &mi);
if (flags & MONITOR_WORKAREA)
rc = mi.rcWork;
else
rc = mi.rcMonitor;
//
// center or clip the passed rect to the monitor rect
//
if (flags & MONITOR_CENTER)
{
prc->left = rc.left + (rc.right - rc.left - w)/2;
prc->top = rc.top + (rc.bottom - rc.top - h)/2;
prc->right = prc->left + w;
prc->bottom = prc->top + h;
}
else
{
prc->left = max(rc.left, min(rc.right-w, prc->left));
prc->top = max(rc.top, min(rc.bottom-h, prc->top));
prc->right = prc->left + w;
prc->bottom = prc->top + h;
}
}
void ClipOrCenterWindowToMonitor(HWND hwnd, UINT flags)
{
RECT rc;
GetWindowRect(hwnd, &rc);
ClipOrCenterRectToMonitor(&rc, flags);
SetWindowPos(hwnd, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
流動我想:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure ClipOrCenterRectToMonitor(prc:Integer ; flags:UINT);
type
HMONITOR = type THandle;
var
// hMonitor : HMONITOR ;
mi : MONITORINFO ;
rc : RECT ;
w : Integer;
h : Integer;
begin
w := prc->right - prc->left;
h := prc->bottom - prc->top;
//
// get the nearest monitor to the passed rect.
//
hMonitor := MonitorFromRect(prc, MONITOR_DEFAULTTONEAREST);
//
// get the work area or entire monitor rect.
//
mi.cbSize := sizeof(mi);
GetMonitorInfo(hMonitor, &mi);
if (flags & MONITOR_WORKAREA) then
rc := mi.rcWork;
else
rc := mi.rcMonitor;
//
// center or clip the passed rect to the monitor rect
//
if (flags & MONITOR_CENTER) then
begin
prc->left := rc.left + (rc.right - rc.left - w)/2;
prc->top := rc.top + (rc.bottom - rc.top - h)/2;
prc->right := prc->left + w;
prc->bottom := prc->top + h;
end;
else
begin
prc->left := max(rc.left, min(rc.right-w, prc->left));
prc->top := max(rc.top, min(rc.bottom-h, prc->top));
prc->right := prc->left + w;
prc->bottom := prc->top + h;
end;
end;
procedure ClipOrCenterWindowToMonitor(hwand:HWND; flags:UINT);
var
rd:RECT ;
begin
GetWindowRect(hwnd, &rc);
ClipOrCenterRectToMonitor(&rc, flags);
SetWindowPos(hwnd, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
end;
end.
,但這是不完整的。請任何人這樣做。
這不是SO的工作原理。這不是代碼翻譯服務。 –