2010年6月22日火曜日14:37:00

マウスポインタがどのディスプレイ上にあるのか メモメモ...φ(._.*)y-。o0

マウスポインタがマルチディスプレイ上にて、どのディスプレイにあるのかを求める。当たり判定をつかって求める。長方形と点の当たり判定。

        /// <summary>
        /// 長方形と点の当たり判定;
        /// 境界線も含める
        /// </summary>
        /// <param name="rectangle_point">長方形の左上の角の位置</param>
        /// <param name="rectangle_size">長方形のサイズ</param>
        /// <param name="main_point">点の位置</param>
        /// <returns>長方形と点が接触しているかどうか</returns>
        private bool DetectCollisionRectangle ( Point rectangle_point, Size rectangle_size, Point main_point )
        {
            if ( rectangle_point.X <= main_point.X
                && rectangle_point.Y <= main_point.Y
                && rectangle_point.X + rectangle_size.Width >= main_point.X
                && rectangle_point.Y + rectangle_size.Height >= main_point.Y )
                return true;

            return false;
        }

ディスプレイの位置とサイズを長方形とする。

                if ( DetectCollisionRectangle(
                        Screen.AllScreens[i].Bounds.Location,
                        Screen.AllScreens[i].Bounds.Size,
                        Cursor.Position ) )
                {
                    // 省略
                }

あとはてきとーに。

マウスポインタ以外にも、長方形と長方形の当たり判定つかえば、ウィンドウがあるディスプレイを求めることもできる。

当たり判定つかってるけど、もっと簡単に求められる方法とかないのかね。ないなら仕方ないけど。

2010年2月5日金曜日1:08:00

ActionScript twitter メモメモ

KobunTwitterをつくったときのメモ。

   var url:String = "http://twitter.com/home?status=.@";
   var content:String = this.result_id + "さんは"
        + "コブン" + this.kobun_array[num].Number + "号です。"
        + this.kobun_array[num].Description + " "
        + "http://bit.ly/cAzMP7"
        + " #Kbntwt";
   var request_twitter:URLRequest = new URLRequest( url + escapeMultiByte( content ) );

   try
   {
      navigateToURL( request_twitter, "_self" );
   }
   catch (e:Error)
   {
   }

日本語を使う場合は、escape( ... )ではなく、escapeMultiByte( ... )でエスケープしておく。


navigateToURL( ... )でページを遷移して、twitterのログイン画面に行く。ログインすると、いまどうしてる?のテキストボックスの中に、最初から文字が入ってる。


2010年2月4日木曜日23:55:00

bit.ly API メモ  少しだけActionScript

ActionScriptで、KobunTwitterなるものをつくってるとき、途中でbit.lyでURLの短縮サービスを利用しようと思った。だけど、使用するURLひとつだけだし、動的にURLをつくる必要なくね、ということでbit.ly API いろいろ調べたのに意味なくなった。その必要なくなったメモのメモ。

bit.ly APIを利用するにはアカウントが必要なので、アカウントをゲットする。ゲットしたら、ログインして、アカウント情報のところで、英数字がいっぱい書かれたAPI keyを手に入れる。API keyを用いて、bit.ly APIをつかう。

以下のようなアドレスにアクセスすると、短くなったURLを含んだ情報が見れる。以下のURLは、サンプルなので見れないけど。

http://api.bit.ly/shorten?version=2.0.1&login=Your_User_Name&apiKey=Your_API_Key&format=xml&longUrl=your_url

Your_User_Nameには、登録したときのIDを入れて、Your_API_Keyには、先程入手したAPI Keyを入れる。your_urlには、短くしたいURLを入れる。デフォルトでは、JSON形式で、情報が閲覧できるけど、&format=xmlを入れることで、XML形式でも見ることができる。つぎのようなXML形式になる。

<bitly>
<errorCode>0</errorCode>
<errorMessage/>
<results>
<nodeKeyVal>
<shortKeywordUrl/>
<hash>ahfxpI</hash>
<userHash>cAzMP7</userHash>
<nodeKey>
http://rockmanjuno.zatunen.com/KobunTwitter/index.html
</nodeKey>
<shortUrl>http://bit.ly/cAzMP7</shortUrl>
<shortCNAMEUrl>http://bit.ly/cAzMP7</shortCNAMEUrl>
</nodeKeyVal>
</results>
<statusCode>OK</statusCode>
</bitly>

ActionScriptをつかって、bit.ly APIをつかってみる。先程のようなURLをつくっておき、そのURLアクセスする。

var request_bitly:URLRequest = new URLRequest( api_url );
this.loader.load( request_bitly );

アクセスして、入手した情報をテキトーに読み取る。

         var xml:XML = new XML( this.loader.data );
         var short_url:String = "";
         if ( xml.statusCode == "OK" )
         {
          short_url = xml.results.nodeKeyVal.shortUrl;
         }

