显示缩放 >100% 时图元文件中的绘制控制

问题描述

我需要将 GridControl 渲染到 Windows 图元文件中。如果显示设置在没有缩放的情况下工作,这也有效。 但是,如果我将显示设置设置为 >100% 的比例,则生成的图元文件会大于控件,因此会出现边框。

应用程序清单包含以下信息,我不得更改这些信息,否则会出现各种其他显示问题。 (GetProcessDpiAwareness 返回 PROCESS_DPI_UNAWARE)

    <windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </windowsSettings>

我的示例代码(在 Delphi 中):

function TForm2.CalcedRect(const p_Grid: TAdvStringGrid): TRect;
var
  i         : Integer;
  FullWidth : Integer;
  FullHeight: Integer;
begin
  FullWidth := 0;
  FullHeight := 0;
  for i := 0 to p_Grid.ColCount - 1 do
    Inc(FullWidth,p_Grid.ColWidths[i]);
  for i := 0 to p_Grid.RowCount - 1 do
    Inc(FullHeight,p_Grid.RowHeights[i]);
  Result := Rect(0,FullWidth,FullHeight);
end;

procedure TForm2.PrepareMetafile();
var
  mf           : TMetafile;
  mfc          : TMetafileCanvas;
  h,w         : integer;
  drawRect     : TRect;
begin
  mf := TMetafile.Create();
  try
    drawRect := CalcedRect(grid1); // really used range
    //drawRect := grid1.ClientRect();
    w := drawRect.Width;
    h := drawRect.Height;

    mf.SetSize(w,h);
    mfc := TMetafileCanvas.CreateWithComment(mf,HDC(0),ClassName,'PrepareMetafile');
    grid1.PaintTo(mfc,0);
    FreeAndNil(mfc);
    mf.SavetoFile('Grid1.emf');

    StatusBar1.Panels[0].Text := Format('Grid wxh=%dx%d',[w,h]);
    StatusBar1.Panels[1].Text := Format('Metafile wxh=%dx%d',[mf.Width,mf.Height]);
    //--> Size of Metafile is controlsize * scaling factor
  except
    FreeAndNil(mf);
  end;
end;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...