DDEマクロ例

秀丸上での簡単な検索

秀丸上でのクイックポップアップ検索

Wz上でのクイックポップアップ検索、スペルチェック

 

プログラミングにおける注意点 - C++Builder/DelphiのDDE

C++Builder,Delphiに付属しているVCLのDDE ClientにあるPokeData Transactionは、非同期に固定されています。
(つまり、DdeClientTransaction APIのタイムアウト値がTIMEOUT_ASYNC)
C++Builderなどのような非同期TransactionでPopupSearch項目を使用する場合は、DdeClientTransaction APIを同期モードで呼び出す独自の関数を用意してすべてのDDEトランザクションを行うようにしてください。
(このために、PopupSearchにExecuteを用意しましたが、それだけではうまくいきませんでした(謎)
例:
bool DdePoke( TDdeClientConv *dde, AnsiString Item, AnsiString Data )
{
    HSZ hszItem = DdeCreateStringHandle(ddeMgr->DdeInstId, Item.c_str(), CP_WINANSI );
    if ( !hszItem ) return false;
    HDDEDATA hszDat = DdeCreateDataHandle( ddeMgr->DdeInstId, Data.c_str(), Data.Length() + 1,
        0, hszItem, dde->DdeFmt, 0);

    bool r = false;
    if ( hszDat ){
        HDDEDATA hdata = DdeClientTransaction( (LPBYTE)hszDat, (DWORD)-1, (HCONV)dde->Conv, hszItem,
            dde->DdeFmt, XTYP_POKE, 10000, NULL);   // 同期モード(10秒待つ)
            r = hdata ? true : false;
    }
    DdeFreeStringHandle (ddeMgr->DdeInstId, hszItem);
    return r;
}