小编Arn*_*old的帖子

有条件地编译FMX或VCL的单位

我希望在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)

delphi compiler-construction vcl delphi-xe2 firemonkey

7
推荐指数
1
解决办法
4676
查看次数

为什么Keras model.fit和model.evaluate之间的准确度不同?

我正在尝试拟合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)

keras

7
推荐指数
1
解决办法
1957
查看次数

如何显示透明位图的一部分

我想在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)

delphi transparency bitmap delphi-xe

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

寻找物理适配器的MAC地址

我想使用唯一标识符来确定我的应用程序是否移动到另一台计算机.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)

windows delphi wmi networking delphi-xe

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

直接从Delphi调用Android NDK功能的困难

可以通过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)

c linux delphi android android-ndk

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

如何以编程方式更改Tlabel的FontColor

当我TLabel在表单上放置时,我可以通过更改FontColor属性来更改其文本的颜色.但是,当我在我的程序中执行此操作时

Label1.FontColor := TAlphaColors.Aquamarine;
Run Code Online (Sandbox Code Playgroud)

这不起作用.知道什么是错的吗?

delphi label colors firemonkey-fm3 delphi-xe5

6
推荐指数
2
解决办法
2万
查看次数

如何使调试布局与桌面布局保持一致

我尝试在编辑和调试期间使用类似的布局.运行程序时,我的结构和对象检查器消失了.我确实创建了自己的桌面速度设置,同时也将调试桌面设置为它,但是一旦程序运行结构,obejct检查器就会消失.我怎么能防止这种情况?

与此相关的问题:编辑菜单也会发生变化.右键单击过程名称将生成一个弹出菜单,其中第一个项目为"查找声明".调试时,第一项是"关闭页面".我发现查找声明项是一种快速查找代码的方法.除此之外,丢失一个代码是令人沮丧的,因为你在问题上单击"否"来保存信息(我知道,这是我的错,但菜单不应该在我看来改变).

谢谢,

阿诺德

ide delphi

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

如何模拟按下按钮?

我想测试一些表格.有没有办法模拟按下确定(或取消)按钮,以便按下按钮并触发与之关联的事件处理程序?

delphi vcl event-handling

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

如何正确实现TBitmap的扫描线访问?

我试图根据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)

delphi graphics bitmap delphi-xe2 scanline

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

如何创建彩虹渐变的一部分

我需要生成一个梯度位图,显示用户选择的两种颜色之间的彩虹渐变.生成彩虹很容易.我从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 gradient colors

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