标签: delphi-xe6

有没有办法为整个项目全局设置{$ SCOPEDENUMS ON}?

我想强制执行

{$SCOPEDENUMS ON}
Run Code Online (Sandbox Code Playgroud)

在项目中的所有单位.

目前我在单位声明后立即将其添加到每个单位:

unit unt_WotcSearch;
{$SCOPEDENUMS ON}
...
Run Code Online (Sandbox Code Playgroud)

有没有办法可以全局设置(例如在*.dpr文件或项目设置中),所以不需要将{$ SCOPEDENUMS ON}添加到数百个单位?

delphi enums compiler-errors delphi-xe6

6
推荐指数
1
解决办法
433
查看次数

我需要64位版本的stdvcl40.dll吗?

我将部署一个用Delphi编写的64位版本的OCX.OCX要求stdvcl40.dll可用并在目标系统中注册.据我所知,我的Delphi安装中只有32位版本,但由于源代码可用,我应该能够自己创建64位版本.

是否需要或有优势这样做,还是应该坚持使用所包含的版本并仅部署该版本?

编辑 只是为了给出一点背景知识:StdVCL40.dll主要包含一个类型库,它暴露了在System.Win.StdVCL.pas中声明的三个接口.此dll的更高版本还实现了一些处理这些接口的属性页.

删除对stdvcl40.dll的依赖性的结果是这些接口(在我的情况下为IStrings)在我的类型库中不再可用,并且任何引用都被IDispatch替换.

stdvcl40.dll不是一个设计时包,它必须与以前的Delphi版本中的大多数ActiveX库一起部署.我必须部署它,因为否则OCX首先拒绝注册.

它实际上似乎也适用于我的OCX的64位版本,可能是因为Windows COM非常聪明,可以发现没有64位版本,因此需要32位版本.虽然我不确定这是否可行.因此我的问题.

delphi delphi-xe6

6
推荐指数
1
解决办法
1626
查看次数

线程不一致Delphi xe6

因此,在delphi xe4-6中进行线程处理时,我总是面临严重的问题,无论是来自未执行的线程,还是异常处理导致应用程序崩溃,或者只是on terminate方法永远不会被调用.我已被指示使用的所有变通方法变得非常乏味,在XE6中仍然困扰着我的问题.我的代码通常看起来像这样:

procedure TmLoginForm.LoginClick(Sender: TObject);
var
  l:TLoginThread;
begin
  SyncTimer.Enabled:=true;
  l:=TLoginThread.Create(true);
  l.username:=UsernameEdit.Text;
  l.password:=PasswordEdit.Text;
  l.FreeOnTerminate:=true;
  l.Start;
end;



procedure TLoginThread.Execute;
var
  Success     : Boolean;
  Error       : String;
begin
  inherited;
  Success := True;
  if login(USERNAME,PASSWORD) then
  begin
    // do another network call maybe to get dif data.
  end else
  begin
    Success := False;
    Error   := 'Login Failed. Check User/Pass combo.';
  end; 

  Synchronize(
  procedure
    if success = true then
    begin
      DifferentForm.Show;
    end else
    begin
      ShowMessage('Error: '+SLineBreak+Error);
    end;
    SyncTimer.Enabled := False;
  end);
end;
Run Code Online (Sandbox Code Playgroud)

然后我从Delphi和论坛的样本中看到了这个单元:

unit …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading firemonkey delphi-xe6

6
推荐指数
0
解决办法
1445
查看次数

如何告诉Delphi不在DFM中包含未发布的属性?

我有一个自定义控件:

type
   TContosoFrobber = class(TCustomControl)
   private
   end;
Run Code Online (Sandbox Code Playgroud)

在内部,我的组件创建一个控件:

type
   TContosoFrobber = class(TCustomControl)
   private
      FMyDateTimePicker: TDateTimePicker;
   public
      constructor Create(AOwner : TComponent); override;
      property DateTimePicker: TDateTimePicker read FMyDateTimePicker;
   end;

constructor TContosoFrobber.Create(AOwner: TComponent);
begin
   inherted Create(AOwner);

   FMyControl := TMyDateTimePicker.Create(AOwner);
end;
Run Code Online (Sandbox Code Playgroud)

其中TMyDateTimePickerTDateTimePicker的简单后代

TMyDateTimePicker = class(TDateTimePicker)
protected
end;
Run Code Online (Sandbox Code Playgroud)

总结一下我做了什么:

  • 声明一个私有变量 TDateTimePicker
  • 将其公开为类型的公共(即非公开)属性TDateTimePicker
  • 通过多态性,控制实际上是一个后代TDateTimePicker

这一切都奏效 - 直到最近我重新安装Delphi XE6(在Windows 10上).

DFM

这就是我无法理解为什么我在设计时遇到错误的原因:

找不到类TMyDateTimePicker

为什么要找那个班?该类在实现细节中; 它没有发布用于流式传输.流媒体系统甚至试图创建它!?所以我检查DFM:

  object cfBeachBall: TContosoFrobber
     Left = 445 …
Run Code Online (Sandbox Code Playgroud)

delphi dfm delphi-xe6

6
推荐指数
1
解决办法
273
查看次数

Firemonkey TWebBrowser输入替代方案?

正如Embarcadero所说:

" WebBrowser不接受Android上的键盘输入

在Android设备上,屏幕键盘在TWebBrowser控件中不可用.例如,这意味着用户无法完成Web表单.TWebBrowser控件应用于显示信息或文档.应使用FireMonkey控件执行用户交互."

链接