short_urlに短縮したURLが入るので、テキトーに使用。使わなかったけど(´・ω・`)

2010年1月26日火曜日23:48:00

暗号化、パスワードありのUSBメモリ・ポータブルハードディスク

暗号化、パスワードありのUSBメモリ・ポータブルハードディスクをいろいろ探していた。探した感じだと、暗号化手法はAESばかり。主流なのだろうか。鍵長が128bit, 256bitなどの違いはあったけれど。パスワード入力するツールは、だいたいwindowsのみ対応だったりする。Macでも対応しているのはあまりなかったような。対応してても別途ドライバが必要だったりする。

そんなこんなで、いろいろ調べた結果のメモ。

USBメモリだと、ポータブルハードディスクと比べて容量少ないわりに高くて、容量に対するコストパフォーマンスが悪い。買うとしたらポータブルハードディスクなんだろうけど、どっちにしたって高い(´・ω・`)

フリーでセキュリティを強化したいなら、TrueCryptを使えばいいかな。

2009年12月23日水曜日2:09:00

カスタムウィンドウで、角丸ウィンドウ

カスタムウィンドウで、角丸にしてみた。前回のカスタムウィンドウを使用。右下は角丸にしていないです。ギザギザが気になるので、角丸の半径は小さくしてます。

        protected override void OnResize ( EventArgs e )
        {
            base.OnResize( e );

            int radius = 5;
            System.Drawing.Drawing2D.GraphicsPath path =
                new System.Drawing.Drawing2D.GraphicsPath();
            // 左上
            path.AddPie( 0, 0, radius * 2, radius * 2, 180, 90 );
            // 右上
            path.AddPie( this.Width - radius * 2, 0, radius * 2, radius * 2, 270, 90 );
            // 左下
            path.AddPie( 0, this.Height - radius * 2, radius * 2, radius * 2, 90, 90 );

            // 中央
            path.AddRectangle( new Rectangle( radius, 0, 
                                                this.Width - radius * 2, this.Height) );
            // 左
            path.AddRectangle( new Rectangle( 0, radius,
                                                radius, this.Height - radius * 2 ) );
            // 右
            path.AddRectangle( new Rectangle( this.Width - radius, radius,  
                                                radius, this.Height - radius ) );
            this.Region = new Region( path );
        }

リサイズのときに角丸になるようにしてます。なので、初期状態で角丸にならないです。そのため、ロードイベントに次のコードを入れる。

OnResize( null );

これで、初期状態でも、リサイズしたときでも、角丸になるはず。

フルスクリーンのときも角丸になるので、気になるようだったら、つぎのように変更してみたり。

            if ( this.WindowState == FormWindowState.Normal )
            {
                // 省略
            }
            else if ( this.WindowState == FormWindowState.Maximized )
            {
                path.AddRectangle( new Rectangle( 0, 0, this.Width, this.Height ) );
            }
            this.Region = new Region( path );

参考サイト

2009年12月20日日曜日17:53:00

フォームを2つ用いた一部だけ半透明のフォーム -カスタムウィンドウの練習もかねて

フォームのOpacityで透明度を設定すると、そのフォーム上のコントロールも半透明になってしまう。やめてください、コントロールは透明にならなくていいんです・・・!

フォームのコントロール上だと透明化してしまう。そこで、もうひとつフォームをつくって、それをコントロールに見せかけてみた。メインのフォームのコントロールじゃないので、もうひとつのフォームは透明化しない。もうひとつのフォームに、透明化したくないコントロールをずかずかおいていけばいい。

まず、もうひとつのフォームを表示して、位置とサイズを調整する。また、メインフォームより常に前面に表示されるようにする。

        /// <summary>
        /// ロードイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load ( object sender, EventArgs e )
        {
            this.title_label.Text = this.Text;
            this.title_label.MouseDown += new MouseEventHandler( Form1_MouseDown );
            this.title_label.MouseMove += new MouseEventHandler( Form1_MouseMove );

            this.fm2 = new Form2();
            this.fm2.FormClosing += new FormClosingEventHandler( fm2_FormClosing );
            this.AddOwnedForm( fm2 );

            this.fm2.Width = this.Width - 40;
            this.fm2.Height = this.Height - 60;

            this.fm2.Show();
            this.fm2.Left = this.Left + 20;
            this.fm2.Top = this.Top + 40;
        }

もうひとつのフォームをコントロールに見せかけているだけなので、メインフォームが動いたり、サイズが変わると、モロバレしてしまう。したがって、メインフォームが動いたら、追従するように、位置とサイズを変更すればいい。

        private void Form1_Move ( object sender, EventArgs e )
        {
            this.fm2.Left = this.Left + 20;
            this.fm2.Top = this.Top + 40;
        }

        private void Form1_Resize ( object sender, EventArgs e )
        {
            this.fm2.Width = this.Width - 40;
            this.fm2.Height = this.Height - 60;
        }

コントロールに見せかけるので、フォームのボーダースタイルをNoneに設定する。そして、タスクバーに表示されないように設定すれば、それっぽく見える。

ALT+F4で、もうひとつのフォームを消したら、エラーでたので、つぎのコードを追加。たぶんこれでエラーがでなくなるはず。

        private void Form2_FormClosing ( object sender, FormClosingEventArgs e )
        {
            if ( this.Owner != null )
            {
                this.Owner.RemoveOwnedForm( this );
            }
        }

2009年11月25日水曜日18:10:00

ネクタイの結び方 メモメモ

タグ: by ゆの

ネクタイとか、ここ何年も結んでいないから結び方おぼえていなかった。動画見ておぼえないと。

top