小编yon*_*joy的帖子

Delphi中三重逻辑

如何在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效率对我来说并不重要.

delphi logic delphi-2006

13
推荐指数
2
解决办法
630
查看次数

SQLite的“ NO ACTION”外键约束到底有什么作用?它与“ RESTRICT”有什么不同?

文件说:

配置“ NO ACTION”仅意味着:当修改或删除数据库中的父键时,不会采取任何特殊操作。

我对这句话的第一个解释是“如果父键被修改或删除,那么就完成了此修改,并且没有采取其他措施”,因此无法保持数据库的完整性,这会引起一些混乱。但是我的测试表明,如果我尝试删除父键(如果子键仍然存在),则会收到异常(“ SQLiteConstraintException:错误代码19:约束失败”)-我正在android 4.0.3 / SQLite下进行测试3.7.x),因此“无操作”的行为似乎与预期的一样。

有人可以解释一下,也许可以举个例子,“ NO ACTION”到底做什么,与“ RESTRICT”有什么不同。

sqlite android

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

在TRichEdit中加载长RTF文本不起作用

如果将长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 delphi-xe4

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

错误无效的PLATFORM变量"MCD"

我刚刚安装了Delphi XE5,因为我想尝试用android开发.

但我无法编译任何东西,因为我总是收到错误信息.这是我编译时得到的错误:

[错误错误] PLATFORM变量"MCD"无效.PLATFORM必须是以下之一:"Win32","Win64","Android","iOSSimulator","iOSDevice"或"OSX32".如果PLATFORM由您的系统环境定义,则必须在RAD Studio IDE中覆盖它,或者在命令行上显式传递给MSBuild; 例如,/ p:Platform = Win32.

delphi delphi-xe5

4
推荐指数
1
解决办法
7341
查看次数

如何为`TBitBtn`设置`ElevationRequired`

我需要标记一个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不是。

delphi delphi-xe4

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

MessageDlg,带有Delphi FireMonkey中的自定义按钮标题

使用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 firemonkey delphi-xe4

0
推荐指数
1
解决办法
5151
查看次数