2010年10月24日

フォームを画面の端に吸着させる方法(C#用メモ)

フォームが画面の端に近づいたときに、端に吸着(スナップ)させる方法。

基本的には力業です。
フォームをドラッグして移動させる方法』で紹介した方法を使います。
フォームを直接動かすのではなく、フォームの移動先の領域を定義しておき、それが画面の端に吸着しそうな距離であれば、吸着させます。
吸着しそうな距離かどうかは、“フォームの移動先の領域”と“画面の端の領域”を定義して、領域が重なっているかチェックします。
今回はRectangleのIntersectsWithを使用しましたが、if文で判定しても構いません。

//マウスが動いたとき
private void Form1_MouseMove(object sender,
    System.Windows.Forms.MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        // 吸着するサイズ
        Size gap = new Size(16, 16);

        // 移動先のフォーム位置
        Rectangle newPosition = new Rectangle(
            this.Left + e.X - mousePoint.X,
            this.Top + e.Y - mousePoint.Y,
            this.Width,
            this.Height);
        // 判定用のRECT
        Rectangle newRect = new Rectangle();

        // 作業領域の取得(この作業領域の内側に吸着する)
        Size area = new Size(
            System.Windows.Forms.Screen.GetWorkingArea(this).Width,
            System.Windows.Forms.Screen.GetWorkingArea(this).Height);

        // 画面端の判定用(画面の端の位置に、吸着するサイズ分のRECTを定義する)
        Rectangle rectLeft = new Rectangle(
                                    0, 
                                    0, 
                                    gap.Width, 
                                    area.Height);
        Rectangle rectTop = new Rectangle(
                                    0, 
                                    0, 
                                    area.Width, 
                                    gap.Height);
        Rectangle rectRight = new Rectangle(
                                    area.Width - gap.Width, 
                                    0, 
                                    gap.Width, 
                                    area.Height);
        Rectangle rectBottom = new Rectangle(
                                    0, 
                                    area.Height - gap.Height, 
                                    area.Width, 
                                    gap.Height);
        // 衝突判定
        // 判定用のRECTを自分のウィンドウの隅に重ねるように移動し、
        // 画面端の判定用のRECTと衝突しているかチェックする。
        // 衝突していた場合は、吸着させるように移動する

        // 左端衝突判定
        {
            newRect = newPosition;
            newRect.Width = gap.Width;

            if (newRect.IntersectsWith(rectLeft))
            {
                // 左端に吸着させる
                newPosition.X = 0;
            }
        }
        // 右端衝突判定
        {
            newRect = newPosition;
            newRect.X = newPosition.Right - gap.Width;  // ウィンドウの右隅
            newRect.Width = gap.Width;

            if (newRect.IntersectsWith(rectRight))
            {
                // 右端に吸着させる
                newPosition.X = area.Width - this.Width;
            }
        }
        // 上端衝突判定
        {
            newRect = newPosition;
            newRect.Height = gap.Height;

            if (newRect.IntersectsWith(rectTop))
            {
                // 上端に吸着させる
                newPosition.Y = 0;
            }
        }
        // 下端衝突判定
        {
            newRect = newPosition;
            newRect.Y = newPosition.Bottom - gap.Height; // ウィンドウの下端
            newRect.Height = gap.Height;

            if (newRect.IntersectsWith(rectBottom))
            {
                // 下端に吸着させる
                newPosition.Y = area.Height - this.Height;
            }
        }

        // 実際に移動させる
        this.Left = newPosition.Left;
        this.Top = newPosition.Top;
    }
}

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 11:03 | Comment(3) | TrackBack(0) | C#

2010年10月23日

フォームをドラッグして移動させる方法(C#用メモ)

フォームをマウスでドラッグして移動させる方法。

タイトルバーのないウィンドウも、この方法で移動させることが出来ます。
マウスのボタンが押されたとき、マウスポインタの位置を保存しておきます。
次にマウスが動いたとき、保存しておいたマウスポインタの位置と今の座標の差(移動距離)を計算し、フォームを移動させます。

// マウスポインタの位置を保存する
private Point mousePoint;

//マウスのボタンが押されたとき
private void Form1_MouseDown(object sender,
    System.Windows.Forms.MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        //位置を記憶する
        mousePoint = new Point(e.X, e.Y);
    }
}

//マウスが動いたとき
private void Form1_MouseMove(object sender,
    System.Windows.Forms.MouseEventArgs e)
{
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
    {
        this.Left += e.X - mousePoint.X;
        this.Top += e.Y - mousePoint.Y;
    }
}

フォームの初期化処理で、MouseDown、MouseMoveイベントハンドラに、定義したメソッドを追加します。

//
//  コンストラクタ
//
public Form1()
{
    :
    :

    // マウス移動イベントを追加
    this.MouseDown += new MouseEventHandler(Form1_MouseDown);
    this.MouseMove += new MouseEventHandler(Form1_MouseMove);

    :
    :
}

なお、この状態ではフォーム上でマウスをドラッグした場合は移動できますが、フォーム上のコントロールの上でドラッグした場合は移動できません。 これを行うためには、そのコントロールのMouseDown、MouseMoveイベントハンドラにも、定義したメソッドを追加します。 方法は、フォームのイベントハンドラに追加したのと同じです。

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 19:25 | Comment(0) | TrackBack(0) | C#

2010年10月16日

Twitter用クライアント TLBar (表示専用、.NET Framework 4使用、oAuth認証)

概要

TLBarはTwitterの投稿を電光掲示板の流れる文字のように表示するクライアントです。
現在、暫定版を公開中です。

ダウンロード

動作環境

.NET Framework 4以降が導入されている必要があります。
下記サイトなどからインストールして下さい。
ダウンロードの詳細 : Microsoft .NET Framework 4 (Web インストーラー)

インストール方法

インストーラは付属しておりません。
ダウンロードした圧縮ファイルを適当なフォルダに展開してご利用ください。

使い方

最初にTLBarを起動すると、認証画面が開きます。ここで認証を行わないと使用できません。
認証されると画面の下の方に半透明の黒いウィンドウが表示されます。
ここに最新20件のタイムラインがスクロールされながら表示されます。
終了する場合は、ウィンドウ上で右クリック→終了(Q)を選ぶと、終了します。
認証に失敗していた場合は、ウィンドウ上で右クリック→認証設定(S)を選ぶと、もう一度認証画面が開くので、認証を行って下さい。

認証方法

認証画面のURLをクリック
TLBarAuth1.png
許可するをクリック
TLBarAuth2.png
暗証番号が表示されるので、認証画面に入力して、OKをクリック
TLBarAuth3.png

更新履歴

Ver.0.0.0.1(2010/10/16)
  • 暫定版公開

良かったらクリックしてください
にほんブログ村 IT技術ブログ プログラム・プログラマーへ  人気ブログランキングへ

posted by among at 08:47 | Comment(0) | TrackBack(0) | Twitter