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 ゆの

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

1:30:00

Adobe AIRでお天気RSSを読込む

Flex Builderで、Adobe AIRアプリケーションをつくってみる。お天気RSSを読込んで、表示するだけのもの。カスタムウィンドウにしてみたり、少しだけアニメーション入れてみたり。初めてのアプリならこんなものかな。

ActionScript3は、XMLの読み取りが楽でいいなー。それほど文法の違いで迷うこともなかったし。使いたい機能を、どう書けば使えるか、調べるのが面倒だけど、それは仕方ない。簡単なアニメーション効果をすぐ実装できるのもいいね。心がAIRに傾いてきたぞ。

参考サイト

2009年11月22日日曜日4:20:00

Shivering Islesメインクエストおわり

タグ: , , by ゆの

久しぶりにいっぱいoblivion。Shivering Islesのメインクエストを一気に終了。格好がより変になってます。

なんか他にやらなきゃいけないことが、あるような気がするけど、きっと気のせい。

2009年11月21日土曜日5:18:00

眠れないから、Adobe Airいじってみた

テキトーにいろいろ。いい感じに眠くなってきた。zzz

2009年11月15日日曜日0:31:00

氷皿>>>>>短スカ

タグ: , by ゆの

FEZで、メインでつかっているキャラクターは氷皿と、短スカです。短スカ、最近やっていたのだけど、ハイドでも簡単にみつかるわ。見つかったら、フルボッコにあうわ。なんか短スカに向いていないのではなかろうか。まあ、見つかるような動きをしてるのだろうけど。

久しぶりに氷皿やってみたら、氷皿の方が活躍してる気がする。近距離戦闘にむいてないのかなぁ

画像は、某クイズ大会予行練習での1枚。3回1位なって、おいしいです。

top