我有一个小应用程序,大多数时候在Start-button后面有一个动作,应该从命令行参数/ AUTORUN触发.如果缺少该参数,用户也可以手动按下该参数.
我的问题是我应该在哪里对命令行进行此检查,以便在给出GUI时仍然更新.目前的解决方案是这样,但在动作完成之前不会更新GUI.
procedure TfrmMainForm.FormShow(Sender: TObject);
begin
if FindCmdLineSwitch('AUTORUN') then
btnStart.Click;
end;
Run Code Online (Sandbox Code Playgroud) 我已经阅读了针对FreeAndNil的案例,但仍然不明白为什么我不能在类析构函数中使用此方法?谁能解释一下.
更新:我认为Eric Grange的评论对我来说最有用.链接表明,如何处理它并不明显,这主要是品味问题.FreeAndInvalidate方法也很有用.
如水族馆所述,WebSocket协议(通常被描述为HTML5的关键元素之一)终于得到了祝福(RFC 6455).
哪些WebSocket服务器实现可用于Delphi?
我需要澄清这个案子.
根据我的测试,Result变量定义为:Boolean = False,Integer = 0,String ='',Object = nil等来自第一行.但我从未见过这方面的官方参考.它也有意义,因为这给出了提示.
[DCC警告] Unit1.pas(35):H2077分配给'TForm1.Test'的值从未使用过
function TForm1.Test: Boolean;
begin
Result := False;
// Some arbitrary code here
Result := True;
end;
Run Code Online (Sandbox Code Playgroud)
但是如果我注释掉第一行并且在最后一行之前的某个地方有异常会发生什么?结果=假吗?
如果Result未定义,这意味着我总是必须通过在以后异常的情况下定义Result来启动每个函数.这对我来说毫无意义.
我在Delphi 2007中管理了一个庞大的项目.目标是今年升级到Delphi 10.1柏林.所以在此期间,源代码在两个版本中编译.
如果新Delphi出现问题,我们希望旧版本作为备份.
我在单元dmActions.pas中的问题是从TDataModule继承的单元.
uses
// VCL
ActnList,
ActnMan,
Classes,
Controls,
Forms,
Graphics,
ImgList,
Menus,
SysUtils,
XPStyleActnCtrls,
Variants,
{$IFDEF BOLD_DELPHI16_OR_LATER}
System.ImageList,
System.Actions,
{$ENDIF}
BusinessClasses;
Run Code Online (Sandbox Code Playgroud)
Delphi IDE无法理解我的IFDEF,因此会自动为此插入缺少的单元
uses
// VCL
ActnList,
ActnMan,
Classes,
Controls,
Forms,
Graphics,
ImgList,
Menus,
SysUtils,
XPStyleActnCtrls,
Variants,
{$IFDEF BOLD_DELPHI16_OR_LATER}
System.ImageList,
System.Actions,
{$ENDIF}
BusinessClasses, System.ImageList, System.Actions;
Run Code Online (Sandbox Code Playgroud)
但这不会在柏林用这条消息编译
[dcc32 Error] dmActions.pas(36): E2004 Identifier redeclared: 'System.ImageList'
[dcc32 Error] dmActions.pas(36): E2004 Identifier redeclared: 'System.Actions'
Run Code Online (Sandbox Code Playgroud)
当然,"System.ImageList,System.Actions"不能在D2007中编译.那么解决这个问题的最佳方法是什么?
不确定Bold/Eco在Borland/Codegear/Embarcadero过渡期间发生了什么,但我确实在新版本的Delphi中错过了它.有人知道一个接近的框架吗?
如果没有,也许你可以建议一个接近的库和组件的组合.
我在结构面板中有很多错误.该应用程序使用Delphi 2007编译并运行良好.但代码中有许多代码具有红色下划线.如果我按Ctrl +左键单击它,它会找到原始声明.但是所有这些错误仍然很烦人.
简单的问题.我有一个包含3个组件的面板.所有这些都有Align:= alRight.但问题是在运行时它们的顺序与设计时间不同.
我可以改为使用alCustom强制订购右边界吗?我用的是D2007.
标准VCL文件(如Dialogs,StringUtils等)的单元文件永远不会在项目DPR文件中引用.但是什么时候应该添加对DPR文件的引用?现在我有自己的源文件和自己的组件源.
那么Ravereport,Devexpress,Indy,Gnostice等的源文件呢?我希望尽可能快的codeinsight,但当然我不想在DPR文件中添加膨胀.我使用Delphi 2007
又见这个问题的一个相关的问题.
问候
我知道这个问题从那时起就已经存在(例如,显示自定义消息对话框的最佳方式),但我仍然找不到我想要的东西.
我开始是这样的:
class function TAttracsForm.MessageDlg(const aMsg: string; aDlgType: TMsgDlgType; Buttons: TMsgDlgButtons; aCaptions: array of String; aDefault: TMsgDlgBtn): TModalResult;
var
vDlg: TForm;
i: Integer;
begin
if aButtons.Count = aCaptions.Count then
begin
vDlg := CreateMessageDialog(aMsg, aDlgType, Buttons);
try
for i := 0 aCaptions.Count - 1 do
TButton(vDlg.FindComponent(Buttons[i].Caption)).Caption := aCaptions[i];
vDlg.Position := poDefaultPosOnly;
Result := vDlg.ShowModal;
finally
vDlg.Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
电话会看起来像:
if (MessageDlg('Really quit application ?', mtWarning,
[mbNo, mbCancel, mbYes], {'No save', 'Cancel', 'Save'}) = mrYes) then
Run Code Online (Sandbox Code Playgroud)
但上面的代码当然不编译.我不知道如何在循环中获取一个集合中的一个项目以及如何在开始时获取它的总计数.
delphi ×10
delphi-2007 ×4
bold-delphi ×1
caption ×1
destructor ×1
dialog ×1
html ×1
http ×1
layout ×1
websocket ×1