在Firemonkey 11.1中,我有两名员工使用MacOS.
第一个
- Mac OS Catalina带笔记本电脑1280x800
- 外部显示器1920x1080
第二个
- Mac OS Monterey带笔记本电脑1440x900
- 外部显示器1920x1080
在第一个屏幕上,我可以拍摄笔记本电脑屏幕的截图,但不能拍摄外部显示屏.而在第二种情况下,情况正好相反.
我拍摄了这样的截图,并try 了一些解决方法:
LImage := CGDisplayCreateImageForRect(FID, RectToCGTrect(ACaptureRect));
if not Assigned(LImage) then
LImage := CGDisplayCreateImage(FID);
if not Assigned(LImage) then
begin
LBounds := CGDisplayBounds(FID);
LImage := CGDisplayCreateImageForRect(FID, LBounds);
end;
if not Assigned(LImage) then
begin
LBounds := CGDisplayBounds(FID);
LBounds.origin.x := 0;
LBounds.origin.y := 0;
LImage := CGDisplayCreateImageForRect(FID, LBounds);
end;
On first workstation :
第一屏
FID = 0
ACaptureRect = 0, 0, 1280, 800
- 前
CGDisplayCreateImageForRect
张的截图还行
第二屏
FID = 1
ACaptureRect = 1280, 0, 1920, 1080
-
CGDisplayCreateImageForRect
次失败 -
CGDisplayCreateImage(1)
次失败 -
CGDisplayBounds
返回0,0,0,0失败 -
CGDisplayBounds
#2也失败了
全桌面(屏幕1+2)
On second workstation :
第一屏
FID = 0
ACaptureRect = 0, 0, 1440, 900
-
CGDisplayCreateImageForRect
次失败 -
CGDisplayCreateImage(0)
次失败 -
CGDisplayBounds
未能返回0、0、1440, 900 -
CGDisplayBounds
#2也失败了 0, 0, 1440, 900
第二屏
FID = 1
ACaptureRect = 1440, 0, 1920, 1080
- 前
CGDisplayCreateImageForRect
张的截图还行
全桌面(屏幕1+2)
第一台 workstation 上只有笔记本电脑屏幕工作,第二台笔记本电脑上只有外部显示器工作,这是不符合逻辑的.
两者都在同一屏幕上打开了应用程序(在笔记本电脑上)
不同的是,在第二台笔记本电脑(蒙特利)上,即使我不能使用笔记本电脑屏幕,CGDisplayBounds
也会返回正确的大小.
我不知道该怎么做
编辑:在第二台 workstation 的同一台笔记本电脑上,但在BigSur版本(不是Monterey)中,一切都很好!太疯狂了