小编use*_*012的帖子

Delphi 10.4.2:为什么控制台应用程序需要管理权限?

为什么简单的控制台应用程序需要管理权限?

program LTUpdate;

{$APPTYPE CONSOLE}

begin
  WriteLn('Hello World');
end.
Run Code Online (Sandbox Code Playgroud)
  • 如果我从命令提示符运行该程序,则不会发生任何事情。
  • 如果我使用管理权限运行命令提示符,然后该程序输出:

    你好世界

项目中是否有某个复选框将应用程序设置为需要管理权限?

(最终的程序将连接到数据库,获取一些字段并在其他地方更新它,现在我可以通过 VCL 来完成......但我想这次我应该尝试一个简单的控制台应用程序。)

delphi uac manifest console-application elevated-privileges

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

Delphi Generics:TArray.Sort

我刚刚开始对此感到困惑.

PNode = ^TNode;

TNode = record
  Obstacle : boolean;
  Visited : boolean;
  GCost : double; // Distance from Starting Node
  HCost : double; // Distance from Target Node
  x : integer;
  y : integer;
  vecNeighBour : array of PNode;
  Parent : PNode;
end;
Run Code Online (Sandbox Code Playgroud)

OnFormShow我填充数组:

 SetLength(Node,4,4);

 Image1.Height:=Length(Node)*50;
 Image1.Width:=Length(Node)*50;

 for x := Low(Node) to High(Node) do
   for y := Low(Node) to High(Node) do
      begin
        Node[x,y].Obstacle:=false;
        Node[x,y].Visited:=false;
        Node[x,y].GCost:=infinity;
        Node[x,y].HCost:=infinity;
        Node[x,y].x:=x;
        Node[x,y].y:=y;
      end;
Run Code Online (Sandbox Code Playgroud)

