EmptyPage.jp > WZ Resources > Just a Gadget

Just a Gadget

小物マクロの部屋

単機能マクロや、お遊びマクロのサンプルです。Copy & Pasteであなたのマクロファイルに貼り付けてご使用ください。また、これらのマクロをまとめて収録している小物マクロ集(gadget.txc)をダウンロードすることもできます。

全画面表示

IEではF11キーで全画面表示状態にすることができます。WZにも [全画面表示] コマンドが用意されていますが([表示] メニュー)、その挙動にしっくりこない人は少なくないと思います。そこで、それっぽい動作をするマクロを作ってみました。画面いっぱいに編集領域が広がります。もう一度実行するともとに戻ります。

#include <windows.h>

//## 全画面表示
textvar BOOL fDispIndexbar;
textvar BOOL fDispMenubar;
textvar BOOL fDispToolbar;
textvar BOOL fDispFunctionKey;
textvar BOOL fDispStatusbar;

textvar BOOL fDispFull;

void dispfull(TX *text)
{
    int style;
    if ( text::fDispFull ) {
        // 復帰
        text->fDispIndexbar = text::fDispIndexbar;
        text->fDispMenubar = text::fDispMenubar;
        text->fDispToolbar = text::fDispToolbar;
        text->fDispFunctionKey = text::fDispFunctionKey;
        text->fDispStatusbar = text::fDispStatusbar;
        style = SW_RESTORE;
    } else {
        // 全画面化
        text::fDispIndexbar = text->fDispIndexbar;
        text::fDispMenubar = text->fDispMenubar;
        text::fDispToolbar = text->fDispToolbar;
        text::fDispFunctionKey = text->fDispFunctionKey;
        text::fDispStatusbar = text->fDispStatusbar;
        // ★カスタマイズ
        // 全画面化したときに表示させておきたいものは、
        // 「FALSE」を「TRUE」に変更してください。
        text->fDispIndexbar = FALSE;    // タイトルバー
        text->fDispMenubar = FALSE;     // メニューバー
        text->fDispToolbar = FALSE;     // ツールバー
        text->fDispFunctionKey = FALSE; // ファンクションキー
        text->fDispStatusbar = FALSE;   // ステータスバー
        // ★カスタマイズここまで
        style = SW_MAXIMIZE;
    }
    ShowWindow(text->hwndbase, style);
    txFlushUI(text);
    text::fDispFull = !text::fDispFull;
}

ファイル履歴整理

すでに存在しないファイルの履歴を一覧表示し、削除します。間違ってディレクトリを開こうとしたときの履歴なども削除されます。

//## ファイル履歴整理
void clnfhist(TX *text)
{
    sysLock(LOCK_HIST);
    HSTRBLK sb = sbFromHist(HIST_FILE); // ファイル履歴
    TX *text2 = textnew();
    int i, maxi = sbGetCount(sb);
    txstr sztemp;
    for ( i = 0 ; i < maxi ; i++ ) {
        sztemp = sbRead(sb, i);
        if ( !fileIsExist(sztemp) || pathIsDirectory(sztemp) ) {
            // ファイルが存在しない、またはディレクトリである
            txInsertf(text2, "%s\n", sztemp);
        }
    }
    if ( txGetEdit(text2) ) {
        HDIALOG hd = dialog("「最近使ったファイル」の整理");
        dialogList(hd, "リンク先が見つからない履歴", text2, 60, 10);
        dialogCaption(hd, "「OK」を押すと、上記の履歴は削除されます。");
        if ( IDOK == dialogOpen(hd) ) {
            txJumpFileTop(text2);
            while ( txGetPara(text2, sztemp) ) {
                sbDel(sb, sztemp);
                if ( !txNextPara(text2) ) break;
            }
            information("リンク先の見つからない履歴を削除しました。");
        }
    } else {
        // text2 が編集されていない = リンク切れなし
        information("リンク先の見つからない履歴はありません。");
    }
    textclose(text2);
    sysUnlock(LOCK_HIST);
}

表示切替

行番号や段落記号などの表示/非表示を切り替えます。キーに割り当てると、通常の「文書の設定」の表示状態と使いわけることができて便利です。

//## 表示切替
textvar BOOL fDispLinenum;
textvar BOOL fDispLf;
textvar BOOL fDispTab;
textvar BOOL fDispEof;
textvar BOOL fDispControl;
textvar BOOL fDispJspace;

textvar BOOL fDispSwitch;

