我想强制执行
{$SCOPEDENUMS ON}
Run Code Online (Sandbox Code Playgroud)
在项目中的所有单位.
目前我在单位声明后立即将其添加到每个单位:
unit unt_WotcSearch;
{$SCOPEDENUMS ON}
...
Run Code Online (Sandbox Code Playgroud)
有没有办法可以全局设置(例如在*.dpr文件或项目设置中),所以不需要将{$ SCOPEDENUMS ON}添加到数百个单位?
我将部署一个用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 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) 我有一个自定义控件:
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)
其中TMyDateTimePicker是TDateTimePicker的简单后代
TMyDateTimePicker = class(TDateTimePicker)
protected
end;
Run Code Online (Sandbox Code Playgroud)
总结一下我做了什么:
TDateTimePickerTDateTimePickerTDateTimePicker这一切都奏效 - 直到最近我重新安装Delphi XE6(在Windows 10上).
这就是我无法理解为什么我在设计时遇到错误的原因:
找不到类TMyDateTimePicker
为什么要找那个班?该类在实现细节中; 它没有发布用于流式传输.流媒体系统甚至试图创建它!?所以我检查DFM:
object cfBeachBall: TContosoFrobber
Left = 445 …Run Code Online (Sandbox Code Playgroud) 正如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/AppMethod XE6,并将Firemonkey Mobile HD表单添加到空白项目中.
在表单上,我删除了一个BindSourceDB组件,并在结构窗口中查看它,在那里,我可以看到一个ScopeMappings子属性.我还可以ScopeMappings在Object Inspector窗口中看到该属性,它显示了它的TScopeMappings类型.
对于我的生活,我无法弄清楚这个属性是什么/做什么,以及ScopeMappings到底是什么.
我从Embarcadero文档中找到的全部内容如下:http: //docwiki.embarcadero.com/Libraries/XE6/en/Data.Bind.DBScope.TBindSourceDB.ScopeMappings
Data.Bind.DBScope.TBindSourceDB.ScopeMappings
ScopeMappings属性指定一个拥有的集合,其元素是范围映射.ScopeMappings用于添加可以由引用此源组件的表达式引用的名称/值对.
显然,这不是非常有用.
我在网上到处搜索,包括这里的SO,找不到任何东西.请帮忙.
我正在使用线程,这就是我使用互斥锁来锁定共享资源的原因.锁定的基本用法是将资源放在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)
这种方法有任何意义,还是有更好甚至更简单的解决方案?
感谢致敬.
问题1
我有一个使用 Embarcadero RAD XE6 在 delphi 中制作的应用程序。
当我将可执行文件上传到我的网站并从 Chrome 下载时,我收到以下警告并阻止自动下载...
文件通常不被下载,并且可能存在危险。
问题2
我下载了该应用程序,当我运行 exe (Windows8) 时,Smartscreen 启动并显示以下警告:
Windows SmartScreen 阻止无法识别的应用程序启动。运行此应用程序可能会使您的电脑面临风险。
解决方案?
我读过相关内容,但我不确定。
第一个问题(浏览器)。
第二个问题(操作系统,尤其是W8)
所有迹象都表明我需要两件事。诚信和声誉。也就是说,我获得了一个数字证书来签署可执行文件。此外,我还需要多次下载该文件才能被认为是安全的(尽管有更昂贵的证书承诺从一开始就可以节省放电时间)。
我的疑惑
您是如何解决这些问题的?
数字证书(在 Goodaddy、cosigning、InstantSSL、GlobalSign 中获得)是否应用于服务器或 RAD XE6 的可执行文件?
资料来源:
删除锚点时,控件可以自动将其自身调整为其他大小.
删除表单上的控件

设置锚点

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

删除锚点:

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

delphi ×10
delphi-xe6 ×10
delphi-xe5 ×2
firemonkey ×2
android ×1
appmethod ×1
dfm ×1
enums ×1
locking ×1
mutex ×1
windows-8 ×1