【はるるみなもに!】 応援中
一緒にお仕事している、3年目ぐらいの子。ポインタ変数と配列をごっちゃにしてます。
ポインタ変数と配列は同じ型であつかえるようになってるので似てますが、全然別の物です。ちゃんと勉強しましょう。
ちなみに、いままで働いて来たなか一緒に仕事した人で、ポインタ変数と配列とアドレスの関係をちゃんと理解している人って、片手て数えれる程しかいません。プロと言ってもそんなもんです(泣)
ついでですがドラッグ&ドロップって、別にプラグインのウィンドウにでなくて、WZに直接出来たほうが便利だと思う。
というのさださんのご意見(独り言 2002年 3月19日 - 奈良県奈良市某所)。以前、「インターネットショートカットがドロップされたらカーソル位置にそのURLを挿入」というプラグインを作ろうとし(て挫折し)たことがあります。ウィンドウにドロップされたファイル名を取得するのがどうもできなくて……。ベースウィンドウにフックをかけてWM_DROPFILESをつかまえるだけだと思ってたら、テキスト部分にはそもそもそのメッセージが来てないようでした。
簡単に取れると思ってました。取れないですね。OLEのせいか。TEXTにDragAcceptFilesやってもメッセージ来ない(泣)。ファイルマネージャーからだと来るんだろうけど…
ファイルマネージャーで試そうと思ったら、W2Kには入ってない?
このプラグインの対象となる人を考えると「出来たほうがいいな」と思ってたんですけど無理っぽいですね。
OLEをどうこう出来れば出来るんだろうけど。
とは言っても書いたのは結構前なんだけど。ほんとは今まで書いて来たマクロをごちゃまぜにしたマクロ集みたいな形で出すつもりだったんだけど、NKeisenの部分の書き直しが送れてるので、これだけ先に出しちゃう(ぉ
NKeisenで好評だったメニュー位置を好きに選べる方式がちょっとバージョンアップ!メニューバーなしでも、標準のメニューなら表示されるようになりました。
だってそもそも、おいらメニューバー表示してないから、対応しないと困るんだもん(爆)
ちなみにこのマクロ、某有名シェアウェアエディッタにある機能です。昔興味本位で作ってみようと思ったけど、上手く行かなかったもの。なんで上手く行かなかったんだろう。不思議だ…
実はエディッタでマウス使うことは全くないので、おいら自身は使わないものだったり…。マウス野郎の方は便利かもしれませんが。
もちろんプラグインマクロなので登録してお使い下さい。
以下ソース。ぐはっ、preって自動で折り返さへんやん。って当然か。
//{### dblsc.txc for TX-C4.0 // (c) 2002 のさだ //## 宣言部 //#define DEBUG #define __DBLSCVER__ "0.0.1" #include <windows.h> #pragma multidef+ #include <_idm.h> #pragma multidef. #pragma warnsignmismatch- #pragma warnlosedigit- #pragma warnfuncnotcall- #define WM_MOUSEWHEEL 0x020A #ifdef DEBUG #include "stdout.txc" #define DBPRINTF printf #else #define DBPRINTF 1 ? 0 : printf #endif permanent BOOL p_fMichizure = 1; textvar BOOL fMichizureNow; permanent int p_iMichizureMenuPos = 8; permanent int p_iMichizureMenuPosSub = 7; static int g_iIdmMichizure = 0; static txstr g_szMichizure = "次のWZも一緒にスクロール(&X)"; int __prmSave(void){return 1;}int CfgSave(void); void __pluginGetProperty(mchar* prop, txstr res) { if (!stricmp(prop,"name")) res="いっしょにすくろ〜る"; if (!stricmp(prop,"author")) res="のさだ"; if (!stricmp(prop,"version")) res=__DBLSCVER__; } void __pluginHelp(TX* text) { information( "メニューをチェックすると、" "ホイールで次のWZも一緒にスクロール出来るようになります。"); } //## 設定ダイアログ void __pluginConfig (TX *text) { HDIALOG hd = dialog("いっしょにすくろ〜る"); { dialogCaption(hd,"メニューの表示位置"); dialogIndent(hd,3); dialogInteger(hd,"何番目のメニューに表示しますか? ", 30, &p_iMichizureMenuPos, 3); dialogInteger(hd,"何番目のサブメニューに表示しますか?", 30, &p_iMichizureMenuPosSub, 3); dialogIndent(hd,-3); dialogHeadline(hd,"バージョン情報",40); dialogIndent(hd,3); dialogCaption(hd,"いっしょにすくろ〜る Version " + __DBLSCVER__); dialogCaption(hd,"copyright(c) 2002 のさだ"); dialogCaption(hd,"mailto:nosada@post.tok2.com"); dialogIndent(hd,-3); } dialogOpen(hd); } //## マウスホイール HOOKRESULT ChengMichizureState(TX *text) { text::fMichizureNow = !text::fMichizureNow; return HOOK_CAPTURE; } void hookMouseWheel(TX *text, WPARAM wParam, LPARAM lParam) { if (text::fMichizureNow && lParam != 0) { HWND hwndnextbase = txGetNextEditor(text); if (hwndnextbase) { HWND hwndnexttext = FindWindowEx(hwndnextbase, NULL, "txText", NULL); if (hwndnexttext) SendMessage(hwndnexttext, WM_MOUSEWHEEL, wParam, 0); } } } //## メニュー static int CheckMunuID[] = { IDM_NEW, IDM_UNDO, IDM_UISEARCH, IDM_UICONFIG, IDM_UIINSERTCOPY, IDM_UIHEADLINE, IDM_KEYMACRORECORD, IDM_TILEOVERLAP, IDM_HELP }; #define SUBMENUNUM (sizeof(CheckMunuID)/sizeof(CheckMunuID[0])) BOOL CheckSubMenu(TX *text, HMENU hmenu, int menuPos) { if (menuPos < 0) return 0; if (text->fDispMenubar) return (hmenu == GetSubMenu(GetMenu(text->hwndbase), menuPos)); if (menuPos >= SUBMENUNUM) return 0; return (CheckMunuID[menuPos] == GetMenuItemID(hmenu, 0)); } void InitMenuSub(TX *text, HMENU hmenu, int iMenuPos, BOOL fMenuCheck, int iIdm, mchar *szMenuName) { if (GetMenuState(hmenu, iMenuPos, MF_BYPOSITION) & MF_SEPARATOR) { DeleteMenu(hmenu, iMenuPos, MF_BYPOSITION); InsertMenu(hmenu, iMenuPos, MF_BYPOSITION | (fMenuCheck ? MF_CHECKED : MF_UNCHECKED), iIdm, szMenuName); InsertMenu(hmenu, iMenuPos+1, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); } else { InsertMenu(hmenu, iMenuPos, MF_BYPOSITION | (fMenuCheck ? MF_CHECKED : MF_UNCHECKED), iIdm, szMenuName); } } void InitMenu(TX *text, HMENU hmenu) { DeleteMenu(hmenu, g_iIdmMichizure, MF_BYCOMMAND); if (p_fMichizure && CheckSubMenu(text, hmenu, p_iMichizureMenuPos-1)) InitMenuSub(text, hmenu, p_iMichizureMenuPosSub-1, text::fMichizureNow, g_iIdmMichizure, g_szMichizure); } //## hook HOOKRESULT CALLBACK baseHook(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { TX* text = hwndbaseGetText(hwnd); switch (message) { case WM_INITMENUPOPUP: { InitMenu(text, (HMENU)wParam); break; } } return HOOK_CONTINUE; } HOOKRESULT CALLBACK textHook(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { TX* text = hwndtextGetText(hwnd); switch (message) { case WM_TXEVENT: { switch (wParam) { case TXEVENT_IDMEXEC: { int idm = (int)lParam; if (idm == g_iIdmMichizure) return ChengMichizureState(text); break; } } break; } case WM_MOUSEWHEEL: { hookMouseWheel(text, wParam, lParam); break; } } return HOOK_CONTINUE; } void InitMacro(TX *text) { if (!g_iIdmMichizure) g_iIdmMichizure = idmRegister(); text::fMichizureNow = 0; } void __on_txFrameNew(TX* text) { InitMacro(text); txSetHookWndproctextTxpcode(text, textHook); txSetHookWndprocbaseTxpcodeTail(text, baseHook); } void main{} #define __prmSave CfgSave