小编nor*_*aul的帖子

检测TWebBrowser文档中的活动元素何时更改

是否有任何可以挂钩的事件来检测网页上的活动元素何时发生变化?例如,当用户聚焦编辑框时.

我知道我可以检查计时器中的活动元素,但如果可能的话我宁愿避免这种情况.

delphi twebbrowser delphi-xe6

6
推荐指数
1
解决办法
1403
查看次数

如何向表单添加自定义属性

我试图将自定义属性添加到可以通过Delphi属性编辑器访问的基本表单.如果我只是像使用标准组件那样添加属性,则属性将不会显示在属性编辑器中.这是我试过的:

unit TestForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TfrmEasyIPBase = class(TForm)
  private
    FTest: String;
  public
    { Public declarations }
  published
    property Test: String read FTest write FTest;
  end;

var
  frmEasyIPBase: TfrmEasyIPBase;

implementation

{$R *.dfm}

end.
Run Code Online (Sandbox Code Playgroud)

我是否必须在某个时候注册该物业?

forms delphi properties

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

如何在Delphi中显示格式化(颜色,样式等)日志?

我需要在Delphi 2009中显示一个格式化的日志.格式化不必实现说html的所有功能,而是一个小的子集,例如颜色,字体样式等.

目前我正在使用TRichEdit和我自己的专有标签,例如这是蓝色的.由于无法直接访问RTF文本,因此将其与TRichEdit配合使用非常复杂.例如,要将文本着色为蓝色,我必须:

  1. 解析提取标签的附加文本,找出需要格式化的文本以及如何格式化.
  2. 选择文字.
  3. 应用格式.
  4. 取消选择文本并将选择移动到文本的末尾,为下一个附加做好准备.

这一切都是黑客和缓慢的.您是否知道使用TRichEdit或其他更适合工作的控件更好(更快)的方法?

我应该提一下,我考虑过在TWebBrowser中使用HTML.这种方法的问题是日志可以是1到100000行的任何地方.如果我使用普通的html查看器,我需要每次都设置整个文本而不是简单地附加它.

此外,当我向其添加行时,需要实时更新日志.不只是从文件中读取并显示一次.

delphi logging rtf delphi-2009

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

使用DefineProperties替换TPersistent属性,例如TFont

我正在更新组件中的一些属性.为了避免遗漏属性错误,我使用DefineProperties从流中读取旧属性.大多数属性工作正常,例如Integer,但我无法获得基于TPersistent的属性来工作.在读属性(TPersistent)在程序踏浪号是受保护的,不公开的,需要一个黑客来访问它.即使这样,也永远不会调用ReadFontProperty过程,并且会发生缺失的属性异常.

我如何阅读TFont属性?

这是我试图做的一些示例代码.

...

type
  TMyComponent = class(TComponent)
  strict private
    // Removed 
    //FIntegerProperty: Integer;
    //FFontProperty: TFont;

    // New
    FNewIntegerProperty: Integer;
    FNewFontProperty: TFont;

    procedure ReadIntegerProperty(Reader: TReader);
    procedure ReadFontProperty(Reader: TReader);
  protected
    procedure DefineProperties(Filer: TFiler); override;
  published
    // Removed properties
    //property IntegerProperty: Integer read FIntegerProperty write FIntegerProperty;
    //property FontProperty: TFont read FFontProperty write SetFontProperty;

    // New properties
    property NewIntegerProperty: Integer read FNewIntegerProperty write FNewIntegerProperty;
    property NewFontProperty: TFont read FNewFontProperty …
Run Code Online (Sandbox Code Playgroud)

delphi properties delphi-xe2

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

可以通过URI传递RemObjects SDK参数吗?

我们有一个RemObjects SDK HTTP服务器,它公开了许多服务和方法.是否可以通过URI调用方法,而不是将参数作为SOAP/JSON传递,例如

http://www.mywebservice.com/servicename/methodname?param1=xxx&param2=yyy
Run Code Online (Sandbox Code Playgroud)

delphi uri remobjects delphi-xe2

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

我在哪里设置 FireMonkey 移动应用程序中的应用程序“标题”属性?