现在我想用HCost对这个数组进行排序,所以我尝试了这个.

  TArray.Sort<TNode>(Node , TComparer<TNode>.Construct(
  function(const Left, Right: TNode): double
  begin …
Run Code Online (Sandbox Code Playgroud)

delphi sorting generics

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

Delphi Class TList

我创建了一个简单的类,我将对象保存在通用列表中.我设法让它运作起来.但我不明白为什么这不起作用.

for Monster in MonsterList do
    begin
      Monster.Free;
      MonsterList.Remove(Monster);
    end;
Run Code Online (Sandbox Code Playgroud)

如果我尝试从MonsterList中释放和删除这样的项目,它并没有真正删除,在我的情况下,名称消失但强度值保持在那里.如果我之后尝试列出MonsterList的内容,我总是剩下一个项目.所以我用Google搜索了一下,在堆栈溢出处发现,我很好的解决方案就是简单地计算downto.

另一件事是当我将怪物添加到MonsterList时,我添加3个项目,但是如果我调试我看到MonsterList实际上0,1,2,3 3是NULL 这只会在我添加全部三个时发生,如果我只添加两个对象它不会创建最终的NULL指针.这是某种优化的优势吗?

整个守则(不多)

unit MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Generics.Collections, Generics.Defaults,
  System.Types;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMonster = class
    private
      fName : string;
      fStrength : integer;
      fisDead : boolean;
    public
      constructor Create(Name : string; Strength : integer);
      destructor Destroy; override; …
Run Code Online (Sandbox Code Playgroud)

delphi generics foreach class

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

Delphi程序数组参数混淆

我有一个我不明白的问题:

procedure TMain.THREAD_SYNC(
              AProgressBar: TProgressBar; 
              ARemoteData: array of RemoteDATA; 
              ALocalData : array of LocalDATA; 
              Number : integer; 
              AInfo : TEdit);
Run Code Online (Sandbox Code Playgroud)

如果我为它指定"较小的数组",以下过程可以完美地工作

THREAD_SYNC(Remote,Local,0,Edit1)
Run Code Online (Sandbox Code Playgroud)

当我尝试为它分配一个更大的数组超过30.000条记录然后我得到一个Stack Overflow错误,所以我尝试了googled ...我发现了一些关于使用的东西const所以我把我的程序改为:

procedure TMain.THREAD_SYNC(
              AProgressBar: TProgressBar; 
              ARemoteData: array of RemoteDATA; 
              const ALocalData : array of LocalDATA; 
              Number : integer; 
              AInfo : TEdit);
Run Code Online (Sandbox Code Playgroud)

现在它有效,我的问题是我不明白为什么?
没有const什么区别?

arrays delphi procedure

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

Delphi重新启动Windows

我正在使用Windows 10并且以管理员身份登录。

当我尝试重新引导系统时,它所做的只是使我注销。

ExitWindowsEx(EWX_REBOOT and EWX_FORCE, 0);
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我为什么不重启吗?

delphi

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

TPacker.SplitNode中的内存泄漏

我在网上找到了一个简单的二进制打包机,我根据自己的需要进行了改动.它运作良好,但我泄漏记忆.

TSprite

type
  TSprite=class
  public
    X:Integer;
    Y:Integer;
    Width:Integer;
    Height:Integer;
    Used:Boolean;
    Down:TSprite;
    Right:TSprite;
    constructor Create(X, Y,Width, Height:Integer);
end;
Run Code Online (Sandbox Code Playgroud)

TPacker

type
  TPacker=class
  public
  Root:TSprite;
  constructor Create(W,H:Integer; Image : TImage);
  destructor Destroy; override;
  function Fit(var Blocks:array of TBlock):Boolean;
  function FindNode(root:TSprite; W, H:Integer):TSprite;
  function SplitNode(Node:Tsprite; W, H:Integer):TSprite;
end;
Run Code Online (Sandbox Code Playgroud)

我这样用它

var Packer:TPacker;

  Packer:=TPacker.Create(Width  , Height, Image);

  Packer.Fit(Blocks);

  Boundary(Packer.Root, Image);

  for I := Low(Blocks) to High(Blocks) do
    begin
      if Blocks[I].Fit <> nil then
        Draw(Blocks[I].Fit.X,Blocks[I].Fit.Y,Blocks[I].Width,Blocks[I].Height, Image);
    end;



  LeftRacks:=Report(blocks, packer.Root.Width, packer.Root.Height).Racks;
  FillPercent:=Report(blocks, packer.Root.Width, packer.Root.Height).FillPercent;

  Packer.Free;
Run Code Online (Sandbox Code Playgroud)

构造函数 TPacker

constructor …
Run Code Online (Sandbox Code Playgroud)

delphi memory-leaks

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

具有变量参数的函数

我创建了一个函数来刷新带参数的查询,然后找到一个特定的字段.

function RefreshQuery(AQuery : TADOQuery; AField : string; AValue : integer; AParam : string; AParamValue : Variant) : boolean; overload;
Run Code Online (Sandbox Code Playgroud)

当AValue是整数时,当我将其更改为Variant时,它可以工作

我得到一个列表索引超出界限1699364错误.

函数本身如下所示:

function RefreshQuery(AQuery : TADOQuery; AField : string; AValue : integer; AParam : string; AParamValue : Variant) : boolean; overload;
var AfterOpen,AfterScroll,BeforeOpen : TDataSetNotifyEvent;
    AList : TStringList;
    i : integer;
begin
  result:=false;

  AfterOpen := AQuery.AfterOpen;
  AfterScroll := AQuery.AfterScroll;
  BeforeOpen := AQuery.BeforeOpen;

  AQuery.AfterOpen:=nil;
  AQuery.AfterScroll:=nil;
  AQuery.BeforeOpen:=nil;

  AList := TStringList.Create;
  AList.Delimiter:=';';
  AList.DelimitedText:=AParam;

  if AQuery.Active then AQuery.Close;

  if AList.Count = 1 …
Run Code Online (Sandbox Code Playgroud)

delphi function variant tadoquery

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

Indy HTTP Server ARequestInfo.Params.Text 编码错误

我正在使用 Delphi 10.4.2 、 Indy 10.6.2.0 。

\n

我已经尝试过这个解决方案:Indy HTTP Server URL-encoded request,但我想我误解了一些东西。

\n

我从 Web 应用程序获取 JSON,如下所示:

\n
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;\n  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);\nbegin\n  If ARequestInfo.CommandType = hcPOST then\n  begin\n\n    MyDecodeAndSetParams(ARequestInfo);\n\n    Memo1.Lines.Add(ARequestInfo.Params.Text);\nend;\n
Run Code Online (Sandbox Code Playgroud)\n

我可能做错了什么,但我的结果仍然不正确:

\n

D 卡尔斯鲁厄 / S\xc3\x83\xc2\xbcdweststadt, 班霍夫大街\xc3\x83\xc5\xb8e

\n

应该是\nS\xc3\xbcdweststadt 和 Bahnhofstra\xc3\x9fe

\n

请帮忙。\n谢谢。

\n

delphi indy

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