我使用Inno Setup为我的程序创建安装程序.在我的程序中,我使用第三方库,因此我必须显示每个库的许可证信息.我还希望安装程序将某些许可文件显示为所选语言.如果我有1个许可证表单,我知道如何在许可证文件之间切换.
我已经整整一天看了谷歌,但没有找到任何东西
如何显示多个许可证?
在应用程序运行时,我在内存中存储,读取和修改了大量数据.可以将数据与树进行比较,其中每个节点由有限数量的字符串和整数描述,并且具有相当多的子元素.目前,数据是使用类/对象存储的,例如
TRootElement = class
fName, fDescription: string;
fPos: integer;
/// etc
end;
fDocs: TObjectList; //list of TVariable = class(TRootElement)
fClasses: TObjectList; // list of TClass=class(TRootElement)
Run Code Online (Sandbox Code Playgroud)
目前程序消耗的内存是不可接受的,因此我正在寻找限制它的解决方案.
我的问题是:如果我将基于记录的当前,OOP和基于对象的架构替换为一个,那么消耗是否会显着降低? 例如,一般记录可能包含:
TRootElement = record
fType: TElemType; // enum: root, variable, class, etc ...
fName, fDesc: string;
// all the fields used by root elem and it's descendants there
end;
Run Code Online (Sandbox Code Playgroud)
我应该用指向下一个/前一个元素的指针替换TList吗?因为我从来没有按索引访问列表元素,所以我总是在整个列表中循环,这应该不是很难...但是如果没有必要的话我想避免它.
谢谢!米
我想我必须是密集的,我是Delphi的新手,我正在尝试将sql结果读入类中以便轻松访问它.我创建了一个虚拟类来测试这样:
type
test_class = class
id:integer;
job_number:string;
cust_name :string ;
procedure get_record_data;
end;
Run Code Online (Sandbox Code Playgroud)
然后我调用这样的程序:
procedure test_class.get_record_data;
begin
test_class.Create;
test_class.id := tform3.adoQuery1.FieldByName('id').AsInteger;
test_class.job_number := tform3.adoQuery1.FieldByName('job number').AsString;
test_class.cust_name := tform3.adoQuery1.FieldByName('customer name').AsString;
end;
Run Code Online (Sandbox Code Playgroud)
然后我测试我的结果如下:
procedure TForm3.Button1Click(Sender: TObject);
begin
showmessage('Id number is ' + inttostr(test_class.id));
end;
Run Code Online (Sandbox Code Playgroud)
showmessage行抛出一个编译器错误,表示预期的方法标识符.
以test_class.id :=,test_class.job_number:=和test_class.cust_name:= all开头的行给出了我预期的相同方法标识符以及缺少运算符或分号错误.
我究竟做错了什么?有没有更简单的方法来解决这个问题?完成后,null值会出现问题吗?
任何人都可以提醒我,允许早期版本的Delphi(例如2010)接受在更高版本中编写的具有domain.sub-domain命名系统的单元的技巧是什么
// Delphi XE2 & later version (comment out for 2010 & earlier):
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,system.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
Vcl.ExtCtrls, Vcl.ComCtrls, System.Math;
Run Code Online (Sandbox Code Playgroud)
而不是D2010和早期的会议
// Delphi 2010 & earlier version (comment out for XE2 & later):
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, Math;
Run Code Online (Sandbox Code Playgroud)
我知道你可以在项目>选项中做些什么但是找不到它并且无法找到关于这个主题的早期论坛帖子.
我是学生,Delphi并不是我编程的主要环境.我知道它是如何工作的,我完全熟悉它的布局.我最近收到一个任务,我必须使用数组,以便通过整数和字符串在列表框中列出它们.这个想法很简单,程序本身很容易制作.
当我尝试在私有或公共声明下声明一个常量时,问题就出现了,并且错误消息指出"'END'预期但是'CONST'找到了".我已经使用公共和私有变量和常量了一段时间,但我不确定发生了什么.
代码如下:
type
TForm1 = class(TForm)
edtDateTime: TEdit;
lstListArrayValues: TListBox;
gbpIntegerArrayOptions: TGroupBox;
gbpStringArrayOptions: TGroupBox;
gbpListBoxOptions: TGroupBox;
btnInitializeIntArray: TButton;
btnAssignIntArray: TButton;
btnDoubleIntArray: TButton;
btnInitializeStrArray: TButton;
btnAssignStrArray: TButton;
btnCapitalStrArray: TButton;
btnDisplayArray: TButton;
btnClearListbox: TButton;
btnDeleteSelected: TButton;
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure btnInitializeIntArrayClick(Sender: TObject);
private
{Private Declarations}
Const
nItems = 5;
var
nBasicsIntArray : array [0..(nItems - 1)] of integer;
nBasicsStrArray : array [0..(nItems - 1)] of string;
public
{ Public declarations }
end;
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,它会说''END'预期,但'CONST'找到了".我使用的是Windows 7和Delphi 7,之前我没有遇到过这个问题.
老实说,我错过了一些愚蠢的东西,但我忽视了一切,我似乎无法找到问题的原因.