嗨我正在使用Inno Setup(基于Delphi)来安装我的安装程序.我想要的只是将用户名放在一个字符串中:我的代码:
var
usrname: string;
begin
usrname := GetEnvironmentVariable('USERNAME');
end;
Run Code Online (Sandbox Code Playgroud)
当我尝试编译我的代码时,总是会出现以下错误消息:
未知标识符'GetEnvironmentVariable'
我究竟做错了什么?我是delphi中的新手,所以正确的方法可能是显而易见的.
我正在使用FloatToText
这种方式:
function ExFloatToStr(Value: Extended): string;
var
Buffer: array[0..63] of Char;
FormatSettings: TFormatSettings;
begin
GetLocaleFormatSettings(GetUserDefaultLCID, FormatSettings);
SetString(Result, Buffer, FloatToText(Buffer, Value, fvExtended, ffGeneral,
18, 0, FormatSettings));
end;
Run Code Online (Sandbox Code Playgroud)
如果我传递给这个函数值9229.99,它返回一个字符串值9229.9900000000016,但它不是我想要的.当我创建一个新项目并在那里复制上面的代码时,它运行良好.它返回9229.99.
他们在不同项目中工作的原因可能是什么?
如何以下为空,C字面翻译struct
里面struct
德尔福(从WINNT.H):
typedef struct _TP_CALLBACK_ENVIRON_V3 {
...
struct _ACTIVATION_CONTEXT *ActivationContext;
...
} TP_CALLBACK_ENVIRON_V3;
Run Code Online (Sandbox Code Playgroud)
我倾向于使用,Pointer
因为这个结构不能被操纵,无论如何它都是指针.我只是好奇如何从字面上翻译它(如果可能的话).我在考虑这样的事情:
type
PActivationContext = ^TActivationContext;
TActivationContext = record
end;
TTPCallbackEnvironV3 = record
...
ActivationContext: PActivationContext;
...
end;
Run Code Online (Sandbox Code Playgroud)
但是,你知道,一个空记录......那么,你将如何将上述结构翻译成Delphi?
什么是MatchesMask
C#.NET 中的Delphi 函数?我如何使用它,以及我需要包含哪些命名空间参考?
MatchesMask
帮助中描述的功能:
指示文件名是否符合筛选字符串指定的格式.
调用MatchesMask以使用Mask参数检查Filename参数以描述有效值.有效掩码由文字字符,集合和通配符组成.
每个文字字符必须匹配字符串中的单个字符.与文字字符的比较不区分大小写.
每组以一个开口括号([)开头,以一个右括号(]结束.括号之间是集合的元素.每个元素都是文字字符或范围.范围由初始值,短划线( - )和最终值指定.不要使用空格或逗号分隔集合的元素.集合必须与字符串中的单个字符匹配.如果字符与集合中的某个文字字符相同,或者如果它在集合中的某个范围内,则该字符与集合匹配.如果字符与初始值,最终值匹配,或者在两个值之间,则字符在范围内.所有比较都不区分大小写.如果集合的左括号后面的第一个字符是感叹号(!),则该集合将匹配集合中不包含的任何字符.
通配符是星号(*)或问号(?).星号与任意数量的字符匹配.问号与单个任意字符匹配.
如果字符串与掩码匹配,则MatchesMask返回true.如果字符串与掩码不匹配,则MatchesMask返回false.如果掩码在语法上无效,则MatchesMask会引发异常.
注意:Filename参数不必是文件名.MatchesMask可用于检查字符串与任何语法正确的掩码.
我正在使用Inno设置来提供软件包.它会检测Access的版本并弹出消息.我想让消息告诉用户他们已经下载了错误的版本并停止安装.目前Inno脚本使用
itd_downloadafter(NoRuntimePage.ID);
Run Code Online (Sandbox Code Playgroud)
显示一条消息,告诉用户他们需要安装AccessRuntime.当用户按下它时,它会下载AccessRuntime并继续.我想为我的新脚本更改此信息,告诉用户他们有错误的版本,然后在他们按下一个或只是取消时结束安装脚本.任何人都可以帮我解决这个问题吗?
使用Delphi安装的Delphi XE2 Update 4和Indy组件10.5.8.0.
我正在尝试使用的网站是出于安全原因故意向我发送一个已过期日期的cookie.这是他们的故意,我必须忍受它,与他们合作的其他开发人员已经设法这样做了.
服务器对我的响应IdHTTP.Get()
如下所示:
Recv 8/30/2012 3:06:15 PM: HTTP/1.1 200 OK<EOL>
Date: Thu, 30 Aug 2012 19:06:35 GMT<EOL>
Server: Apache/2.2.3 (CentOS)<EOL>
X-Powered-By: PHP/5.1.6<EOL>
Set-Cookie: dati=eJxLtDKxqi62MrdSykyJLy1OLVKyLrYytVIyNjcxtISyc%2FLTM%2FNAbKAqt4CgYJfUMhDPEqinOB4omZ6aAuIbWilFgmkDkGGpeSWZaZkQ8wyNrZTSchKLMwryM%2FNK4ouKlaxrAYdvJUQ%3D;
expires=Thu, 01-Jan-1970 00:03:00 GMT<EOL>
Content-Length: 16<EOL>
Connection: close<EOL>
Content-Type: text/plain;; charset=ISO-8859-1<EOL><EOL>
0 24.141.251.145
Run Code Online (Sandbox Code Playgroud)
请注意1970年到期!我现在已经使用Indy 3天了,尽管我已经知道这个创建cookie的尝试只是被IdHttp和相关的CookieManager忽略了.
假设我需要接收并使用cookie,那么捕获它的正确方法是什么,或者我现在应该跑掉尖叫?我有很多德尔福的经验,但这是我第一次涉足互联网连接的精彩世界,这个到期的到期cookie业务让我感到头疼!
我一直试图在边框中绘制一个带有间距的圆角矩形,但我似乎无法使用Canvas.RoundRect函数找到一种方法来做到这一点,而且我自己画数据并不是很好,我可以画画使用Canvas.MoveTo和Canvas.LineTo函数的间距矩形,但我不知道如何使边缘圆化.目前我正在做的是我在想要在边框中制作间距的地方制作黄色矩形,但问题是当我打印时我必须直接在打印机画布上绘图而我必须在透明纸上绘图,所以背景颜色会导致问题.任何可以帮我构建自定义绘图程序或告诉我如何擦除该区域并仍然在没有任何背景颜色的透明纸上打印的人.黄色背景颜色仅供预览,当我绘制到打印机画布时,背景是透明的.
通过边界线中的间距查看图像以了解我的意思.
谢谢
我想知道如何比较列表框之间的项目.在我的主表单上有两个列表框.我想通过点击事件将项目从第1个添加到第2个,但是当使用它时,相同的项目将在第2个列表框中相乘.任何想法解决"文件已存在"?
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := ListBox1.Items.Count - 1 downto 0 do
if ListBox1.Selected[i] then
ListBox2.Items.Add(ListBox1.Items.Strings[i]);
end;
Run Code Online (Sandbox Code Playgroud) 使用Dephi XE,当用户单击按钮时,我希望能够在StringGrid(SG)中选择单元格(没问题),然后允许用户立即开始键入该单元格.
SG.Row := DesiredRow;
SG.Col := 1;
SG.SetFocus;
Run Code Online (Sandbox Code Playgroud)
这会将所需的单元格设置为蓝色,但用户必须单击要输入的单元格.我希望用户能够在单击按钮后立即开始键入,而无需使用鼠标.
delphi ×8
c# ×2
inno-setup ×2
c ×1
c#-4.0 ×1
delphi-5 ×1
delphi-xe2 ×1
dll ×1
indy ×1
pascalscript ×1
struct ×1
tstringgrid ×1
winapi ×1