gamemaster.jp

TRPGについていろいろ書いたり。ツールとか置いてあったり。

『雑記』カテゴリーの記事

ゲーム性……。 —

http://togetter.com/li/447128
よく使っちゃうけども。カタカナ語に「性」つけるとあっという間に定義がgdgdになるよね……。

http://togetter.com/li/447128 よく使っちゃうけども。カタカナ語に「性」つけるとあっという間に定義がgdgdになるよね……。

正規表現で入力制御したり、ウォーターマーク機能のあるテキストボックス@C# —

入力検証時にバルーンを出す方法とか、ウォーターマークを出す方法とかをちょっと調べたりしたんでメモとして。
とりあえず動けばいいって感じなんでコードは適当。

using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace example
{
    /// 
    /// 正規表現で入力制御したり、ウォーターマークを表示できるテキストボックス
    /// 
    public class CustomTextBox : TextBox
    {

        private const int ECM_FIRST = 0x1500;
        private const int EM_SETCUEBANNER = ECM_FIRST + 1;
        private const int EM_SHOWBALLOONTIP = ECM_FIRST + 3;
        private const int EM_HIDEBALLOONTIP = ECM_FIRST + 4;
        private const int Win32False = 0;
        private const int Win32True = 1;

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, string lParam);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, ref EDITBALLOONTIP lParam);

        [StructLayout(LayoutKind.Sequential)]
        private struct EDITBALLOONTIP
        {
            public int cbStruct;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string pszTitle;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string pszText;
            public int ttiIcon;
        }

        private enum BalloonIcon
        {
            ShowNone = ToolTipIcon.None,
            ShowInformation = ToolTipIcon.Info,
            ShowWarning = ToolTipIcon.Warning,
            ShowError = ToolTipIcon.Error
        }


        // 概要:
        //     CustomTextBox クラスの新しいインスタンスを初期化します。
        public CustomTextBox()
        {

        }

        /// 
        /// 入力可能な文字列を正規表現で指定
        /// 
        [RefreshProperties(RefreshProperties.Repaint)]
        [Category("動作")]
        [DefaultValue(".")]
        [Description("入力可能な文字を正規表現で指定します。")]
        [Localizable(true)]
        public string ValidateCharRegex { get; set; }

        /// 
        /// 入力可能な文字列の説明を指定
        /// 
        [RefreshProperties(RefreshProperties.Repaint)]
        [Category("動作")]
        [DefaultValue("入力できる文字が制限されています。")]
        [Description("エラーメッセージに利用される、入力可能な文字の説明を指定します。")]
        [Localizable(true)]
        public string ValidateErrorMessage { get; set; }


        /// 
        /// ウォーターマークとして表示する文字列を指定
        /// 
        [Category("表示")]
        [DefaultValue("")]
        [Description("テキストが空の場合に表示する文字列を設定または取得します。")]
        public string Watermark { get; set; }

        /// 
        /// ウォーターマークを設定する(Windows Vista以降のみ)
        /// 
        private void SetWatermark()
        {
            SendMessage(this.Handle, EM_SETCUEBANNER, Win32False, this.Watermark);
        }

        /// 
        /// ハンドルが生成された直後のイベント
        /// 
        /// 
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            // ウォーターマークを設定するためにはハンドルが必要。
            this.SetWatermark();
        }

        /// 
        /// キーが押された場合のイベント
        /// 
        /// 
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            // 指定された正規表現に一致しない場合、入力をキャンセルする
            if (!Regex.IsMatch(e.KeyChar.ToString(), this.ValidateCharRegex) && e.KeyChar != '\b')
            {
                base.OnKeyPress(e);
                EDITBALLOONTIP balloontip = new EDITBALLOONTIP();
                balloontip.cbStruct = Marshal.SizeOf(balloontip);
                balloontip.ttiIcon = (int)BalloonIcon.ShowError;
                balloontip.pszTitle = "入力できない文字です";
                balloontip.pszText = ValidateErrorMessage;

                SendMessage(this.Handle, EM_SHOWBALLOONTIP, Win32False, ref balloontip);
                e.Handled = true;
            }
        }

    }
}

入力検証時にバルーンを出す方法とか、ウォーターマークを出す方法とかをちょっと調べたりしたんでメモとして。 とりあえず動けばいいって感じなんでコードは適当。 using System; using System.Compo […]

ドメインの譲渡とか —

