模仿Windows的文本框右键菜单

包括dxUndo,dxCut,dxCopy,dxDelete,dxPaste,dxSelectAll;分别对应 撤销,剪切,复制,删除,粘贴,全选;在Form的AppEventsIdle事件中加入以下代码,自动设置以上项目的Enabled属性(如:只有在选择文本后剪切和复制才可用)!

(尚待改进...)

void __fastcall TFormMain::AppEventsIdle(TObject *Sender, bool &Done)
{
    HWND hFocus = GetFocus();
    dxUndo->Enabled = SendMessage(hFocus, EM_CANUNDO, 0, 0);
    unsigned int pSelText = SendMessage(hFocus, EM_GETSEL, 0, 0);
    unsigned int SelLen = HIWORD(pSelText)-LOWORD(pSelText);
    dxCut->Enabled = SelLen>0;
    dxCopy->Enabled = dxCut->Enabled;
    dxDelete->Enabled = dxCut->Enabled;

    bool IsEdit;
    if (dynamic_cast<TCustomEdit*>(FindControl(hFocus)))
        IsEdit = true;
    else {
        char buf[17]="";
        IsEdit = GetClassName(hFocus,buf,sizeof(buf))>0 && !strcmpi(buf,"Edit");
    }
    dxPaste->Enabled = IsEdit && IsClipboardFormatAvailable(CF_TEXT);

    unsigned int TextLen = GetWindowTextLength(hFocus);
    dxSelectAll->Enabled = IsEdit && TextLen>0 && TextLen!=SelLen;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值