我有结构:
{$ifopt FINITEFLOAT ON}
{$message 'FINITEFLOAT option ON' }
{$else }
{$message 'FINITEFLOAT option OFF' }
{$endif }
Run Code Online (Sandbox Code Playgroud)
在我的源码,它将无法编译!它必须是愚蠢的东西.错误是:
E1030编译器指令无效:'$ IFOPT'
在第一线,但它是抱怨的FINITEFLOAT.除了像R +等单字母指令作为IFOPT的参数之外,您似乎无法指定任何内容.
我在这里错过了什么吗?
Is there a standard way to convert between TVarRec and Variant values?
I want to parse an 'array of const' and use the values to populate parameters in a TMSQuery. To do this I'm using a list of column names (generated from TMSQuery.KeyFields), and matching the values in the array with the column names in KeyFields (by position), then using the column name to set the corresponding parameter using ParamByName.
The code below is what I've come up with, but …
我看到几个示例,其中源名称列表来自注册表(HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC数据源).有没有其他方法来获取ODBC数据源名称列表?
我只需要使用Delphi标准组件,所以我不能使用3d party解决方案.
我有一个Delphi 2006应用程序,它可以弹出一个模态对话框以响应错误情况.它似乎进入一种状态,其中一个模态对话框是打开的,位于主窗体的前面,但两种形式都没有响应消息.点击其中任何一个都会给出"bonk".应用程序运行正常,UI正在更新主窗体,但您无法执行任何操作.我想主要形式下很可能还有另一个模态对话框.无论是我的还是Windows的我都不知道.
其他要点:
我打开模态对话框
ModalDialog.PopupParent := MainForm ;
ModalDialog.ShowModal ;
Run Code Online (Sandbox Code Playgroud)如果其他模态对话框打开,我推迟这些错误对话框:
if (Application.ModalLevel = 0) then
{open modal dialog}
Run Code Online (Sandbox Code Playgroud)我的问题有两个部分:
有没有办法以编程方式找出哪个窗口有焦点?然后,我可以为这个场景或最后的手段采取一些操作,我可以提供一个快捷键将其置于前面或采取一些规避行动(取决于对话框),如将ModalResult设置为mrCancel.
这种情况怎么会出现?通常当我在主窗体后面得到一个模态对话框时(我可以通过打开模态对话框,从托盘图标中最小化应用程序,然后再次恢复应用程序) - 应用程序主窗体在对话框前面恢复,对话框仍然保持焦点),我可以通过单击托盘图标再次将它带到前面,或者用Esc键关闭它但在这种情况下它不起作用.
**更新**
Misha的解决方案与TSaveDialog之类的非delphi对话分开.通过Application.ModalPopupMode := pmAuto ;在调用之前添加,我能够让他们工作Execute.
通过"让它工作"我的意思是在以下序列之后保存对话框在前面:
而它没有主要形式ModalPopupMode := pmAuto.
所以我希望这些变化能够帮助解决这个问题(尚未产生).
当数据集已处于插入状态时,如何确定数据感知组件字段是否已被修改?我想知道一个字段是否真的被"修改"了.(我不在乎用户是否在某个字段中输入了某些东西,然后擦除所有内容,这意味着发生了修改).
DataSet.Modified,DataSet.UpdateStatus或ChangeCount都没有解决我的问题.
LE:让我更深入地解释一下.所以,初始数据集看起来像
-------------------------------------
|PK | Field1| Field2| Field3|Field4|
-------------------------------------
| 1 | a | b | c | d |
-------------------------------------
Run Code Online (Sandbox Code Playgroud)
插入后
-------------------------------------
|PK | Field1| Field2| Field3|Field4|
-------------------------------------
| 2 | | | | |
-------------------------------------
| 1 | a | b | c | d |
-------------------------------------
Run Code Online (Sandbox Code Playgroud)
当数据集真正被修改时
-------------------------------------
|PK | Field1| Field2| Field3|Field4|
-------------------------------------
| 2 | avalue| | | |
-------------------------------------
| 1 | a | b | c | …Run Code Online (Sandbox Code Playgroud) 您可能会说在stackOverflow中有很多关于此的讨论,但是大多数都比我需要的更复杂,主要用于其他语言.
我有一个MySQL远程数据库,其中我有一个"帮助"表,其中包含用于填充使用此数据库的动态网站的帮助页面的代码.
我决定制作一个Delphi应用程序来管理该网站,而不是通过网站本身来提高速度和安全性.
我想用一个TRichEdit来制作帮助文本并使用简单的东西,如对齐,粗体,斜体和带下划线的样式.我不想使用图片和字体.
如何选择丰富的样式文本并将其转换为HTML以放入远程数据库中的BLOB字段,然后如果我想再次编辑它,则重新转换为富文本?
我试图从IXMLDocument中获取xml文本.
Doc.XML.Text;
Run Code Online (Sandbox Code Playgroud)
这给了我xml文本,但它包含了xml声明.
<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以获取xml文本,不包括xml声明.我总是可以自己从字符串结果中手动删除它,但我觉得应该有属性或我可以在文档上设置的东西来排除xml声明.
例
Doc.XML.Text输出
<?xml version="1.0"?>
<Certificates>
<Certificate>
</Certificate>
</Certificates>
Run Code Online (Sandbox Code Playgroud) 我有一个包含数百个TActions的大型应用程序.它们中的每一个都被使用并实现所需的不同功能.
可以从应用程序中捕获(挂钩)所有TAction.OnExecute吗?有没有我可以挂钩的Windows消息,所以我可以记录执行的动作名称?
Delphi:如何递减超过255个字符的路径并读取文件属性
我正在编写一个控制台应用程序,需要遍历一个大于255个字符的路径的目录结构,然后读取其中文件的属性.
从历史上看,我从2006年开始使用Turbo Delphi进行递归和FindFirst,但这似乎跳过了大于255个字符的路径.
我可以换掉FindFirst()函数吗?或者我必须采取不同的方法?
这个链接/ pic显示了我想用TStringGrid实现的目标.

此链接/图片显示了我的下面代码产生的结果.

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
const
cProdWidth = 70;
cCountWidth = 45;
cWeightWidth = 55;
var
Index: Integer;
Col, Row: Integer;
begin
StringGrid.ColCount := 10;
StringGrid.RowCount := 2;
StringGrid.Cells[1, 0] := 'Shoulder';
StringGrid.ColWidths[1] := cProdWidth;
StringGrid.Cells[4, 0] …Run Code Online (Sandbox Code Playgroud) delphi ×10
delphi-2006 ×10
ado ×1
dataset ×1
html ×1
odbc ×1
richedit ×1
rtf ×1
syntax-error ×1
tstringgrid ×1
winapi ×1
xml ×1
xmldom ×1