标签: firemonkey-fm2

Firemonkey 中的 GetKeyState

在 VCL (Delphi 2010) 中,我使用这个函数来检查是否按下了控制键:

function IsControlKeyPressed: Boolean;
begin
  Result := GetKeyState(VK_CONTROL) < 0;
end;
Run Code Online (Sandbox Code Playgroud)

GetKeyState 是 Windows 库中的函数,我不想将它包含在我的项目中。

如何检查是否在 XE3 中为 firemonkey 应用程序按下了 control 或 shift 键?

delphi keyboard firemonkey delphi-xe3 firemonkey-fm2

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

来自DLL的DWM交互

大家早上好.

我目前正在尝试编写一个围绕通过Windows DWM API提供的功能(例如DWM缩略图)构建的小应用程序.一个这样的功能是能够从应用程序中动态选择缩略图区域,并将其放大/放大.可以通过某种"设置区域"功能从DWM执行此操作,但是我我想先尝试自己的路线,然后才能进入API.

最近我发现了Delphi的一个例子,我曾希望从演示中扩展并构建更具体的东西.我着手将代码移动到Firemonkey FM2应用程序(因为我更喜欢框架的视觉功能与VCL相比).通过一些调整,我设法将其构建,但不幸的是DWMRegisterThumbnail,尽管VCL版本运行完美,但在FMX应用程序中运行时似乎不会返回有效结果.

然后我再看了一下,决定给Hydra一个机会.我将工作的VCL示例复制到Hydra插件,并创建了Firemonkey主机应用程序.我正确设置了两个部分并进行了编译.DLL加载正确,我可以按预期看到FMX主机内的VCL插件接口.但是,在尝试查看窗口的DWM缩略图时,我再次遇到了运行非hydra FMX应用程序时遇到的相同问题.

然后我开始创建一个VCL主机应用程序,以确保它不是特定于VCL-FMX交互的问题.我编译了VCL主机,加载到VCL插件中,我再次看到VCL主机内的VCL插件.然而,我仍然发现我无法从DWM查看缩略图.显然,这不是Firemonkey-VCL交互问题.

因此,我已经得出结论,从DLL运行DWM代码是一个问题.理想情况下,我想要一个FMX主机应用程序只是因为我更容易删除TSelection缩略图,并以这种方式处理缩放(例如,非常少的代码,而不需要寻找自定义组件)提及额外的奖金,如MakeScreenshot.

所以,切入追逐; 是否可以从Hydra插件调用DWM API,和/或将DWM缩略图输出到Firemonkey表面?

我的Hydra插件中使用的代码与链接示例中使用的代码相同,我的宿主应用程序中使用的代码基于Remobject Youtube Channel上的简单示例.

delphi remobjects dwm firemonkey firemonkey-fm2

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

如何以编程方式更改Firemonkey控件中的字体属性

我有一些代码可以绘制放置在TImage顶部的一组控件。然后,我抓住TImage的MakeScreenshot来保存文件。现在,它可以完美运行。我现在正在努力的是更改一个或多个标签/文本样式控件的字体属性。不管我尝试什么,标签都不会改变。下面是我的示例代码:

procedure TfrmSnapshot.Process;
var
  LRect1, LRect2, LRect3, LRect4: TRectF;
  X, Y, W, H: Integer;

begin
//
X := Round(Label1.Position.X);
Y := Round(Label1.Position.Y);
W := Round(X + Label1.Width);
H := Round(Y + Label1.Height);
LRect1.Create(X, Y, W, H);

X := Round(Label2.Position.X);
Y := Round(Label2.Position.Y);
W := Round(X + Label2.Width);
H := Round(Y + Label2.Height);
LRect2.Create(X, Y, W, H);

X := Round(Label3.Position.X);
Y := Round(Label3.Position.Y);
W := Round(X + Label3.Width);
H := Round(Y + Label3.Height);
LRect3.Create(X, Y, W, H);

X := Round(Rect1.Position.X);
Y …
Run Code Online (Sandbox Code Playgroud)

delphi fonts firemonkey firemonkey-fm2

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

按名称动态创建表单?

有没有办法只通过名称动态创建表单; 这个概念是这样的.我有一个主窗体,通过一些用户选择,必须创建一些预定义的窗体并停靠在主窗体上的pagecontols上的tabitems上.我知道表单的名称,我知道何时创建其中的每一个,但我想知道是否有更好的方法通过单个过程调用创建这些表单,并且我的代码中没有所有这些信息.

它的Delphi XE3 firemonkey,获胜7.

在此先感谢您的帮助

delphi delphi-xe3 firemonkey-fm2

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

Delphi Firemonkey 2 .color属性

