小编zig*_*zig的帖子

如何为特定控件创建自己的自定义提示?

我需要为特定控件(而不是整个应用程序)创建一个自定义提示窗口(具有它自己的颜色和布局)

提示文本本身不会连接到该特定Hint属性控件.

正如我所建议的那样,我写了一个处理程序CM_HINTSHOW(如果控件具有这个功能ShowHint=True):

procedure TMyControl.CMHintShow(var Message: TMessage);
begin
  Form1.caption := 'x';
  // Here I will display my own Hint window 
  // inherited;
end;
Run Code Online (Sandbox Code Playgroud)

但现在,当提示超时时,我怎么知道何时/何处隐藏它?既没有CM_HINTSHOWCM_HINTSHOWPAUSE给我这个信息.

delphi delphi-7

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

如何在D5中实现VarIsNumeric?

我已经查看了D2009的来源,但我仍然不确定如何在Delphi 5中正确实现VarIsNumeric(Variants)函数(没有TVarType).

我现在正在使用它:

function VarIsNumeric(const V: Variant): Boolean;
begin
  Result := VarType(V) in [varSmallInt, varInteger, varBoolean,
                           varByte,
                           varSingle,
                           varDouble];
end;
Run Code Online (Sandbox Code Playgroud)

它是否正确?

delphi delphi-5

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

如何缓存函数布尔结果

我有这个功能:

var
  _WordApplicationExistsCache: Integer = -1; // Cache result

function WordApplicationExists: Boolean;
var
  WordObj: OleVariant;
begin
  if (_WordApplicationExistsCache = -1) then
  begin
    Result := False;
    try
      try
        WordObj := CreateOleObject('Word.Application');
        WordObj.Visible := False;
        WordObj.Quit;
        WordObj := Unassigned;
        Result := True;
      except
        // error
      end;
    finally
      _WordApplicationExistsCache := Ord(Result); // 0;1
    end;
  end
  else
  begin
    Result := Boolean(_WordApplicationExistsCache);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我试图在应用程序生命周期中只调用一次此函数.我可能根本不会调用这个函数.

这是正确的模式吗?这可以做得更好吗?

编辑:我能想到的另一种方式,在这种情况下是使用2个变量:

var
  _WordApplicationExistsInitialized: Boolean = False; // Cache result
  _WordApplicationExistsCacheResult: Boolean; // Undefined ?

function WordApplicationExists: Boolean;
var
  WordObj: …
Run Code Online (Sandbox Code Playgroud)

delphi optimization delphi-7

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

如何替换字符串模式?

我有这个输入字符串:

Hello <foo> context61 Hi: context:file/  hello context715: context666:file/ foo
Run Code Online (Sandbox Code Playgroud)

我的目标是每次出现的替换(清理)替换context[anything]:为空字符串.这anything部分可能是空的.

输出应如下所示:

Hello <foo> context61 Hi: file/  hello  file/ foo
Run Code Online (Sandbox Code Playgroud)

我尝试过无尽的尝试,但在正则表达方面我只是一个菜鸟.有人可以帮忙吗?

regex vbscript

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

图标句柄的生命周期从ExtractIconEx返回

我正在使用ExtractIconEx提取图标句柄(以后再使用它们):

ExtractIconEx("c:\\progra~1\\winzip\\winzip32.exe", 0, &hIconLarge, &hIconSmall, 1);
Run Code Online (Sandbox Code Playgroud)

我将句柄存储在一个对象中,然后使用图标句柄DrawIcon.当对象被释放时,我通过破坏两个句柄DestroyIcon.

我的问题:是否保证我的应用程序可以使用并拥有这两个句柄(因为它的整个生命周期),或者我应该CopyIcon用于此目的?

winapi icons

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

替代WHERE子句中的SET ANSI_NULLS OFF

我有一个SP,它有一个非常复杂的SQL语句,我需要能够将某些列与NULL进行比较,例如

...
FROM Categories
WHERE PID = @parentID
Run Code Online (Sandbox Code Playgroud)

@parentID是一个SP参数,可以是有效的NULL.
PID(父ID)uniqueidentifier也可以是有效的NULL(顶级类别).我可以使用,SET ANSI_NULLS OFF文档说:

在SQL Server的未来版本中,ANSI_NULLS将始终为ON,并且将选项明确设置为OFF的任何应用程序都将生成错误.避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序.

什么可以是一个优雅的方式,而不是与重复相同的查询(S)IS NULL的情况下@parentID=NULL(也不能使用动态SQL):

IF @parentID IS NULL 
  SELECT...WHERE PID IS NULL
ELSE
  SELECT...WHERE PID = @parentID
Run Code Online (Sandbox Code Playgroud)

编辑:我想避免一个IF因为我讨厌重复(巨大)代码.

sql sql-server

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

标签 统计

delphi ×3

delphi-7 ×2

delphi-5 ×1

icons ×1

optimization ×1

regex ×1

sql ×1

sql-server ×1

vbscript ×1

winapi ×1