来自文件:
指定当用户选择项目时,下拉列表是否自动关闭.
我玩过这个属性(结合了AutoComplete
和AutoDropDown
),我似乎无法弄清楚这个属性的UI行为.
将其设置为True或False我看不出它的行为方式有任何差异.任何人都可以向我解释它到底是做什么的吗?
我在Delphi Detours库中有这个代码,我正在尝试移植:
type
TInstruction = record
Archi: Byte; { CPUX32 or CPUX64 ! }
AddrMode: Byte; { Address Mode }
Addr: PByte;
VirtualAddr: PByte;
NextInst: PByte; { Pointer to the Next Instruction }
OpCode: Byte; { OpCode Value }
OpType: Byte;
OpKind: Byte;
OpTable: Byte; { tbOneByte,tbTwoByte,... }
OperandFlags: Byte;
Prefixes: Word; { Sets of Prf_xxx }
...
end;
var
Inst: TInstruction;
begin
...
Inst := default (TInstruction); // <-
Inst.Archi := CPUX;
Pvt := PPointer(AIntf)^; // vTable !
PCode …
Run Code Online (Sandbox Code Playgroud) 我需要递归的建立一个树形结构只是目录,对于一个给定根/父路径.像"浏览文件夹"对话框.
Delphi FindFirst
(FindFirstFile
API)没有使用faDirectory
并且FindNext
将获得所有文件(它faAnyFile
不管指定使用哪个faDirectory
),而不仅仅是目录.这使得构建树的过程 非常缓慢.
是否有一种快速的方法来获取目录列表(树)而不使用FindFirst
/ FindNext
?
我刚刚注意到我们的一个非常(非常)旧的自定义控件(不是由我创建的)有这个WM_SIZE
消息处理程序(我在TPanel
这里用于演示):
TPanel = class(ExtCtrls.TPanel)
private
procedure WMSize(var Message: TWMSize); message WM_SIZE;
end;
procedure TPanel.WMSize(var Message: TWMSize);
begin
DoSomethingWhenResized;
end;
Run Code Online (Sandbox Code Playgroud)
该inherited
不会被调用.在DoSomethingWhenResized
创建其在控制的油漆过程中使用的高速缓存的梯度位图.
每个东西"看起来"并且表现得很好,但我只是想知道是否因为没有先调用inherited
处理程序会出错?
我有一个全局数据模块TADOConnection
(默认KeepConnection
设置为true).我现有的应用程序中有许多使用此全局的数据集和查询TADOConnection
.
我想知道是否有一些智能方法可以在短暂的网络断开连接时恢复/重试ado连接?(这种情况有时发生在连接不稳定的客户端).
它很容易重现我需要的东西.只需TADOConnection
在启动时打开.打开一些TADODataSet
,然后禁用并启用"本地连接".如果您尝试刷新数据集,EOleException
则会引发异常
"连接失败"
要么
"[DBNETLIB] [ConnectionWrite(send()).]常规网络错误.检查网络文档"
如果我重新启动应用程序一切都很好.
TADOConnection
网络断开时不会触发任何事件.并且TADOConnection.Connected
仍然存在true
当然,我可以用一个try/catch每一个TDataSet.Open
或Execute
但是我正在寻找我的大应用程序的一些"集中式"的解决方案.所以在"连接失败"的情况下,我可以知道哪个数据集正在尝试打开,然后重试.
我有一张桌子,Items
例如
ID Name ItemOrder
----------------------
16 Albania 1
13 Chile 2
11 Barbados 3
10 France 4
...
Run Code Online (Sandbox Code Playgroud)
我在我的客户端应用程序中显示为
SELECT * FROM Items ORDER BY ItemOrder
Run Code Online (Sandbox Code Playgroud)
我希望能够"移动"例如Albania
和Barbados
之后(或取决于我的参数)France
或任何其他记录.所以结果是(移动After
记录France
):
13 Chile 1
10 France 2
16 Albania 3
11 Barbados 4
Run Code Online (Sandbox Code Playgroud)
结果Before
是:
13 Chile 1
16 Albania 2
11 Barbados 3
10 France 4
Run Code Online (Sandbox Code Playgroud)
我需要永久更新ItemOrder
以反映新订单.有一种简单有效的方法吗?
我正在实现我的IDropTarget
基础:如何在不处理Windows消息的情况下允许表单接受文件丢弃?
David 的实施工作正常.但是IDropTarget
(TInterfacedObject
)对象不会自动释放,即使设置为'nil'也不会.
部分代码是:
{ TDropTarget }
constructor TDropTarget.Create(AHandle: HWND; const ADragDrop: IDragDrop);
begin
inherited Create;
FHandle := AHandle;
FDragDrop := ADragDrop;
OleCheck(RegisterDragDrop(FHandle, Self));
//_Release;
end;
destructor TDropTarget.Destroy;
begin
MessageBox(0, 'TDropTarget.Destroy', '', MB_TASKMODAL);
RevokeDragDrop(FHandle);
inherited;
end;
...
procedure TForm1.FormShow(Sender: TObject);
begin
Assert(Panel1.HandleAllocated);
FDropTarget := TDropTarget.Create(Panel1.Handle, nil) as IDropTarget;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FDropTarget := nil; // This should free FDropTarget
end;
var
NeedOleUninitialize: Boolean = False;
initialization
NeedOleUninitialize := Succeeded(OleInitialize(nil)); …
Run Code Online (Sandbox Code Playgroud) 我有一个TADODataSet
从DB加载一些列(一个SP,但这没关系).例如:
SELECT A, B, C, D FROM Foo
Run Code Online (Sandbox Code Playgroud)
现在,在我打开数据集后,是否可以更改字段的顺序(或交换它们),TADODataSet
以便它包含例如:
C, D, A, B
Run Code Online (Sandbox Code Playgroud)
我想在不更改命令文本本身的情况下执行此操作.可能吗?
StrToFloat
使用DecimalSeparator
格式设置.
似乎Val
只接受包含.
小数分隔符的字符串.
从_ValExt
(Val
调用)中的ASM代码看起来它不使用DecimalSeparator
.
我可以安全地依赖Val
接受带有.
小数分隔符的实数字符串的事实(?)吗?
我不确定我是否有这个 Q 的正确标题。无论如何,我正在尝试将分隔字符串解析为 Enum 元素列表:
public enum MyEnum { Enum1, Enum2, Enum3 }
Run Code Online (Sandbox Code Playgroud)
给定输入:
string s = "Enum2, enum3, Foo,";
Run Code Online (Sandbox Code Playgroud)
我只想输出MyEnum
(忽略大小写)中存在的部分:
[MyEnum.Enum2, MyEnum.Enum3]
IEnumerable<MyEnum> sl =
s.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select(a => { if (Enum.TryParse(a, true, out MyEnum e)) return e; else return nothing ??? })
Run Code Online (Sandbox Code Playgroud)
如何从Select()
ifTryParse()
失败中返回“无” ?
我可以做一件丑陋的事情,比如:
IEnumerable<MyEnum> sl =
s.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Where(a => Enum.TryParse(a, true, out MyEnum dummy))
.Select(a => Enum.Parse(typeof(MyEnum), …
Run Code Online (Sandbox Code Playgroud)