小编Sim*_*aWB的帖子

防止Windows关闭

要检测并防止关机,我使用非常简单的程序.它只有一个表单和一个私有程序,如下所示:

TForm3 = class(TForm)
private
  procedure WMQueryEndSession(var Msg : TWMQueryEndSession) ;
         message WM_QueryEndSession;
end;
Run Code Online (Sandbox Code Playgroud)

和实施

procedure TForm3.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
  Msg.Result := 0; //so I don't want to shutdown while my program is running
end;
Run Code Online (Sandbox Code Playgroud)

我编译了Delphi 5和Delphi 2010.它们都检测到了shutdown.但是当我在Delphi 2010中编译时; 在阻止关机后我的程序关闭.(PC没有关机)

如何从两者中获得相同的结果?

delphi shutdown windows-messages

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

Delphi中100%的CPU使用率

我使用Indy 9和Delphi 5.在我的应用程序中,我想通过UDP与网络设备通信.所以我使用UDPServer comp.在一个派生自TThread的类中.当我写类似于以下代码时,CPU使用率是100%.

在线程中:

while not terminated do begin
  if GetMessage(Msg, 0, 0, 0) then begin
    if Msg.message = WM_UDPMSG then
      Break
    else
      DispatchMessage(Msg);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

和OnUDPRead事件:

  try    
    // Processing the data here
  except
    PostThreadMessage(ThreadId, WM_UDPMSG, 0, 0);
  end;
Run Code Online (Sandbox Code Playgroud)

当我在while-do循环或OnUDPRead事件中使用Sleep函数时,没有任何变化.CPU使用率仍为100%.

我的线程优先级是正常.

我怎样才能解决我的问题?

delphi multithreading udp

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

检查班级名称

我不知道OWNER对象类名.所以我必须检查我的代码中的所有地方:

if TObject(OWNER) is TFirstClass then begin
  TFirstClass(OWNER).FirstFunction;
  TFirstClass(OWNER).SecondFunction;
  ...
end else
if TObject(OWNER) is TSecondClass then begin
  TSecondClass(OWNER).FirstFunction;
  TSecondClass(OWNER).SecondFunction;
  ...
end;
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?因为如果在代码的许多地方有条件,我必须这样做.TFirstClass和TSecondClass(我必须运行)的所有功能都是相同的.

注意:我使用的是Delphi 5.

delphi class

4
推荐指数
2
解决办法
1156
查看次数

消息框

德尔福 ; Application.MessageBox,Windows.MessageBox或Dialogs.MessageDlg之间有什么区别?或者使用计算机内存更有效率?

delphi messagebox

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

没有OnExecute事件的TCP服务器

我想打一个TCPserver下和发送/接收邮件的客户需要的TCPserver下的,不OnExecute事件.

发送/接收消息不是问题; 我喜欢这样:

procedure TFormMain.SendMessage(IP, Msg: string);
var
  I: Integer;
begin
  with TCPServer.Contexts.LockList do
  try
    for I := 0 to Count-1 do
      if TIdContext(Items[I]).Connection.Socket.Binding.PeerIP = IP then
      begin
        TIdContext(Items[I]).Connection.IOHandler.WriteBuffer(Msg[1], Length(Msg));
        //  and/or Read 
        Break;
      end;
  finally
    TCPServer.Contexts.UnlockList;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

注1:如果我不使用OnExecute,程序会在客户端连接时引发异常.
注意2:如果我在不做任何事情的情况下使用OnExecute,则CPU使用率将达到%100
注3:我没有机会更改TCP客户端.

所以我该怎么做?

delphi indy tcpserver

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

德尔福5至2010年

我在Delphi 5和2010中使用了相同的函数(OneWayEncrypt(edit1.Text)).
为什么结果不同?(或者我如何从Delphi 2010中获得相同的结果?)

uses Sysutils, Windows, Dialogs, classes;

function OneWayEncrypt(AStr: string): string;
PROCEDURE CalcCRC32 (p:  pointer; ByteCount:  DWORD; VAR CRCvalue:  DWORD);

implementation

const 
  table:  ARRAY[0..255] OF DWORD = 
  (
    //table consts are here
  );

PROCEDURE CalcCRC32(p: pointer; ByteCount: DWORD; VAR CRCvalue: DWORD);
VAR
  i: DWORD;
  q: ^Byte;
BEGIN
  q := p;
  FOR i := 0 TO ByteCount - 1 DO
  BEGIN
    CRCvalue := (CRCvalue SHR 8) XOR table[q^ XOR (CRCvalue AND $000000FF)];
    INC(q);
  END
END;

function OneWayEncrypt(AStr: …
Run Code Online (Sandbox Code Playgroud)

delphi crc delphi-2010

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

将C结构转换为Delphi

如何将此结构转换为Delphi?

typedef struct a_config {
    union {
        struct {
            char mode[10];
            char name[10];
        } dn;

        struct {
            int r;
        } sm;

        struct {
            int r;
        } xo;
    } config;
} a_config_t;
Run Code Online (Sandbox Code Playgroud)

c delphi struct unions

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