在带有 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)
然而,这有两个缺点:
但Chrome有一个内置的PDF打印机驱动程序和打印预览,可以通过键盘快捷键CTRL+P显示。但是,当我在guiclient TChromium 演示应用程序中按 CTRL+P 时,什么也没有发生,也没有像 Chrome 中那样显示打印预览。
那么如何在 TChromium 中调用 PDF 打印预览,并可能使用预设输出路径(不显示文件对话框)?
基本上,我希望我的TEdits的TextHint在输入第一个字符时消失,而不是在它们获得焦点时消失,如此Microsoft页面上的编辑:登录到您的Microsoft帐户.有人可以告诉我如何实现这一目标吗?
先感谢您.
我总是尝试禁用未使用的软件包以节省一些IDE内存.所以在XE8u1中我尝试通过在注册表中将"$(BDS)\ Bin\GetIt220.bpl"重命名为"_GetIt"来禁用GetIt(我从不使用它).之后GetIt按预期从工具中消失,但出现奇怪的问题:当我尝试调试x64应用程序时,我得到"断开连接的会话"窗口并且IDE挂起.x86调试按预期工作.所有其他包都启用为dafault.也许有人知道GetIt如何触及x64调试器?我很好奇.
我目前正在寻找一种方法来解决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.
我正尝试使用以下格式从列表框中的RSS显示新闻,如下图所示.屏幕截图中的应用程序是通过设置列表框样式在firemonkey中开发的.我需要在我的VCL应用程序中显示相同内容.
这种布局的要求是:
我的代码到目前为止:
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) 如何使用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 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 中一样。
我尝试使用 和 来创建TToolbar一个TActionList工具TSpeedbutton栏TImageList。
我使用了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) 当应用程序在iOS和Android上恢复时,是否可以从代码角度检查某些内容?
例如,当应用程序最小化并恢复时(应用程序仍在设备后台运行)。
如何链接包含 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 ×10
delphi-xe8 ×10
firemonkey ×2
android ×1
drawtext ×1
editcontrol ×1
focus ×1
ios ×1
macos ×1
memory-leaks ×1
rest ×1
timagelist ×1
tlistbox ×1
winapi ×1