在TLama先生回答了我的最后一个问题(如何捕获TTN_LINKCLICK通知?)之后,有一点未得到答复,因为没有问过:)
如果有多个链接,如何识别我在气球上点击的每个链接?
我希望能够在气球中包含多个链接,并以不同方式响应点击.
我在这里再次向你寻求帮助.这次我相信,鉴于我将涉及的问题的特殊性,很少有人会作出回应.我开始在DataSnap的世界里,仍然有一些我不明白我将如何关联这个错误的事情.
我的Delphi是XE(版本1,Update1).我正在使用Postgres生成葡萄牙语(葡萄牙语巴西)的错误消息,因此错误消息有重音符号.连接组件是ZeosLib包.
我正在使用一个对话框"reconcile error"来显示更新应用程序产生的错误并进行测试,我试图插入已存在的记录,从而违反了一个唯一的密钥,从而显示了协调错误对话框.
在对话框的备忘录中,出现的消息被截断,即被剪切.看看这个:
ERRO: duplicar valor da chave viola a restrição de unicidade "uc_usu_va_login"
DETAIL: Chave (va_login)=(admin) já existe.
CONTEXT: comando SQL "INSERT INTO USUARIOS (VA_NOME
,VA_LOGIN
,CH
Run Code Online (Sandbox Code Playgroud)
但实际应该返回的是:
ERRO: duplicar valor da chave viola a restrição de unicidade "uc_usu_va_login"
DETAIL: Chave (va_login)=(admin) já existe.
CONTEXT: comando SQL "INSERT INTO USUARIOS (VA_NOME
,VA_LOGIN
,CH_SENHA
,VA_EMAIL)
VALUES (pVA_NOME
,pVA_LOGIN
,pCH_SENHA
,pVA_EMAIL)"
PL/pgSQL function "idu_usuarios" line 7 at comando SQL
Run Code Online (Sandbox Code Playgroud)
我在服务器上做了一个调试,看看问题是否是ZeosLib,但我发现服务器上生成的错误消息已经完成,证明ZeosLib没有截断消息.一切都是unicode.我的程序和ZeosLib中的所有字符串都是WideString(默认值).
如你所知,要抛出服务器,异常会被DataSnap转发给客户端,在客户端,TClientDataSet的Reconcile方法验证是否存在问题,然后抛出可能出现的着名异常EReconcileError在TClientDataSet的OnReconcileError事件中处理,因此我认为该消息被DataSnap截断.
在客户端我调试Reconcile方法(DBClient.pas),并在抛出异常之前,流进入cpp源代码中的函数,我认为这是库midas.dll,MidasLib.obj的一部分更具体,因为我是使用此策略,不必使用我的应用程序分发DLL.
Check(FDSBase.Reconcile_MD(FReconcileDataSet.FDSBase, FDeltaPacket, VarToDataPacket(Results), Integer(Self), RCB));
Run Code Online (Sandbox Code Playgroud)
此调用在Delphi XE …
我正在尝试使用"tooltips_class32"实现一个简单的气球提示.事实上,除了气球上的链接外,所有行为都是正确的.
我的气球正确创建,我可以看到链接,但当我点击链接没有任何反应.
我试图在两个窗口过程中捕获TTN_LINKCLICK通知.我的工具提示之一和我的工具提示的父窗口之一.
我知道这个通知是以WM_NOTIFY的形式发送的,但是当我删除链接时什么也没做.
那么,如何捕获TTN_LINKCLICK通知?如何让这个在Delphi上运行?
下面是我的TKRKBalloonHint组件的完整代码.
unit KRKBalloonHint;
interface
uses
SysUtils, Classes, Graphics, ExtCtrls, Types, CommCtrl, Controls, Messages,
Windows;
type
TTipIcon = (tiNone,tiInfo,tiWarning,tiError,tiInfoLarge,tiWarningLarge,tiErrorLarge);
TTipAlignment = (taTopLeft,taTopMiddle,taTopRight,taLeftMiddle,taRightMiddle,taBottomLeft,taBottomMiddle,taBottomRight,taCustom);
TMaxWidth = 0..320;
TKRKBalloonHintOption = (kbhoActivateOnShow, kbhoSetFocusToAssociatedWinContronOnDeactivate, kbhoHideOnDeactivate, kbhoHideWithEnter, kbhoHideWithEsc, kbhoSelectAllOnFocus);
TKRKBalloonHintOptions = set of TKRKBalloonHintOption;
TKRKBalloonHint = class(TComponent)
private
FParentHandle: HWND;
FAutoGetTexts: Boolean;
FMaxWidth: TMaxWidth;
FBackColor: TColor;
FForeColor: TColor;
FVisibleTime: Word;
FDelayTime: Word;
FTipHandle: THandle;
FAssociatedWinControl: TWinControl;
FTipTitle: String;
FTipText: String;
FTipIcon: TTipIcon;
FTipAlignment: TTipAlignment;
FShowWhenRequested: Boolean;
FCentered: Boolean;
FForwardMessages: Boolean;
FAbsolutePosition: Boolean; …Run Code Online (Sandbox Code Playgroud)