为什么简单的控制台应用程序需要管理权限?
program LTUpdate;
{$APPTYPE CONSOLE}
begin
WriteLn('Hello World');
end.
Run Code Online (Sandbox Code Playgroud)
你好世界
项目中是否有某个复选框将应用程序设置为需要管理权限?
(最终的程序将连接到数据库,获取一些字段并在其他地方更新它,现在我可以通过 VCL 来完成......但我想这次我应该尝试一个简单的控制台应用程序。)
我刚刚开始对此感到困惑.
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) 我创建了一个简单的类,我将对象保存在通用列表中.我设法让它运作起来.但我不明白为什么这不起作用.
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) 我有一个我不明白的问题:
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什么区别?
我正在使用Windows 10并且以管理员身份登录。
当我尝试重新引导系统时,它所做的只是使我注销。
ExitWindowsEx(EWX_REBOOT and EWX_FORCE, 0);
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么不重启吗?
我在网上找到了一个简单的二进制打包机,我根据自己的需要进行了改动.它运作良好,但我泄漏记忆.
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) 我创建了一个函数来刷新带参数的查询,然后找到一个特定的字段.
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 10.4.2 、 Indy 10.6.2.0 。
\n我已经尝试过这个解决方案:Indy HTTP Server URL-encoded request,但我想我误解了一些东西。
\n我从 Web 应用程序获取 JSON,如下所示:
\nprocedure 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;\nRun Code Online (Sandbox Code Playgroud)\n我可能做错了什么,但我的结果仍然不正确:
\nD 卡尔斯鲁厄 / S\xc3\x83\xc2\xbcdweststadt, 班霍夫大街\xc3\x83\xc5\xb8e
\n应该是\nS\xc3\xbcdweststadt 和 Bahnhofstra\xc3\x9fe
\n请帮忙。\n谢谢。
\n