我希望在uses子句中有不同的单元列表,具体取决于FMX或VCL的编译.在下面的代码中,我尝试测试FireMonkeyVersion哪个在FMX项目中工作(label1.Text是'FMX').当我将$ IF语句移动到uses子句中时,我收到一条错误消息([dcc32 Error] fmx_text.pas(7): E2026 Constant expression expected).有没有办法获得所需的条件编译?
unit fmx_text;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
System.Variants, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Types;
{$IF FireMonkeyVersion >= 16}
{$DEFINE HAS_FMX}
{$ELSE}
{$DEFINE HAS_VCL}
{$IFEND}
type
TForm2 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.fmx}
procedure TForm2.FormCreate(Sender: TObject);
begin
label1.Text := 'Undefined';
{$IFDEF HAS_FMX}
label1.Text := 'FMX'; …Run Code Online (Sandbox Code Playgroud) 我正在尝试拟合Keras模型,并使用历史对象和评估函数来查看模型的执行情况.计算的代码如下:
optimizer = Adam (lr=learning_rate)
model.compile(loss='categorical_crossentropy',
optimizer=optimizer,
metrics=['accuracy')
for epoch in range (start_epochs, start_epochs + epochs):
history = model.fit(X_train, y_train, verbose=0, epochs=1,
batch_size=batch_size,
validation_data=(X_val, y_val))
print (history.history)
score = model.evaluate(X_train, y_train, verbose=0)
print ('Training accuracy', model.metrics_names, score)
score = model.evaluate(X_val, y_val, verbose=0)
print ('Validation accuracy', model.metrics_names, score)
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,训练集的准确性和损失结果在历史和评估之间有所不同.由于验证集的结果是相同的,所以我的身边似乎有些失误,但我找不到任何东西.我给出了下面前四个时期的输出.我得到了相同的度量'mse'的结果:训练集不同,测试集相等.有人有什么想法吗?
{'val_loss': [13.354823187591416], 'loss': [2.7036468725265874], 'val_acc': [0.11738484422572477], 'acc': [0.21768202061048531]}
Training accuracy ['loss', 'acc'] [13.265716915499048, 0.1270430906536911]
Validation accuracy ['loss', 'acc'] [13.354821096026349, 0.11738484398216939]
{'val_loss': [11.733116257598105], 'loss': [1.8158155931229045], 'val_acc': [0.26745913783295899], 'acc': [0.34522040671733062]}
Training accuracy ['loss', 'acc'] …Run Code Online (Sandbox Code Playgroud) 我想在Delphi中对一些位图进行反别名.文件从文件加载,分配给图像,processed(apply_kernel),结果分配给另一个图像.在Delphi中,左/下像素确定透明颜色Image.Transparent = True.我只使用32位位图.
dump ('henon.bmp');
Image3.Picture.LoadFromFile ('henon.bmp');
apply_kernel (Image3.Picture.Bitmap, bitmap, kernel);
Image4.Picture.Bitmap := bitmap;
Image4.Picture.Bitmap.SaveToFile ('alias.bmp');
dump ('alias.bmp');
Run Code Online (Sandbox Code Playgroud)
这适用于分配给Image3的加载位图,但不适用于分配给Image4的计算位图.左/下的颜色保持不变(clWhite).为了理解发生了什么,我将位图转储到文件,每种颜色分开(参见下面的转储).我确实检查了图像的透明度,自动调整是中心和拉伸,位图是32x32,图像也是.我也试过设置TransparentColor := clWhite,但没有用.我必须犯一个非常愚蠢的错误,但找不到它.有人能帮帮我吗?
编辑 托宾斯提醒我,我已经忘记了保留字节.在某些位置设置为128,实际上恰好是零的位置(请参阅更新的转储).我做了几件事,最终得到了一个透明的位图: - 简单地将所有保留字节清零. - 更多的东西都没有用,直到 - 使用分配作品,画法不够奇怪,Sertac的推理似乎是合理的
无论如何,有效的代码是
dump ('henon.bmp');
Image3.Picture.LoadFromFile ('lorenz.bmp');
apply_kernel (Image3.Picture.Bitmap, bitmap, kernel);
Image4.Picture.Bitmap.SetSize (bitmap.Width, bitmap.Height);
// Image4.Picture.Bitmap.Canvas.Draw (0, 0, bitmap); // <== does not work
Image4.Picture.Bitmap := bitmap; // <== works
bitmap.SaveToFile ('alias.bmp');
dump ('alias.bmp');
Run Code Online (Sandbox Code Playgroud)
@Sertac,也许我对Draw做错了什么?
@Torbins,归零所有保留字节是相当粗鲁的,我将用alpha通道对你的建议进行一些实验
非常感谢你们!
henon.bmp:
Red
0: 255 255 255 255 255 255 255 …Run Code Online (Sandbox Code Playgroud) 我想使用唯一标识符来确定我的应用程序是否移动到另一台计算机.MAC地址似乎适合此目的.我使用的代码是这样的:
Procedure TForm4.GetMacAddress;
var item: TListItem;
objWMIService : OLEVariant;
colItems : OLEVariant;
colItem : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
wmiHost, root, wmiClass: string;
i: Int32;
function GetWMIObject(const objectName: String): IDispatch;
var
chEaten: Integer;
BindCtx: IBindCtx;//for access to a bind context
Moniker: IMoniker;//Enables you to use a moniker object
begin
OleCheck(CreateBindCtx(0, bindCtx));
OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));//Converts a string into a moniker that identifies the object named by the string
OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));//Binds to the specified object
end;
begin …Run Code Online (Sandbox Code Playgroud) 可以通过JNI和NDK从Delphi调用Android C函数.实现这一点是相当多的工作,并建议直接调用NDK函数.为此,我创建了一个小的示例文件来沿着我在Delphi源代码中找到的行声明一个外部C函数.更具体的<path to delphi>\source\rtl\android.
我创建了一个非常小的测试程序来测试直接从Delphi调用C函数的功能.您将在下面找到所有源代码,这是我目前正在测试的内容.
unit DLL_external;
interface
const
MIDI_Lib = '/usr/lib/libmiditest.so';
test_fun = 'test_1';
function test_1 (n: Integer): Integer; cdecl;
external MIDI_Lib name test_fun;
implementation
initialization
finalization
end.
Run Code Online (Sandbox Code Playgroud)
初始化和完成是必要的,因为否则会发生链接错误,指的是缺少初始化和终结代码.通话类:
unit DLL_Test_Main;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
DLL_external;
//{$I Androidapi.inc}
type
TForm1 = class(TForm)
Button_Load: TButton;
Label1: TLabel;
procedure Button_LoadClick (Sender: TObject);
procedure FormCreate(Sender: TObject);
public
procedure call_external_function (value: Integer);
end; // Class: TForm1 //
var
Form1: TForm1; …Run Code Online (Sandbox Code Playgroud) 当我TLabel在表单上放置时,我可以通过更改FontColor属性来更改其文本的颜色.但是,当我在我的程序中执行此操作时
Label1.FontColor := TAlphaColors.Aquamarine;
Run Code Online (Sandbox Code Playgroud)
这不起作用.知道什么是错的吗?
我尝试在编辑和调试期间使用类似的布局.运行程序时,我的结构和对象检查器消失了.我确实创建了自己的桌面速度设置,同时也将调试桌面设置为它,但是一旦程序运行结构,obejct检查器就会消失.我怎么能防止这种情况?
与此相关的问题:编辑菜单也会发生变化.右键单击过程名称将生成一个弹出菜单,其中第一个项目为"查找声明".调试时,第一项是"关闭页面".我发现查找声明项是一种快速查找代码的方法.除此之外,丢失一个代码是令人沮丧的,因为你在问题上单击"否"来保存信息(我知道,这是我的错,但菜单不应该在我看来改变).
谢谢,
阿诺德
我想测试一些表格.有没有办法模拟按下确定(或取消)按钮,以便按下按钮并触发与之关联的事件处理程序?
我试图根据Embarcadero上的文章访问位图的扫描线.使用像扫描线
for y := 0 to n do
begin
line := bitmap.scanline [y];
for x := 0 to n do line [x] := value;
Run Code Online (Sandbox Code Playgroud)
我之前已经实施过.我注意到访问扫描线需要相当多的时间,上面提到的文章提供了解决方案.我无法正确实现它.我的代码是:
unit SCTester;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
ExtCtrls;
type
TRGBQuad = packed record
b: uInt8;
g: uInt8;
r: uInt8;
alpha: uInt8;
end; // Record: TQuad //
// Override the definitions in Graphics.pas
TRGBQuadArray = packed array [0..MaxInt div SizeOf (TRGBQuad) - 1] of TRGBQuad;
PRGBQuadArray = …Run Code Online (Sandbox Code Playgroud) 我需要生成一个梯度位图,显示用户选择的两种颜色之间的彩虹渐变.生成彩虹很容易.我从Wiki获得了下面的代码并略微调整它.它具有快速和简单的优点.
function TColor_Dialog.GiveRainbowColor (fraction: double): TAlphaColor;
var
m: Double;
r, g, b, mt: Byte;
begin
if fraction <= 0 then m := 0 else
if fraction >= 1 then m := 6
else m := fraction * 6;
mt := (round (frac (m) * $FF));
case Trunc (m) of
0: begin
R := $FF;
G := mt;
B := 0;
end;
1: begin
R := $FF - mt;
G := $FF;
B := 0;
end;
2: begin …Run Code Online (Sandbox Code Playgroud) delphi ×9
bitmap ×2
colors ×2
delphi-xe ×2
delphi-xe2 ×2
vcl ×2
android ×1
android-ndk ×1
c ×1
delphi-xe5 ×1
firemonkey ×1
gradient ×1
graphics ×1
ide ×1
keras ×1
label ×1
linux ×1
networking ×1
scanline ×1
transparency ×1
windows ×1
wmi ×1