标签: delphi-xe8

在 TChromium(Chromium 嵌入式)中使用打印为 PDF 文件?

在带有 TChromium (DCEF3) 的 Delphi XE7/XE8 中,我需要以编程方式将当前网页打印(即保存)到 PDF 文档文件(可选地无需用户交互)到预定义的本地路径。目前,我只能通过使用自定义 PDF 打印机驱动程序并以编程方式打开打印机对话框来间接执行此操作:

procedure TMainForm.btnPrintToPDF(Sender: TObject);
begin
  // open the printer dialog:
  crm.Browser.Host.Print;
end;
Run Code Online (Sandbox Code Playgroud)

然而,这有两个缺点:

  1. 我不能假设最终用户安装了 PDF 打印机驱动程序
  2. 最终用户必须在文件对话框中选择文件路径,而文件路径应该是预定义的。

但Chrome有一个内置的PDF打印机驱动程序和打印预览,可以通过键盘快捷键CTRL+P显示。但是,当我在guiclient TChromium 演示应用程序中按 CTRL+P 时,什么也没有发生,也没有像 Chrome 中那样显示打印预览。

那么如何在 TChromium 中调用 PDF 打印预览,并可能使用预设输出路径(不显示文件对话框)?

delphi pdf-generation chromium-embedded delphi-xe8

5
推荐指数
0
解决办法
1910
查看次数

Delphi XE8:TEdit TextHint在接收焦点时消失

基本上,我希望我的TEdits的TextHint在输入第一个字符时消失,而不是在它们获得焦点时消失,如此Microsoft页面上的编辑:登录到您的Microsoft帐户.有人可以告诉我如何实现这一目标吗?

先感谢您.

delphi focus editcontrol delphi-xe8

5
推荐指数
2
解决办法
1054
查看次数

禁用Getit时,x64调试失败

我总是尝试禁用未使用的软件包以节省一些IDE内存.所以在XE8u1中我尝试通过在注册表中将"$(BDS)\ Bin\GetIt220.bpl"重命名为"_GetIt"来禁用GetIt(我从不使用它).之后GetIt按预期从工具中消失,但出现奇怪的问题:当我尝试调试x64应用程序时,我得到"断开连接的会话"窗口并且IDE挂起.x86调试按预期工作.所有其他包都启用为dafault.也许有人知道GetIt如何触及x64调试器?我很好奇.

delphi delphi-xe8

5
推荐指数
1
解决办法
210
查看次数

Delphi REST mac内存泄漏

我目前正在寻找一种方法来解决REST客户端的Mac实现中的明显内存泄漏问题.生成内存泄漏的代码如下(运行XE8,更新1):

