如何在Delphi中最好地实现三值逻辑?
我在想
type
TExtBoolean = (ebTrue, ebFalse, ebUnknown);
Run Code Online (Sandbox Code Playgroud)
同
function ExtOr(A: TExtBoolean; B: TExtBoolean): TExtBoolean;
begin
if (A = ebTrue) or (B = ebTrue) then
Result := ebTrue
else if (A = ebFalse) and (B = ebFalse) then
Result := ebFalse
else
Result := ebUnknown;
end;
Run Code Online (Sandbox Code Playgroud)
等等.
但这似乎并不是很优雅.有更好的方法吗?
编辑:优雅我的意思是易于使用.实现越优雅越好.CPU效率对我来说并不重要.
该文件说:
配置“ NO ACTION”仅意味着:当修改或删除数据库中的父键时,不会采取任何特殊操作。
我对这句话的第一个解释是“如果父键被修改或删除,那么就完成了此修改,并且没有采取其他措施”,因此无法保持数据库的完整性,这会引起一些混乱。但是我的测试表明,如果我尝试删除父键(如果子键仍然存在),则会收到异常(“ SQLiteConstraintException:错误代码19:约束失败”)-我正在android 4.0.3 / SQLite下进行测试3.7.x),因此“无操作”的行为似乎与预期的一样。
有人可以解释一下,也许可以举个例子,“ NO ACTION”到底做什么,与“ RESTRICT”有什么不同。
如果将长RTF-sequenz(例如150 000个字符串)流式传输到TRichEdit控件中(在XE4中),则控件不会显示文本,而是显示原始RTF代码:
{\rtf1\ansi\ansicpg1252\deff0...
Run Code Online (Sandbox Code Playgroud)
怎么了?
procedure TForm1.Button1Click(Sender: TObject);
var
RtfText: string;
Stream: TStringStream;
begin
RtfText := GenerateRtfText();
Stream := TStringStream.Create(RtfText);
try
RichEdit2.PlainText := False;
RichEdit2.Lines.LoadFromStream(Stream); //<--- ERROR: RichEdit displays raw RTF-Code
// if RtfText is too long
if StartsText('{\rtf', RichEdit2.Lines.Text) then
begin
ShowMessage('Oh no, not converted!');
//WORKAROUND: 2nd try seems to work...
//Stream.Position := 0;
//RichEdit2.Lines.LoadFromStream(Stream);
end;
finally
Stream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
例如,具有以下RTF生成功能:
function TForm1.GenerateRtfText: string;
var
I: Integer;
Stream: TStringStream;
const
DOES_WORK_COUNT = 10000;
DOES_NOT_WORK_COUNT = 15000;
begin
//Fill …Run Code Online (Sandbox Code Playgroud) 我刚刚安装了Delphi XE5,因为我想尝试用android开发.
但我无法编译任何东西,因为我总是收到错误信息.这是我编译时得到的错误:
[错误错误] PLATFORM变量"MCD"无效.PLATFORM必须是以下之一:"Win32","Win64","Android","iOSSimulator","iOSDevice"或"OSX32".如果PLATFORM由您的系统环境定义,则必须在RAD Studio IDE中覆盖它,或者在命令行上显式传递给MSBuild; 例如,/ p:Platform = Win32.
我需要标记一个TBitBtn(不是TButton),按钮动作需要提升。我设置ElevationRequired为 True,但我没有得到盾牌图标。
要复制,请将 aTButton和 aTBitBtn放在表单上:
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.ElevationRequired := True;
BitBtn1.ElevationRequired := True;
end;
Run Code Online (Sandbox Code Playgroud)
Button1显示有盾牌图标,BitBtn1不是。
使用VCL,您可以使用CreateMessageDialog自定义按钮标题生成消息对话框.
随着FMX CreateMessageDialog似乎不再存在(自XE3以来).
除了从头开始重建消息对话框之外,有没有办法使用FireMonkey自定义按钮标题?
我希望能够调用这里描述的函数:
MessageDlg(
'Really quit application ?', mtWarning,
[ButtonInfo(mbNo, 'Do&n''t save'),
ButtonInfo(mbCancel, '&Cancel'),
ButtonInfo(mbYes,'&Save')],
mbYes
);
Run Code Online (Sandbox Code Playgroud) delphi ×5
delphi-xe4 ×3
android ×1
delphi-2006 ×1
delphi-xe5 ×1
firemonkey ×1
logic ×1
sqlite ×1