随着XE7中非阻塞MessageDlg的出现,似乎现在无法有条件地阻止该应用程序.从我们在Windows中关闭(或在XE5中):
procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False;
FCanClose := False;
FMX.Dialogs.MessageDlg('Exit?'
,
TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0,
procedure(const AResult: TModalResult)
begin
if AResult = mrYes then
FCanClose := True;
end
);
CanClose := FCanClose;
end;
Run Code Online (Sandbox Code Playgroud)
仅在表单已关闭后才调用MessageDlg(和匿名过程),从而使对象失效.哦,如果你想知道我为什么使用FCanclose,那是因为我在匿名程序中遇到了"无法捕获Canclose"的编译器错误.
现在我尝试的另一种可能性是将MessageDlg放在FormKeyUp事件处理程序中并捕获vkHardwareBack.
procedure TfrmMain.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
Shift: TShiftState);
var
FService: IFMXVirtualKeyboardService;
begin
if Key = vkHardwareBack then
begin
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyBoardService,
IInterface(FService));
if (FService <> nil) then
begin
if (TVirtualKeyBoardState.Visible in FService.VirtualKeyBoardState) then
else
begin
FMX.Dialogs.MessageDlg('Exit?'
, …Run Code Online (Sandbox Code Playgroud) 我TObject在Delphi XE7(Firemonkey)中有几个类(具有属性)AsJson:
uses
System.Classes, System.SysUtils, XSuperObject;
type
TMyObject = class(TObject)
public
property AsJson: ISuperObject read GetAsJson;
end;
Run Code Online (Sandbox Code Playgroud)
但是,编译器会给我这些警告:
[dcc32 Warning] MyUnit.pas(383): W1009 Redeclaration of 'AsJson' hides a member in the base class
Run Code Online (Sandbox Code Playgroud)
我正在寻找基类TObject并且看不到这样的东西,如果我试图使用它也不是一个有效的字段.我在文档中没有看到关于这样一个属性的内容.只有当属性类型是ISuperObject最新版本XSuperObject(至少几周前来自SVN)时才会出现这种情况.我也试过使用类型Integer,我也得到它.
这个警告在我的场景中意味着什么,我该如何摆脱它?
编辑
它似乎只发生在我XSuperObject使用条款中......
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
XSuperObject in 'C:\...\XSuperObject.pas',
XSuperJSON in 'C:\...\XSuperJSON.pas';
type
TMyObject = class(TObject)
private
FTest: Integer;
public
property AsJson: Integer read FTest;
end;
begin
end. …Run Code Online (Sandbox Code Playgroud) 如何迭代单个字符UTF8String?我需要打印出单个字符而不是字节..
program Project3;
uses
System.SysUtils;
var
Str: UTF8String;
I: Integer;
begin
Str := '?????';
for I := 0 to Length(Str) do
WriteLn(Str[I]);
ReadLn;
end.
Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi XE7开发移动应用程序.我正在使用TIdtcpClient组件与Server应用程序进行交互.我需要知道Android移动和iO移动应用程序,我可以一次发送到服务器的最大数据大小是多少.或者它取决于互联网的速度.请帮帮我
我用delphi 7创建了一个庞大的delphi项目.
这个程序由几个运行时包(bpl)组成,我们要做的是将我们的组件和源代码升级到delphi xe7组件,以便这个程序可以由delphi XE7编译.
但由于它不是一个简单的程序,我们首先想到升级一些运行时包并继续使用nexts包,这样我们就可以逐步升级我们的软件.
我想知道这个想法是否有效:例如,
main.exe(delphi7)+ bpl1(delphi7)+ bpl2(delphi7)+ ... + bpl9(delphi xe7)+ bpl10(delphi xe7)
有没有人试过这些方法?
我有一个ComboBox/LookupComboBox的问题,这是一个非常白痴但我不知道如何通过谷歌搜索它来解决它.我在我的数据库上有一个表,用于保存记录的"Y/N"以指示它是活动(Y)还是非活动(N).但在我的应用程序中,我想向用户显示"是/否"而不只是一个单词,任何人都可以帮助我吗?
谢谢!
当我按ctrl+ shift+ B.在Delphi XE7(安装了CN_Pack)中,我看到以下内容:
当我再次按ctrl+ shift+ B时>^消失.这是什么意思?
根据Delphi文档:
ctrl+ shift+ B 显示缓冲区列表.
这是其他的东西,它是什么?
我有以下编码.每当有人想购买CD时,必须扣除数量.当我使用cd名称编码工作时,但是当我使用字符串时,没有任何反应.请帮忙.
var scd : string;
begin
scd := inputbox('CD Name','Enter CD Name','');
CDQuery.Active := False;
cdquery.SQL.Clear;
CDQuery.SQL.Text := 'Update CD_Table Set Quantity = Quantity - 1 where Cdname = ''scd''';
CDQuery.ExecSQL;
messageDlg('Quantity was updated',mtInformation,[mbOK],0);
CDQuery.SQL.text := 'Select * from CD_Table';
CDQuery.Active := True;
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Delphi 10 Seattle中编译旧项目并收到以下错误消息
找不到类TShellTreeView点击取消忽略.....
TShellTreeView是一个设计时组件,是ShellCtrls软件包的一部分,它始终随Delphi一起提供,通常包含在以下Samples软件包中:
C:\ Users\Public\Documents\Embarcadero\Studio\xx.x\Samples\Object Pascal\VCL\
现在它似乎不再存在了.这个包裹在哪里?
我想手动将Pointer的地址设置为存储在字符串变量中的值.我有:
addr : String;
ptr : Pointer;
Run Code Online (Sandbox Code Playgroud)
然后:
addr:='005F5770';
Run Code Online (Sandbox Code Playgroud)
如何将其分配给ptr?
delphi ×10
delphi-xe7 ×10
android ×2
firemonkey ×2
combobox ×1
ide ×1
indy ×1
lookup ×1
pointers ×1
windows ×1
xsuperobject ×1