program mac_REST_leak_test;
{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils, REST.Client, REST.Types, IPPeerClient;

var
   request : TRestRequest;
   ii, iMax : integer;
begin
   iMax := 1; 
   for ii := 0 to iMax do
   begin
      request := TRestRequest.Create(nil);
      // Fake Online REST API for Testing and Prototyping 
      request.Client := TRestClient.Create('http://jsonplaceholder.typicode.com/');
      request.Method := rmPOST;
      request.Execute();

      request.Client.Free();
      request.Free();
   end;
end.
Run Code Online (Sandbox Code Playgroud)

这是演示泄漏的最小代码块.从本质上讲,我有一个同步服务,每隔一段时间就会发出一次REST请求.

当我在Windows上运行它时,使用MadExcept,没有发现泄漏.检查ProcessMonitor中的运行进程表明没有增加使用的内存量.

但是,在Mac上运行时,活动监视器会显示分配给应用程序的内存继续上升.此外,当使用Instruments运行时,似乎存在泄漏处理mac上的几个URL和HTTP类.

有人知道如何解决这个漏洞吗?

(顺便说一句,确切知道泄漏来自Mac的确切位置真的很有帮助,但列出的唯一Delphi类是TMethodImplementationIntercept.我相信这是因为Delphi没有生成一个适用于Mac的dSYM文件.如果有人知道解决方法,那也很棒!)

更新 通过iMax从1到10 变化并比较FastMM4输出,似乎泄漏是在类中Macapi.ObjectiveC.TConvObjID.XForm.与1次迭代相比,10次迭代输出包含9次泄漏,其作为堆栈跟踪.我已将此报告给Embarcadero作为RSP-12242.

delphi rest macos memory-leaks delphi-xe8

5
推荐指数
1
解决办法
235
查看次数

在列表框画布上绘制unicode文本太慢了

我正尝试使用以下格式从列表框中的RSS显示新闻,如下图所示.屏幕截图中的应用程序是通过设置列表框样式在firemonkey中开发的.我需要在我的VCL应用程序中显示相同内容.

在此输入图像描述

这种布局的要求是:

  • 新闻标题应该是粗体文字
  • 简短描述应位于底部,如果它不适合单行,则应进行包装(如图所示); font-style应该是正常的
  • 每个新闻项都应该有一个图像

我的代码到目前为止:

procedure TfrmDatePicker.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
  R: TRect;
begin
  ListBox1.Canvas.Font.Color := clBlack;
  ListBox1.Canvas.Font.Style := [fsBold];

  ListBox1.Canvas.Font.Size := 9;

  if Odd(Index) then ListBox1.Canvas.Brush.Color := clWhite
  else ListBox1.Canvas.Brush.Color := clBtnFace;

  ListBox1.Canvas.FillRect (Rect);
  ListBox1.Canvas.Pen.Color := clHighlight;

  if(odSelected in State) then
  begin
      ListBox1.Canvas.Font.Color := clHighlightText;
      ListBox1.Canvas.Brush.Color := clHighlight;
      ListBox1.Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
      if(odFocused in State) then DrawFocusRect(ListBox1.Canvas.Handle, Rect);
  end;

  ImageList1.Draw(ListBox1.Canvas, Rect.Left + 2,
          Rect.top + (ListBox1.ItemHeight - ImageList1.Height) div 2, Index, true);


  ListBox1.Canvas.TextOut(Rect.Left …
Run Code Online (Sandbox Code Playgroud)

delphi winapi drawtext tlistbox delphi-xe8

5
推荐指数
1
解决办法
698
查看次数

如何用Move连接多个字符串?

如何使用Move连接字符串数组.我试过这个,但我无法想象如何让Move操作正常工作.

program Project2;

{$POINTERMATH ON}

procedure Concat(var S: String; const A: Array of String);
var
  I, J: Integer;
  Len: Integer;
begin
  Len := 0;
  for I := 0 to High(A) do
  Len := Len + Length(A[I]);

  SetLength(S, Length(S) + Len);

  for I := 0 to High(A) do
  Move(PWideChar(A[I])[0], S[High(S)], Length(A[I]) * SizeOf(WideChar));
end;

var
  S: String;
begin
  S := 'test';
  Concat(S, ['test', 'test2', 'test3']);
end.
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe8

5
推荐指数
1
解决办法
360
查看次数

Firemonkey:在带有 BorderStyle 的表单中使用时未显示 TWebBrowser 无

我在Delphi XE8中开发Firemonkey应用,发现如下情况:

我需要在一个小表单中显示一个小网页,其中只有一个 TWebBrowser 控件,Align:=Client 和 Form BorderStyle = None 但由于某种原因,在 Windows 中,表单显示为灰色,并且 TWebBrowser 未显示,如您在图片中看到的那样。在 Mac OS 中按预期工作。

如果我禁用了像 Minimize、Maximize 或 SystemMenu 这样的 BorderIcons 之一,也会发生这种情况。我已经尝试过 Delphi 10 和同样的问题。我曾尝试使用 TMS WebBrowser for Firemonkey (TMSFMXWebBrowser) 的试用版和同样的问题。

在 Win32 中使用 TWebBrowser 和 FormStyle = Single 的表单 在此处输入图片说明

在 Win32 中使用 TWebBrowser 和 FormStyle = None 的表单 在此处输入图片说明

在 Win32 中使用 TWebBrowser 和 FormStyle = Single 和 Maximize Button = False 的表单 在此处输入图片说明

在 Mac OS 中使用 TWebBrowser 和 FormStyle = Single 形成表单 在此处输入图片说明

有人知道原因以及我如何解决这个问题吗?我真的很想以一种没有任何边框/图标的形式显示网页,就像在 Mac OS 中一样。

delphi firemonkey delphi-xe8 delphi-10-seattle

5
推荐指数
1
解决办法
618
查看次数

TSpeedbutton 中的图像与 TImageList

我尝试使用 和 来创建TToolbar一个TActionList工具TSpeedbuttonTImageList
我使用了32px的方形图像,但是当我在TSpeedButton中通过ImageIndex选择图像时,图像大小小于32px,我认为是16px。

如何TSpeedButtons使用来设置图像的大小TImageList

这是一个 MVCE:

unit Unit50;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  System.Actions, FMX.ActnList, FMX.Controls.Presentation, FMX.StdCtrls,
  System.ImageList, FMX.ImgList;

type
  TForm50 = class(TForm)
    ActionList1: TActionList;
    ImageList1: TImageList;
    SpeedButton1: TSpeedButton;
    Action1: TAction;
  end;

var
  Form50: TForm50;

implementation
{$R *.fmx}
end.
Run Code Online (Sandbox Code Playgroud)

设计制造:

object Form50: TForm50
  Left = 0
  Top = 0
  Caption = 'Form50'
  ClientHeight = 480
  ClientWidth = 640
  FormFactor.Width = …
Run Code Online (Sandbox Code Playgroud)

delphi timagelist firemonkey delphi-xe8

5
推荐指数
1
解决办法
4979
查看次数

如何在 iOS 和 Android 上获取应用程序恢复状态?

当应用程序在iOSAndroid上恢复时,是否可以从代码角度检查某些内容?

例如,当应用程序最小化并恢复时(应用程序仍在设备后台运行)。

delphi android ios delphi-xe8

5
推荐指数
1
解决办法
2070
查看次数

如何链接包含WinAPI的C代码?

如何链接包含 WinAPI 调用的 C 代码?链接时出现以下错误:

[dcc32错误] Project1.dpr(16): E2065 不满足转发或外部声明: '__imp__GetCurrentThreadId@0'

考虑以下示例。

德尔福:

program Project1;

uses
  Windows;

{$L C:\Source.obj}

function Test: DWORD; cdecl; external name '_Test';

begin
  WriteLn(Test);
end.
Run Code Online (Sandbox Code Playgroud)

C:

program Project1;

uses
  Windows;

{$L C:\Source.obj}

function Test: DWORD; cdecl; external name '_Test';

begin
  WriteLn(Test);
end.
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe8

4
推荐指数
1
解决办法
544
查看次数