我们有一个由众多应用程序组成的系统.所有应用程序的版本都同时更改.目前,当我们发布新版本时,我们必须手动打开每个应用程序的项目选项并逐个更改版本.有没有办法在同一版本上编译所有应用程序,例如,将其保存在全局文件中并在编译时,读取此文件并将该版本分配给项目?我只是想消除太多步骤,因为我们计划更频繁地更改版本号.我想在一个地方改变它.可以这样做吗?如何?
是否有Delphi函数通过多字符分隔符而不是单个字符来分割字符串?
例如,当我以这种方式使用该功能时:
SplitString('Whale<->Mammal<->Ocean', '<->')
Run Code Online (Sandbox Code Playgroud)
我会得到这3个字符串的结果:
'Whale', 'Mammal', 'Ocean'
Run Code Online (Sandbox Code Playgroud)
Delphi中有这样的功能吗?
我有一个带有版本信息的应用程序,我想将其包含在setup输出文件名中.例如,如果应用程序有版本,3.10.1我想获取setup_3.10.1.exe输出文件而不是默认值setup.exe作为Inno Setup生成的输出文件.
是否可以将某个应用程序的版本信息包含到设置输出文件名中?
有没有办法在不使用任何Web浏览器控件的情况下在画布上绘制特定的HTML元素内容?
使用此代码,我将元素呈现给窗体的画布(仅作为示例).
它虽然有效,但这段代码不是一个好习惯 - 见下文,为什么......
uses
SHDocVw, MSHTML;
procedure TForm1.Button1Click(Sender: TObject);
var
WebBrowser: TWebBrowser;
HTMLElement: IHTMLElement;
HTMLRenderer: IHTMLElementRender;
begin
WebBrowser := TWebBrowser.Create(nil);
try
WebBrowser.ParentWindow := Application.Handle;
WebBrowser.Navigate('https://stackoverflow.com/questions/2975586/good-delphi-blogs');
while WebBrowser.ReadyState < READYSTATE_COMPLETE do
Application.ProcessMessages;
HTMLElement := (WebBrowser.Document as IHTMLDocument3).getElementById('question');
HTMLRenderer := (HTMLElement as IHTMLElementRender);
HTMLRenderer.DrawToDC(Canvas.Handle);
finally
HTMLElement := nil;
HTMLRenderer := nil;
WebBrowser.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为
有没有一种干净的方法来解决这个使用MSHTML?
我有这个测试程序https://gist.github.com/real-mielofon/5002732
RttiValue := RttiMethod.Invoke(RttiInstance, [10]);
Run Code Online (Sandbox Code Playgroud)
和带接口的简单单元:
unit Unit163;
interface
type
{$M+}
ISafeIntf = interface
function TestMethod(aI: integer): integer; safecall;
end;
{$M-}
type
TSafeClass = class(TInterfacedObject, ISafeIntf)
public
function TestMethod(aI: integer): integer; safecall;
end;
implementation
function TSafeClass.TestMethod(aI: integer): integer;
begin
result := aI+1; // Exception !!
end;
end.
Run Code Online (Sandbox Code Playgroud)
我有kaboom
result := aI+1;
Run Code Online (Sandbox Code Playgroud)
如果它是程序或不安全,那么它没关系:-(
在我的申请中,我有以下记录:
TTransaction = record
Alias: string
Description: string
Creation: TDateTime
Count: Integer
end;
Run Code Online (Sandbox Code Playgroud)
我在这个数组中使用此记录:
Transactions = array of TTransaction;
Run Code Online (Sandbox Code Playgroud)
我在运行时保持数组加载,但在给定时间我需要清除所有数据并添加一些新数据.
仅仅使用它就足够了:
SetLength(Transactions, 0); ?
Run Code Online (Sandbox Code Playgroud)
或者我需要完成一些事情吗?
我正在研究一个从TCustomControl类派生的控件,它可以获得焦点,并且里面有一些内部元素.如果用户使用光标悬停它们,则可以突出显示这些内部元素,您可以选择它们,移动它们等等.现在问题......
如果用户持有或使用修饰符CTRL,我会使用(比如说)聚焦元素执行不同的操作.我想要的是如果用户悬停元素并保持例如键,则更改鼠标光标.非常简单,你只需覆盖和方法,并检查它们的参数是否等于.在这样的代码中:ALTSHIFTCTRLKeyDownKeyUpKeyVK_CONTROL
procedure TMyCustomControl.KeyDown(var Key: Word; Shift: TShiftState);
begin
inherited;
if Key = VK_CONTROL then
Screen.Cursor := crSizeAll;
end;
procedure TMyCustomControl.KeyUp(var Key: Word; Shift: TShiftState);
begin
inherited;
if Key = VK_CONTROL then
Screen.Cursor := crDefault;
end;
Run Code Online (Sandbox Code Playgroud)
即使这不是检查CTRL按键是否被按下和释放的最佳方式(例如,由于现有的Shift状态参数),它可以按预期工作,控制具有焦点,甚至可以获得,但......
我的目标是当用户悬停控件时(或者确切地说,它内部的某个元素)更改鼠标光标,并且CTRL即使我的控件没有焦点也保持例如该键.可以说,所以只需覆盖MouseMove方法并在那里询问修饰符状态.这将是方式,但......
如果用户将鼠标光标停留在我的控件上并按下并释放该CTRL键,该怎么办?对于我的控制,这不会产生任何鼠标移动或按键事件,或者我错了?那么,我的问题很明显......
如果控件没有焦点且用户没有用鼠标移动,如何检测修改键更改?我在想这两个选项,但我希望有一些我错过的东西:
那么,您如何检测当前未关注的控件的修改键更改?
是否有可能以Flip 3D mode编程方式触发Windows Vista上面的系统?

这与手动按CTRL+ WIN+相同TAB
我知道有一个WizardSilent功能可以检查设置是否以静默模式运行,但我找不到与非常静音模式等效的功能(当使用/VERYSILENT命令行参数执行设置时).
有没有办法检测设置是否以非常静音模式运行?
我想阅读一些XML文件的节点,并在一些自定义输入字段中显示它们的值.然后,用户可以根据需要更改值,单击Next按钮,这些值应保存回XML.
如何在InnoSetup脚本中执行此操作?
delphi ×7
inno-setup ×3
delphi-xe2 ×2
delphi-xe3 ×2
winapi ×2
compilation ×1
delphi-2010 ×1
delphi-6 ×1
desktop ×1
finalization ×1
html ×1
msbuild ×1
mshtml ×1
record ×1
rtti ×1
version ×1
windows ×1
xml ×1