目前,项目名称用作设备主屏幕图标下的标题(标题)。不幸的是,这不允许我使用空格。

VCL 应用程序具有应用程序“标题”属性。您可以从选项表单(应用程序 | 外观 | 标题)访问它。您设置的值显示为任务栏中的标题。

delphi firemonkey-fm3 delphi-xe5

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

FireMonkey TControl.MakeScreenshot在Mobile平台上生成一个尺寸不足的位图

我试图从TLayout控件生成位图.要做到这一点,我正在使用TControl.Makescreenshot功能.在Windows上测试应用程序时,一切都按预期工作:

视窗

但是,运行在iOS,安卓(包括模拟器和真实设备)的应用程序时,结果是这样的(图像周围的红色边框绘制只是位图的边界内):

iOS截图

在移动版本中,图像是一半大小并且边框被裁剪.

这是我使用的代码:

(.PAS)

unit Unit15;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Objects, FMX.Layouts, FMX.Edit;

type
  TForm15 = class(TForm)
    Layout1: TLayout;
    Image1: TImage;
    Button1: TButton;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    Switch1: TSwitch;
    ArcDial1: TArcDial;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form15: TForm15;

implementation

{$R *.fmx}

procedure TForm15.Button1Click(Sender: TObject);
begin
  Image1.Bitmap := Layout1.MakeScreenshot;
  Image1.Bitmap.Canvas.BeginScene;
  try
    Image1.Bitmap.Canvas.Stroke.Color := TAlphaColorRec.Red; …
Run Code Online (Sandbox Code Playgroud)

delphi android ios firemonkey-fm3 delphi-xe5

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

JAVA和Delphi中的数学函数给出了不同的结果

我正在尝试将Open Street Maps纬度/经度转换为像素位置.我在java中找到了这个例子.当我将代码转换为Delphi时,X结果是正确的,但是Y结果略有不同.

Java代码:

double lon = -89.08805;
double lat = 30.6393;
double zoom = 6; // 6.5156731549786215 would be possible too

double lon_rad = Math.toRadians(lon);
double lat_rad = Math.toRadians(lat);
double n = Math.pow(2.0, zoom);

double tileX = ((lon + 180) / 360) * n;
double tileY = (1 - (Math.log(Math.tan(lat_rad) + 1.0/Math.cos(lat_rad)) / Math.PI)) * n / 2.0;

System.out.println("tileX = "+tileX+" tileY = "+tileY);
Run Code Online (Sandbox Code Playgroud)

德尔福代码:

function LatLngToTilePixels(Lat, Lng: Double; ZoomLevel: Integer): TPointF;
var
  lon_rad, lat_rad, n: Double; …
Run Code Online (Sandbox Code Playgroud)

java delphi math openstreetmap

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

如何将TObject转换为TObjectList <T>?

我有一个过程需要将一个TObjects 数组插入到列表中.该列表可以是任何支持的类型,例如TObjectList,TObjectList<T>,TROArray等.

该过程如下所示:

type
  TObjectArray = Array of TObject;

...

procedure TMyClass.DoAssignObjectList(const ObjectArray: TObjectArray;
  const DstList: TObject);
var
  i: Integer;
begin
  if DstList is TObjectList then
  begin
    for i := 0 to pred(TObjectList(DstList).Count) do
      TObjectList(DstList).Add(ObjectArray[i]);
  end else
  if DstList is TObjectList<T> then // Obviously this doesn't work
  begin
    for i := 0 to pred(TObjectList<T>(DstList).Count) do
      TObjectList<T>(DstList).Add(ObjectArray[i]);
  end
  else
  begin
    raise Exception.CreateFmt(StrNoDoAssignORMObject, [DstList.ClassName]);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

如何检查对象是否为a TObjectList<T>,然后向其中添加数组元素?

delphi generics rtti delphi-xe7

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

如何更改 Google Cloud Windows Server 2016 虚拟机的时区?

当我尝试在 Google Cloud Platform 上更改 Windows Server 2016 虚拟机的时区时,出现权限错误。我的用户拥有完整的管理员权限。是否可以?

在此处输入图片说明

google-compute-engine google-cloud-platform windows-server-2016

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