小编jpf*_*ius的帖子

Delphi MREW实现有利于读者吗?

是否有Delphi实现的MREW(多次读取,独占写入)锁定,有利于读取写入?

delphi multithreading synchronization

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

Delphi:类中的记录

以下情况:

type
  TRec = record
    Member : Integer;
  end; 

  TMyClass = class
  private
    FRec : TRec;
  public
    property Rec : TRec read FRec write FRec;
  end;
Run Code Online (Sandbox Code Playgroud)

以下不起作用(左侧不能分配),这是可以的,因为它TRec是一个值类型:

MyClass.Rec.Member := 0;
Run Code Online (Sandbox Code Playgroud)

在D2007中,虽然以下内容有效:

with MyClass.Rec do
  Member := 0;
Run Code Online (Sandbox Code Playgroud)

不幸的是,它在D2010中不起作用(我认为它在D2009中也不起作用).第一个问题:为什么?故意改变了吗?或者它只是其他一些变化的副作用?D2007的解决方法只是一个"错误"吗?

第二个问题:您如何看待以下解决方法?使用安全吗?

with PRec (@MyClass.Rec)^ do
  Member := 0;
Run Code Online (Sandbox Code Playgroud)

我在这里谈论现有代码,因此必须进行的更改才能使其工作应该是最小的.

谢谢!

delphi records delphi-2007 delphi-2010

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

Delphi - DLL中的表单 - 提示未显示

我在DLL中有一个Delphi表单(我知道这限制了DLL对Delphi的使用,但在这种情况下这不是问题).

DLL导出一个ShowForm看起来大致如下的函数:

procedure ShowForm (App : TApplication);
begin
  OldApp := Application;
  try
    Application := App;
    MyForm := TMyForm.Create (nil);
    try
      MyForm.ShowModal;
    finally
      FreeAndNil (MyForm);
    end;
  finally
    Application := OldApp;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

现在我在表格上使用了一个TAdvOfficeHint(来自TMS组件包).不幸的是,这些提示没有显示出来.

我在这里错过了什么吗?如何使表单的行为完全像我从主应用程序中显示的那样?

谢谢!

delphi dll

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

伟大的Delphi源代码阅读和学习

这个问题涉及到

/sf/ask/672241/

它编译了一个很棒的(在可读,优雅,......的意义上)源代码列表.

阅读源代码时的部分学习经验肯定与语言无关,但每种语言都有自己的方法来完成某些事情.所以在这个问题中,我正在寻找优秀的Delphi代码.

什么是一些伟大的Delphi源代码来阅读和学习?有什么建议?

delphi

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

文件大小计算,Int64,以及32位和64位之间的差异

我遇到以下代码问题:

var
  FileSize : Int64;
...
FileSize := Info.nFileSizeLow or (Info.nFileSizeHigh shl 32);
Run Code Online (Sandbox Code Playgroud)

我期望它能够工作,因为Int64任务的左侧类型.但事实并非如此.包含shl似乎产生溢出的部分计算.

所以我改成了:

FileSize := Info.nFileSizeLow or (Int64 (Info.nFileSizeHigh) shl 32);
Run Code Online (Sandbox Code Playgroud)

它适用于我的32位操作系统,但不适用于Vista 64位!

最后,

FileSize := Info.nFileSizeHigh;
FileSize := FileSize shl 32;
FileSize := Info.nFileSizeLow or FileSize;
Run Code Online (Sandbox Code Playgroud)

适用于两个系统.

有人可以解释这三个版本的差异吗?

delphi delphi-2010

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

检测系统启动事件

我想执行一个应该只在Windows系统启动时触发的过程,这里的启动并不意味着程序启动.我能做些什么来触发我的手术.如果可能的话,我想避免搞乱注册表.我正在使用delphi 2010.

windows delphi delphi-2010

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

在RichEdit中拦截TAB键

这里有很多类似的问题,但我找不到我的问题的答案.

我有一个TRichEdit并且想要在用户按下时实现一些自定义行为Tab.我将富编辑的WantTabs属性设置为True并尝试添加我的自定义行为OnKeyDown,这可以正常工作,但不幸的是,之后执行"正常"选项卡行为(在编辑中插入制表符).我尝试在事件处理程序中设置Key,0但这没有帮助.

如何防止"正常"选项卡行为被执行?

delphi vcl delphi-xe

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

记录中的接口字段

我可以依赖这样一个事实,即记录中的接口字段是否始终初始化为nil

TMyRec = record  
  FGuard : IInterface;
  FObject : TObject;
  procedure CheckCreated;
end;
Run Code Online (Sandbox Code Playgroud)

这将允许我写:

procedure TMyCheck.CheckCreated;
begin
if (FGuard = nil) then
  begin
  FObject := TObject.Create;
  FGuard := TGuard.Create (FObject);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

(用于自动终身管理)

我知道接口字段已初始化为,nil但是当包含在记录中时也是如此?

delphi delphi-xe

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

如何向 Netlify 提供 Firebase 管理员凭据?

我尝试GOOGLE_APPLICATION_CREDENTIALS在 Netlify 上配置环境变量以便使用firebase-admin,但如何在那里获取实际的 JSON 文件?

显然我不能将它包含在 git 中。

netlify sveltekit

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

TMonitor同步/ Application.ProcessMessages

我回来了另一个关于线程和同步的问题.想象一下,服务器应用程序必须执行冗长的操作,并且客户端希望他的GUI在等待服务器的响应时保持响应.我想到了以下模式:

TMonitor.Enter (FTCPClient);
try
  WorkerThread := TWorkerThread.Create (SomeLengthyServerOperation);
  while (not WorkerThread.Ready) do
    Application.ProcessMessages;
  DoSometingWithResults (WorkerThread.Result);
  WorkerThread.Free;      
finally
  TMonitor.Exit (FTCPClient);
end;
Run Code Online (Sandbox Code Playgroud)

WorkerThread是一个派生自TThread的简单类,它执行传递给其构造函数的函数,然后终止(使用Ready = True,结果为Result).只要单击按钮,就会执行显示的代码.

现在我的问题:如果我非常快地点击按钮两次,我会得到一些奇怪的错误,看起来很像服务器和客户端之间的通信以某种方式被误解,我想通过锁定FTCPClient对象来避免.Application.ProcessMessages执行后的事件处理程序是什么线程?是每个线程的TMonitor锁吗?这是否意味着如果我使用Application.ProcessMessages,锁不起作用?

我现在无法更好地解释它.我希望有人明白我的观点.如果没有,请随时提问.

编辑:对于按钮的禁用和启用:我对客户端代码一无所知.可能是一个按钮事件处理程序,可能是其他东西.基本上我想隐藏客户端代码的锁定.

delphi multithreading synchronization delphi-2009 tmonitor

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