小编zig*_*zig的帖子

TComboBox.AutoCloseUp属性:它做什么?

来自文件:

指定当用户选择项目时,下拉列表是否自动关闭.

我玩过这个属性(结合了AutoCompleteAutoDropDown),我似乎无法弄清楚这个属性的UI行为.

将其设置为True或False我看不出它的行为方式有任何差异.任何人都可以向我解释它到底是做什么的吗?

delphi delphi-7

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

Delphi"default"关键字,旧版Delphi版本中包含Record类型

我在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 delphi-7 delphi-5

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

获取目录列表的最快方法是什么

我需要递归的建立一个树形结构只是目录,对于一个给定根/父路径.像"浏览文件夹"对话框.

Delphi FindFirst(FindFirstFileAPI)没有使用faDirectory并且FindNext将获得所有文件(它faAnyFile不管指定使用哪个faDirectory),而不仅仅是目录.这使得构建树的过程 非常缓慢.

是否有一种快速的方法来获取目录列表(树)而不使用FindFirst/ FindNext

delphi winapi

7
推荐指数
2
解决办法
1360
查看次数

当消息处理程序不调用inherited时会发生什么?

我刚刚注意到我们的一个非常(非常)旧的自定义控件(不是由我创建的)有这个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处理程序会出错?

delphi

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

如何在整个应用程序中恢复/重试损坏的TADOConnection?

我有一个全局数据模块TADOConnection(默认KeepConnection设置为true).我现有的应用程序中有许多使用此全局的数据集和查询TADOConnection.

我想知道是否有一些智能方法可以在短暂的网络断开连接时恢复/重试ado连接?(这种情况有时发生在连接不稳定的客户端).

它很容易重现我需要的东西.只需TADOConnection在启动时打开.打开一些TADODataSet,然后禁用并启用"本地连接".如果您尝试刷新数据集,EOleException则会引发异常

"连接失败"

要么

"[DBNETLIB] [ConnectionWrite(send()).]常规网络错误.检查网络文档"

如果我重新启动应用程序一切都很好.

TADOConnection网络断开时不会触发任何事件.并且TADOConnection.Connected仍然存在true

当然,我可以用一个try/catch每一个TDataSet.OpenExecute但是我正在寻找我的大应用程序的一些"集中式"的解决方案.所以在"连接失败"的情况下,我可以知道哪个数据集正在尝试打开,然后重试.

database delphi adodb delphi-7

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

永久移动和重新订购记录

我有一张桌子,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)

我希望能够"移动"例如AlbaniaBarbados之后(或取决于我的参数)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以反映新订单.有一种简单有效的方法吗?

t-sql sql-server

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

为什么类的实例(TInterfacedObject,IDropTarget)不能自动释放?

我正在实现我的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)

delphi delphi-5 tinterfacedobject

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

如何更改已打开的TADODataSet中的字段顺序?

我有一个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)

我想在不更改命令文本本身的情况下执行此操作.可能吗?

delphi ado

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

Val过程是否使用DecimalSeparator?

StrToFloat使用DecimalSeparator格式设置.

似乎Val只接受包含.小数分隔符的字符串.

_ValExt(Val调用)中的ASM代码看起来它不使用DecimalSeparator.

我可以安全地依赖Val接受带有.小数分隔符的实数字符串的事实(?)吗?

delphi delphi-5

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

仅当 LINQ 中有条件时才选择

我不确定我是否有这个 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)

c# linq

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

标签 统计

delphi ×8

delphi-5 ×3

delphi-7 ×3

ado ×1

adodb ×1

c# ×1

database ×1

linq ×1

sql-server ×1

t-sql ×1

tinterfacedobject ×1

winapi ×1