mieki256's diary



2015/06/12(金) [n年前の日記]

#1 [prog] VS2013でC#と.NETの勉強中

画像やテキストの配置・レイアウトができる感じのツールを作ろうとしているところ、なのだけど。

マウスドラッグで画像の位置を移動することはできた。結局、複数の PictureBox を配置するのは諦めて、配置済みの PictureBox の Paintイベントで毎回複数の画像を全部描き直してどうにか。DrawImage(Bitmap, x, y) を使うというか。

後は PictureBox の MouseDown、MouseMove、MouseUp で、複数画像の各描画範囲とマウスカーソル座標をチェックして、マウスボタンが押された時にマウスカーソル座標が画像内に入ってたらその画像が選ばれたのだ、みたいな感じの処理を。

ていうか、ソースの一部を貼ったほうが早いのでは…。

// PictureBox上でマウスボタンが押された
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    int mouseX = e.X;
    int mouseY = e.Y;

    buttonPressed = true;
    Boolean multiSelect = false;

    // Shiftキーが押されてるなら複数選択モード
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) multiSelect = true;

    Boolean fg = false;
    for (int i = images.Count - 1; i >= 0; i--)
    {
        ObjData o = images[i];
        o.setOffset(mouseX, mouseY); // マウス座標からのオフセット値を記録
        if (!multiSelect) o.selected = false;
        if (!fg && o.x <= mouseX && mouseX <= (o.x + o.w) && o.y <= mouseY && mouseY <= (o.y + o.h))
        {
            // マウス座標と重なってるオブジェクトの選択状態を切り替える
            o.selected = !o.selected;
            fg = true;
        }
    }

    pictureBox1.Invalidate();
    setStatusObjInfoNow();
}

// PictureBox 上でマウスボタンが離された
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    buttonPressed = false;
    setStatusObjInfoNow();
}

// PictureBox 上でマウスがドラッグされた
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (buttonPressed && countSelectedObject() > 0)
    {
        int mouseX = e.X;
        int mouseY = e.Y;

        // 選択されてるオブジェクトは全て移動する
        foreach (ObjData o in images)
            if (o.selected) o.changePosition(mouseX, mouseY);

        pictureBox1.Invalidate();
        setStatusObjInfoNow();
    }
}

左揃え、右揃え等も実装。 :

左揃え、中央揃え、右揃え、上揃え、縦中央揃え、下揃え、は実装できた。

動作テストしていて思ったけれど、均等割り付け? 均等配置?も必要な予感。…アレって英語でなんて言うんだろ。Distribute? アレも横方向と縦方向、上、中央、下があるよな…。

やっぱり Inkscape で配置してSVGを変換したほうが早いのかも…。

JSONでレイアウトを保存できた。 :

DataContractJsonSerializer なるものを使えばJSONへのシリアライズ、デシリアライズができるらしい。…シリアライズ、デシリアライズって何だ? ググってみたら、オブジェクトからJSON文字列にするのをシリアライズ、JSON文字列からオブジェクトにするのをデシリアライズ、と呼ぶらしい。たぶん。

_シリアライズ - Wikipedia

これからやりたいこと。 :

  • グリッドにスナップさせて移動できるようにしたい。
  • カーソルキーで1ドット単位の移動をさせたい。
  • テキスト描画の範囲を正確に取得したい。

以上です。

過去ログ表示

Prev - 2015/06 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project