是否有任何可以挂钩的事件来检测网页上的活动元素何时发生变化?例如,当用户聚焦编辑框时.
我知道我可以检查计时器中的活动元素,但如果可能的话我宁愿避免这种情况.
我试图将自定义属性添加到可以通过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)
我是否必须在某个时候注册该物业?
我需要在Delphi 2009中显示一个格式化的日志.格式化不必实现说html的所有功能,而是一个小的子集,例如颜色,字体样式等.
目前我正在使用TRichEdit和我自己的专有标签,例如这是蓝色的.由于无法直接访问RTF文本,因此将其与TRichEdit配合使用非常复杂.例如,要将文本着色为蓝色,我必须:
这一切都是黑客和缓慢的.您是否知道使用TRichEdit或其他更适合工作的控件更好(更快)的方法?
我应该提一下,我考虑过在TWebBrowser中使用HTML.这种方法的问题是日志可以是1到100000行的任何地方.如果我使用普通的html查看器,我需要每次都设置整个文本而不是简单地附加它.
此外,当我向其添加行时,需要实时更新日志.不只是从文件中读取并显示一次.
我正在更新组件中的一些属性.为了避免遗漏属性错误,我使用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) 我们有一个RemObjects SDK HTTP服务器,它公开了许多服务和方法.是否可以通过URI调用方法,而不是将参数作为SOAP/JSON传递,例如
http://www.mywebservice.com/servicename/methodname?param1=xxx¶m2=yyy
Run Code Online (Sandbox Code Playgroud) 目前,项目名称用作设备主屏幕图标下的标题(标题)。不幸的是,这不允许我使用空格。
VCL 应用程序具有应用程序“标题”属性。您可以从选项表单(应用程序 | 外观 | 标题)访问它。您设置的值显示为任务栏中的标题。
我试图从TLayout控件生成位图.要做到这一点,我正在使用TControl.Makescreenshot功能.在Windows上测试应用程序时,一切都按预期工作:

但是,运行在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) 我正在尝试将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) 我有一个过程需要将一个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>,然后向其中添加数组元素?
google-compute-engine google-cloud-platform windows-server-2016
delphi ×9
delphi-xe2 ×2
delphi-xe5 ×2
properties ×2
android ×1
delphi-2009 ×1
delphi-xe6 ×1
delphi-xe7 ×1
forms ×1
generics ×1
ios ×1
java ×1
logging ×1
math ×1
remobjects ×1
rtf ×1
rtti ×1
twebbrowser ×1
uri ×1