如果我们必须使用像Dropbox或Google Drive这样的云识别页面,这非常烦人.

使用Delphi XE5和REST组件,我可以打开登录页面,但键盘在Android上无法正常运行.

因此,如何使用FireMonkey控件执行交互,因为Embarcadero说:用户交互应该使用FireMonkey控件执行.

编辑:

Delphi XE 6似乎是唯一不错的解决方案:

对TWebBrowser的更新:Windows上可用的Web浏览器(SHDocVw.TWebBrowser)已更新为最新版本的Internet Explorer.

delphi android firemonkey delphi-xe5 delphi-xe6

5
推荐指数
1
解决办法
3664
查看次数

Delphi中如何在Units的初始化部分捕获异常

我有一个第三方单元,女巫在单元的初始化部分引发异常。如何在我的应用程序中捕获此异常?

delphi exception-handling delphi-xe5 delphi-xe6

5
推荐指数
1
解决办法
832
查看次数

什么是Delphi/AppMethod BindSourceDB范围映射以及如何使用它们?

我正在使用Delphi/AppMethod XE6,并将Firemonkey Mobile HD表单添加到空白项目中.

在表单上,​​我删除了一个BindSourceDB组件,并在结构窗口中查看它,在那里,我可以看到一个ScopeMappings子属性.我还可以ScopeMappingsObject Inspector窗口中看到该属性,它显示了它的TScopeMappings类型.

对于我的生活,我无法弄清楚这个属性是什么/做什么,以及ScopeMappings到底是什么.

我从Embarcadero文档中找到的全部内容如下:http: //docwiki.embarcadero.com/Libraries/XE6/en/Data.Bind.DBScope.TBindSourceDB.ScopeMappings

Data.Bind.DBScope.TBindSourceDB.ScopeMappings

ScopeMappings属性指定一个拥有的集合,其元素是范围映射.ScopeMappings用于添加可以由引用此源组件的表达式引用的名称/值对.

显然,这不是非常有用.

我在网上到处搜索,包括这里的SO,找不到任何东西.请帮忙.

delphi bindingsource delphi-xe6 appmethod

5
推荐指数
1
解决办法
814
查看次数

使用单个命令锁定和解锁资源

我正在使用线程,这就是我使用互斥锁来锁定共享资源的原因.锁定的基本用法是将资源放在Lock/unlock块中.

procedure RefreshData;
begin    
   DataLock;
      GetData;
      GetSettings;
      CheckValues;
      ...
   DataUnlock;
end;
Run Code Online (Sandbox Code Playgroud)

因为总有一对锁定/解锁我开始考虑简化锁定/解锁方法,这将在不再需要时自动解锁资源.

所以我的想法是引入新程序,该程序将输入参数作为对precedure的引用.这将使我能够使用匿名方法.

代码将是这样的:

type TBaseProc = reference to procedure;

procedure TMyObject.LockMethod(AMeth: TBaseProc);
begin
  DataLock;
  try
    AMeth;
  finally
    DataUnlock;
  end;
end;


procedure TForm1.RefreshData;
begin
  MyObject.LockMethod(
   procedure 
   begin
     GetData;
     GetSettings;
     CheckValues;
     ...
   end;
  );

end;
Run Code Online (Sandbox Code Playgroud)

这种方法有任何意义,还是有更好甚至更简单的解决方案?

感谢致敬.

delphi mutex locking anonymous-function delphi-xe6

5
推荐指数
1
解决办法
766
查看次数

如何删除浏览器中下载 EXE 的警告以及如何防止 Windows8 中的 SmartScreen 警告?

问题1

我有一个使用 Embarcadero RAD XE6 在 delphi 中制作的应用程序。

当我将可执行文件上传到我的网站并从 Chrome 下载时,我收到以下警告并阻止自动下载...

文件通常不被下载,并且可能存在危险。

问题2

我下载了该应用程序,当我运行 exe (Windows8) 时,Smartscreen 启动并显示以下警告:

Windows SmartScreen 阻止无法识别的应用程序启动。运行此应用程序可能会使您的电脑面临风险。

解决方案?

我读过相关内容,但我不确定。

第一个问题(浏览器)。

  • 在某些网站中,建议将页面添加到 Google 网站管理员工具并等待几天进行分析。
  • 其他地方指示编辑服务器配置,在我的例子中是 IIS,我认为 mime 选项设置正确。

第二个问题(操作系统,尤其是W8)

所有迹象都表明我需要两件事。诚信和声誉。也就是说,我获得了一个数字证书来签署可执行文件。此外,我还需要多次下载该文件才能被认为是安全的(尽管有更昂贵的证书承诺从一开始就可以节省放电时间)。

我的疑惑

  • 您是如何解决这些问题的?

  • 数字证书(在 Goodaddy、cosigning、InstantSSL、GlobalSign 中获得)是否应用于服务器或 RAD XE6 的可执行文件?

  • 数字证书可以解决这两个问题吗?

资料来源

delphi google-chrome ssl-certificate windows-8 delphi-xe6

5
推荐指数
1
解决办法
2263
查看次数

如何在移除锚定时停止控制大小调整?

删除锚点时,控件可以自动将其自身调整为其他大小.

重现步骤

  1. 删除表单上的控件

    在此输入图像描述

  2. 设置锚点

    在此输入图像描述

  3. 调整表格大小; 观察控件的大小调整:

    在此输入图像描述

  4. 删除锚点:

    在此输入图像描述

  5. 观察控件未经许可调整大小:

    在此输入图像描述

delphi delphi-xe6

5
推荐指数
1
解决办法
130
查看次数