void switchdisp(TX *text)
{
    if ( text::fDispSwitch ) {
        // 復帰
        text->fDispLine = text::fDispLinenum;
        text->fDispTab = text::fDispTab;
        text->fDispLf = text::fDispLf;
        text->fDispEof = text::fDispEof;
        text->fDispControl = text::fDispControl;
        text->fDispJspace = text::fDispJspace;
    } else {
        // 切り替え
        text::fDispLinenum = text->fDispLine;
        text::fDispTab = text->fDispTab;
        text::fDispLf = text->fDispLf;
        text::fDispEof = text->fDispEof;
        text::fDispControl = text->fDispControl;
        text::fDispJspace = text->fDispJspace;
        // ★カスタマイズ
        // 表示切替時に表示させたいものは TRUE を、表示させた
        // くないものは FALSE を指定してください。
        text->fDispLine = TRUE;     // 行番号
        text->fDispTab = TRUE;      // タブ
        text->fDispLf = TRUE;       // 改行
        text->fDispEof = TRUE;      // ファイル終端
        text->fDispControl = TRUE;  // 制御文字
        text->fDispJspace = TRUE;   // 全角スペース
        // ★カスタマイズここまで
    }
    text::fDispSwitch = !text::fDispSwitch;
    txFlush(text);
}

設定フォルダを開く

設定フォルダを開きます。よくカスタマイズをしたり、マクロを書く人向けの機能です。ふたつの関数がありますが、ネットワークライセンスで使用しているとそれぞれ異なる動作をします。

//## 設定フォルダを開く
void userconfig(TX *text)
{
    // ユーザ設定フォルダを開く
    txstr szpath;
    pathFullConfig(szpath, \"wz:\");
    shellExecute(szpath, "open");
}

void wzconfig(TX *text)
{
    // WZ 設定フォルダを開く
    txstr szpath;
    pathFullExedir(szpath, \"wz:\");
    shellExecute(szpath, "open");
}

ウィンドウを半透明に

WZのウィンドウを半透明にします。Windows 2000上でのみ動作します(Windows Meでは未確認)。なんの役に立つかは訊かないでください。

#include <windows.h>

//## ウィンドウを半透明に
extern "user32.dll" {
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED (0x80000)

#define LWA_ALPHA 2

BOOL WINAPI SetLayeredWindowAttributes(
    HWND hwnd,
    COLORREF crKey,
    BYTE bAlpha,
    DWORD dwFlags
);

#endif  /* WS_EX_LAYERED */
}

void translucent(TX *text)
{
    // ウィンドウを半透明にする (Windows 2000 専用)。
    // ★カスタマイズ
    int rate = 50;  // 透明度。百分率で指定する。
    // ★カスタマイズここまで
    HWND hwnd = text->hwndbase;
    LONG exstyle = GetWindowLong(hwnd, GWL_EXSTYLE);
    if ( exstyle & WS_EX_LAYERED ) {
        // すでに半透明状態なら元に戻す
        SetWindowLong(hwnd, GWL_EXSTYLE, exstyle & ~WS_EX_LAYERED);
        RedrawWindow(hwnd, NULL, NULL, 
            RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
    } else {
        // 半透明化
        SetWindowLong(hwnd, GWL_EXSTYLE, exstyle | WS_EX_LAYERED);
        SetLayeredWindowAttributes(hwnd, 0, (255 * rate) / 100, LWA_ALPHA);
    }
}

WZ MAILに送る(添付ファイルとして)

WZ MAILのショートカットアイコンにファイルをドラッグ&ドロップしても、通常はエディタが起動してしまいます。このマクロへのショートカットアイコンを作ることで、ファイルを添付したメッセージを簡単に新規作成できます。SendToフォルダにショートカットを置いて、[送る] メニューから使用するのがおすすめです。

// towzmail.txc - WZ MAIL に送る
// 
// 【使い方】
// 「"C:\Program Files\WZ EDITOR\wzeditor.exe" /ftowzmail.txe」というコマン
// ドラインのショートカットを作成して(WZ EDITOR のパスは適宜インストール先に
// 変更してください)使用します。このショートカットアイコンにファイルをドラ
// ッグ&ドロップすれば、そのファイルが添付された WZ MAIL の新規メッセージが起
// 動します。ショートカットアイコンをそのままダブルクリックすると、通常どお
// りに WZ MAIL が起動します。

HWND TxeMain(wchar *wszCmdline)
{
    mchar szCmdline[CCHPATHNAME];
    mchar szfilename[CCHPATHNAME];
    mchar szWzexecOpt[CCHPATHNAME] = "/fwzMail";
    wstrtostr(wszCmdline, -1, szCmdline, CCHPATHNAME);
    mchar *p = szCmdline;
    while ( *p ) {
        p = strGetWordTop(p);
        if ( '/' != *p ) {
            strGetWord(szfilename, p);
            strcat(szWzexecOpt, " -sa" + szfilename);
            break;
        }
        p += strGetWordLen(p);
    }
    wzexec(szWzexecOpt);
    return NULL;
}

ダウンロード

以上のすべての小物マクロを収録しているマクロをダウンロードできます。なお、「WZ MAILに送る(添付ファイルとして)」はTXEマクロなので、独立したソースファイルになっています。

小物マクロ集(gadget.zip)
http://www.emptypage.jp/download/gadget.zip