我不知道这只是我遗漏了什么,但我对此问题感到非常沮丧.
当我尝试设置.color属性时,没有可用的值,例如claBlue.

例如:

 Canvas.Stroke.Color := claBue.
Run Code Online (Sandbox Code Playgroud)

我错过了参考吗?我已经包括FMX.Types.

delphi delphi-xe3 firemonkey-fm2

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

用字符串移动的奇怪行为

我正在测试一些增强的字符串相关函数,我试图使用它作为一种复制字符串的方法,以便更快,更有效地使用而无需深入研究指针.

在测试用于从TStringList创建分隔字符串的函数时,我遇到了一个奇怪的问题.当编译器为空时,编译器引用了索引中包含的字节,并且当通过move添加字符串时,索引引用了包含的字符.

这是一个小型缩小的准系统代码示例: -

unit UI;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Layouts,
  FMX.Memo;

type
  TForm1 = class(TForm)
    Results: TMemo;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

function  StringListToDelimitedString
          ( const AStringList: TStringList; const ADelimiter: String ): String;
var
  Str           : String;
  Temp1         : NativeInt;
  Temp2         : NativeInt;
  DelimiterSize : Byte;

begin

  Result        := ' ';
  Temp1         := 0;
  DelimiterSize := Length ( ADelimiter ) * 2;

  for Str in AStringList …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey-fm2

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

如何在FMX中显示TMemo中的任意一行?

我在Firemonkey中为TMemo添加了一行,我希望当有更多行可以在TMemo中显示时,添加的行被滚动到视图中.我找不到怎么做.我试过了

Display.Lines.Add (arg);
Caret.Line := Display.Lines.Count - 1;
Caret.Pos  := 0;
Display.CaretPosition := Caret;
Run Code Online (Sandbox Code Playgroud)

但这没有帮助.帮助非常有限,所以我不确定我在这里做什么.

更新

在尝试受访者的代码时,我注意到我测试了代码示例错误.我为此道歉,我唯一的理由是,当我编写并测试代码时,它已接近午夜了.上面的代码确实有效.我删除了Display.CaretVisible := True;原始代码中的语句,因为这不会影响我想要的行为.

delphi tmemo firemonkey-fm2

0
推荐指数
1
解决办法
2347
查看次数

如何区分firemonkey中的numpad和常规数字键?

我正在尝试确定按钮的OnKeyDown中按下的键(FMX,XE3),但我目前发现自己无法区分小键盘键和常规键...

根据我按下的键,我可以使用Key或KeyChar找出已按下的键.例如,按下F1发送112和#0,这样我就可以使用VkCode,按下A发送0和'a',这样我就可以使用'a'.KeyChar在很多情况下都是#0显然是有意义的,但是如果KeyChar存在,我无法理解为什么Key被设置为0.

function GetCharFromVirtualKey(Key: Word): string;
  var Buffer: array[0..255] of Char; 
      ScanCode: Cardinal;
begin
  if Key = VK_PAUSE
    then ScanCode := $45 shl 16
    else ScanCode := MapVirtualKey(Key, 0) shl 16;
  if Key in [33..46, 91..93, 108, 111, 144, 163, 165]
    then ScanCode := ScanCode + $1000000;

  GetKeyNameText(ScanCode, Buffer, SizeOf(Buffer));
  result := Buffer;
end;

procedure TMyForm.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
  var test: string;
begin
  if (KeyChar <> #0) then Key := …
Run Code Online (Sandbox Code Playgroud)

windows delphi firemonkey delphi-xe3 firemonkey-fm2

0
推荐指数
1
解决办法
795
查看次数

释放动态数组后阻止页脚损坏

当用户登录到服务器并且服务器发送与用户名/密码匹配结果相关的响应时,我遇到此错误.具有回复数据包的数组导致错误.我不知道如何解决这个问题,这是我第一次看到这样的错误.

主要方法

procedure TAgUDP.ProcessLoginPacket
          ( const APacket : TBytes; const ABinding : TIdSocketHandle );
var
  Username : String;
  Password : String;
  Index    : WORD;
  ID       : TGUID;
  Reply    : TBytes;
  Peer     : TAgUDPSPeer;

begin

  // Extracting Username
  SetLength ( Username, APacket [LI_LNUN] );
  Index := 5 + HEADER_END + ( APacket [LI_LNIP] * 2 );
  Move  ( APacket [Index], Username [1], APacket [LI_LNUN] * 2 );

  // Checking whether the peer is already connected
  if not Assigned ( fClientsList.FindPeer …
Run Code Online (Sandbox Code Playgroud)

delphi fastmm firemonkey-fm2

-1
推荐指数
1
解决办法
269
查看次数