小编Uma*_*med的帖子

BeginUpdate - EndUpdate导致表单在所有打开的窗口后面

我已经在firemonkey中移植了一个控件繁重的应用程序,我已经用DXScene工作了两年多.在每个UI更改上更新的可视控件数量绝对保证了所有UI更新方法中分别带有前缀和后缀的BeginUpdate-EndUpdate方法.

移植后,firemonkey引擎对这些方法的行为不正常.

  1. 有时新控件会生成但不会更新内容.
  2. 有时它们甚至不会显示,并且强制形式最小化 - 最大化可以显示它们.
  3. 并且表格一直落后于所有其他打开的窗户.

是否仍然建议使用这些或在FMX中引入替代方案?

delphi firemonkey delphi-xe3 firemonkey-fm2

6
推荐指数
0
解决办法
689
查看次数

有没有办法知道当前的方法是否用于链式调用?

我想在链中调用一组函数时执行其他操作.

我在Laravel查询构建器中看到过这种情况,但我无法找到它背后的现有逻辑.它定义了一个集合中的where子句,如果它们是链接的,则另外分开(在whereNested函数回调中).

$q->whereNested(function (Builder $q) {

    // Generates "Where (first = 1 and second = 2) or third = 3"
    $q->where('first', 1)->where('second', 2);
    $q->orWhere('third', 3);

});
Run Code Online (Sandbox Code Playgroud)

有没有办法在执行函数时知道这一点?如果没有,有人能指出我使用Laravel的逻辑吗?

laravel php-7

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

如何使用 TControl 附加任何类型的对象?

我想添加一个带有 TTreeViewItem 的 TList 和另一个带有自定义类 (Troom) 的对象。在 delphi 2007 中,有一个 Pointer 类型的字段“数据”,此处已替换为 TValue,我不知道如何使用。我在互联网上搜索过一些人说它暂时无法处理自定义类型。

除了制作黑客课程之外,有人可以设计出一种方法来实现这一目标吗?

例如,下面的表单代码应该可以正常运行:-

unit Unit1;

interface

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

type
  TRoom = class

    ID : WORD;
    Name : String;

  end;

  TForm1 = class(TForm)
    TreeView1: TTreeView;
    TreeViewItem1: TTreeViewItem;
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  List : TList;
begin

  // Get The List From …
Run Code Online (Sandbox Code Playgroud)

delphi firemonkey-fm2

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

如何将任意类型的方法传递给程序并识别它?

我有一个线程库,它有三个不同方法类型的构造函数.我希望它们合并为一个逻辑,以便在构造函数中区分它们.可能吗?由于TValue有价值等等,方法类型是否有类似的东西?

我现在支持以下类型;

TAgThreadMethod1 = procedure of object;
TAgThreadMethod2 = procedure;
TAgThreadMethod3 = procedure(const AThread: TAgThread) of object;
Run Code Online (Sandbox Code Playgroud)

而构造函数是这样的:

constructor Create(const AOnRun: TAgThreadMethod1); overload; virtual;
constructor Create(const AOnRun: TAgThreadMethod2); overload; virtual;
constructor Create(const AOnRun: TAgThreadMethod3); overload; virtual;
Run Code Online (Sandbox Code Playgroud)

作为参考,我不希望用户能够在构造之后的某个时间更改worker方法.因此,如果存在可以在单个构造函数中执行此类操作的解决方案,也欢迎;

constructor Create
            (const AOnRun: [Some type which can hold arbitrary method types]);
begin

  // code to identify the method contained in AOnRun.
  // if supported, assign it the correct handler.

end;
Run Code Online (Sandbox Code Playgroud)

delphi

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

当路径具有特殊字符时,包含脚本不起作用

我正在尝试使用点语法将一个脚本包含在同一文件夹中的另一个脚本中:

. '.\BaseScript.ps1'
Run Code Online (Sandbox Code Playgroud)

脚本的路径包含一个名称中带有方括号的文件夹。即使我使用的是相对路径,路径错误仍然发生。

将其移动到名称中没有特殊字符的其他路径可以正常工作。

在使用相对路径时如何满足这种情况?

powershell scripting

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

我可以在 jQuery 中使用 Twilio Video JS SDK 2.0 吗?

官方文档没有任何在 jQuery 或纯 JavaScript 中实现的示例。我们不会在我们的项目中使用 Node,除非特别要求,这很少见。

我们真的必须将我们的项目限制在 v1 吗?或者有人可以指出我的相关教程吗?

twilio webrtc

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

tcriticalsection.create访问冲突

我正在编写一个多线程聊天服务器应用程序.因此,关键部分是非常必要的.我刚刚为线程树视图创建了一个包装类.它在客户端完美运行,但服务器引发AV.

有两种形式,FormServer(除了gui绘画几乎没有任何处理)和DataModuleServer完成所有繁重的工作.

首先创建FormServer.

实际上,线程树视图位于另一个包装器类TRoomTree中.

TDataModuleServer.Create

procedure TDataModuleServer.cr(Sender: TObject);
begin
  Rooms := TRoomTree.Create (FormServer.tvRooms);
Run Code Online (Sandbox Code Playgroud)

tvRooms:视觉树视图

TRoomTree.Create

constructor TRoomTree.Create (TV : TTreeView);
begin

  if Assigned (TV) then
    fTreeView.Create (TV)
  else
    exit;
Run Code Online (Sandbox Code Playgroud)

fTreeView:线程树视图;

TThreadTreeView.Create

constructor TThreadTreeView.Create (TreeView : TTreeView = nil);
begin

  fLock := TCriticalSection.Create;

  if Assigned (TreeView) then
    fTreeView := TreeView
  else
    fTreeView := TTreeView.Create (nil);

end;
Run Code Online (Sandbox Code Playgroud)

fTreeView:普通的树视图;

现在,TCriticalSection.Create在ntdll.dll中引发了一个AV异常.

调用堆栈

:76cac41f KERNELBASE.RaiseException + 0x58
:0040469c NotifyNonDelphiException + $1C
:77ecb42b ; ntdll.dll
uThreadTreeView.TThreadTreeView.Create($26B4300) 
uRoomTree.TRoomTree.Create($26B4300)
uServer.TDataModuleServer.cr($26A48B0)
Classes.TDataModule.DoCreate
Classes.TDataModule.AfterConstruction
System.@AfterConstruction($26A48B0)
Classes.TDataModule.Create(???)
Forms.TApplication.CreateForm(???,(no value))
PlayburnServer.PlayburnServer
:773833aa …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading

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

用字符串移动的奇怪行为

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

在测试用于从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
查看次数

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

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

主要方法

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
查看次数