もう一つドメイン持ってて、それを他のところに譲渡しようとしてるんだけど……なんだかとても面倒っぽいね。
全部終わったらまとめたいなー。

もう一つドメイン持ってて、それを他のところに譲渡しようとしてるんだけど……なんだかとても面倒っぽいね。 全部終わったらまとめたいなー。

MSNメッセとSkypeの統合 —

msnとskypeでメールアドレス分けてたのに、
統合したらskypeにmsn用のメールアドレスでログインしないといけなくなったんだけど……(´・ω・`)

msnとskypeでメールアドレス分けてたのに、 統合したらskypeにmsn用のメールアドレスでログインしないといけなくなったんだけど……(´・ω・`)

備忘録的な。 —

Androidの一部機種でテキストボックスが増える問題対応
結論:iframeを使う時はposition:absoluteでtop:0、left:0に配置しないと死ぬ

AndroidOSが入力する時だけテキストボックスと同じ位置にもう一つテキストボックスを(勝手に)生成するっぽいんだけど、
これが常にブラウザの0,0基準で生成される端末があるっぽい。
iframeを10,10に配置して、その中の20,20にテキストボックスがあるとしたら、
本来は30,30に生成されるべきものが20,20に生成されてテキストボックスが増える。
端末によっては、ちゃんとiframeの左上から計算してるっぽくて大丈夫だったりする。

あー。すべてのAndroidが滅びてしまえばいいのにー。

Androidの一部機種でテキストボックスが増える問題対応 結論:iframeを使う時はposition:absoluteでtop:0、left:0に配置しないと死ぬ AndroidOSが入力する時だけテキストボックスと […]

備忘録的な。 —

elRTEでCtrl+Zを効かせたい系の話。バージョンは1.3。

elrte.full.js の 1429行目ぐらいに追加。

(前略)
this.destroy = function() {
(略)
}
$(document).keydown(function(e) {
if(e.keyCode == 90 && e.ctrlKey) {
return false;
}
});
$(this.doc).keydown(function(e) {
if(e.keyCode == 90 && e.ctrlKey) {
$('.panel-undoredo [name="undo"]').each(function() {
$(this).click();
});
return false;
}
});

}

ショートカットにアンドゥボタンが連動するからちょっとだけ幸せになるハズ。
IE8/Firefox/Chromeで動作確認。

elRTEでCtrl+Zを効かせたい系の話。バージョンは1.3。 elrte.full.js の 1429行目ぐらいに追加。 (前略) this.destroy = function() { (略) } $(docume […]

備忘録的な。 —

IE9.js 利用時に以下の条件を満たすとスタイルがぶっ壊れて死ぬ。

  1. ブラウザがIEである(当然だけど)
  2. CSSを置くディレクトリを別に作成している ( example.com/index.html に対して example.com/css/foo.css など)
  3. 上記CSS内部で@importしている
  4. その@importしているファイルが相対パスで指定されている ( @import foobar.css )
  5. サーバがファイルが見つからなくてもステータスコード200を返している

簡単に説明すると IE9.jsさんが example.com/css/foo.css の次に example.com/foobar.css を参照しに行って、最後に example.com/css/foobar.css を参照するんだけど、
example.com/foobar.css でステータスコード200が返ってくるとその時表示された内容(大抵の場合HTML)をCSSとして適用しちゃうから、スタイルは死ぬ。(エラー発生以降のスタイルは全部無視されるから)

まあそんな珍しい条件でハマる事なんて滅多に無いんだろうけど。一応ね。

IE9.js 利用時に以下の条件を満たすとスタイルがぶっ壊れて死ぬ。 ブラウザがIEである(当然だけど) CSSを置くディレクトリを別に作成している ( example.com/index.html に対して examp […]

備忘録的な。 —

IE8でelRTEのソース表示→全削除→エディタに戻す→「オブジェクトがありません。」の対処方法。

4847: return s && s.nodeName == 'BODY' ? s.firstChild : s;
4847: return s && s.nodeName == 'BODY' ? s.firstChild||s : s;

4859: return e && e.nodeName == 'BODY' ? e.lastChild : e;
4859: return e && e.nodeName == 'BODY' ? e.lastChild||e : e;

IEだと子要素関連の挙動がおかしいから、e.lastChild で Null が返ってきて死ぬ。

IE8でelRTEのソース表示→全削除→エディタに戻す→「オブジェクトがありません。」の対処方法。 4847: return s && s.nodeName == ‘BODY’ ? s.firstChild : s; 4 […]