VB.NET|Visual Basic中学校にて僕のプログラム掲載

以前に常駐しない付箋紙ソフトを作ってみた。にてUPしていたC#製の付箋紙アプリ”DeskTopMemo”のVB.NET版”DeskTopMemoVB

“がVisual Basic 中学校で紹介されました。

紹介して貰うためにわざわざVB.NETで書き直して、管理人のるきおさんにメールでお願いしたんですけどね。

ソースの中には

・設定の簡単な保存、読み込み

・テキストの描画サイズを正確に計算する方法

・.NETでWindowsの壁紙を変更する方法(ここはネットで拾ったコードのコピペですが…)

・コントロールのイメージをBitmapに描画する方法

等のTipsが詰まってます。

一つでも興味があれば是非々々読んでみて下さいです。

C#|WPFアプリケーションにてマウスイベントが拾えない問題

まず問題のコード

【XAML】Window1.xaml

<Window x:Class="WpfApplication1.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1" Height="300" Width="300">

    <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown">

        

    </Grid>

</Window>

【C#】Window1.xaml.cs

using System.Windows;

using System.Windows.Input;

namespace WpfApplication1 {

    /// <summary>

    /// Window1.xaml の相互作用ロジック

    /// </summary>

    public partial class Window1 :Window {

        public Window1() {

            InitializeComponent();

        }

        private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {

            MessageBox.Show("Clicked!");

        }

    }

}

フォームをクリックしても何も起こらない。

しかし、Window1.xamlをこうすると…

【XAML】

<Window x:Class="WpfApplication1.Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="Window1" Height="300" Width="300">

    <Grid MouseLeftButtonDown="Grid_MouseLeftButtonDown" Background="White">

        

    </Grid>

</Window>

GridのBackgroundプロパティにWhiteを指定している。

こうすると意図した通りにメッセージボックスが表示される。

また、Window1.xamlではなくWindow1.xaml.csのコンストラクタで

GridのBackgroundにBrushes.Whiteを指定してもメッセージボックスが表示された。

色が無いコントロールはマウスイベントを拾えない!?仕様なのかバグなのか…。

Linux|WindowsとUbuntuのurlショートカット

【IEのお気に入り】

ファイル名は”タイトル.url”

中身は最低限これで動く

[InternetShortcut]

URL=ここにURL

文字コードはshift-jis

改行コードはCR-LF

【ubuntu】

ubuntuでFireFoxを起動して、アドレスバー横のアイコンをデスクトップにドラッグ&ドロップして出来たファイルはこんな感じだった。

ファイル名:”タイトル.desktop”

Windowsと違ってプログラムのショートカットとurlのショートカットの区別はないらしい。

中身はこんな感じ

[Desktop Entry]

Version=1.0

Encoding=UTF-8

Name=ここにタイトル

Type=Link

URL=ここにURL

Icon=gnome-fs-bookmark

文字コード:UTF-8

改行コード:LF

デスクトップ上で表示されるのはファイル名じゃなくてNameキーの内容だった。

こんな感じでIEのお気に入りをubuntu用に変換するプログラム書いたらうまく動いた。

他のディストリビューションはどうなんだろう。ググっても分からなかった。

Mono|Monoを試してみた

Linuxを使ってみた

+

.NETプログラミングをしてる。

+

Windowsの資産をLinuxで活かしたい

=

monoですよね。

Ubuntuにはじめからmonoが入っていたので、https://anis774.net/Application/15puzzle/publish.htmでClickOnceで配布してる15パズルを実行してみました。しかし、ダイアログが出て実行出来ません。考えてみればWindowsの実行ファイルがそのまま動くわけないですよね。

ググってみると、mono hoge.exeみたいにしないと実行出来ないんだとか。java hogeってやるみたいなものですね。右クリックで開くファイルにmonoを指定して実行してみます。すると、ダイアログは出ませんが、何も起こりません。

またまたググってみると、どうやらmonoにはWindow.Formsに相当するものが標準では入ってないらしいです。

パッケージマネージャでmonoで検索して、それっぽいのを適当にインストールしてからもう一度実行を試みると動きました、こんな感じで。
ClpBdImg2[1]

リソースに入れた効果音がならない問題はありますが、ちゃんとゲームは出来ました。速度も全く問題無しです。

他にも色々な自作アプリを試したのですが、Windowsの時と挙動が若干違うのがあったり、中でWin32APIを呼び出してるアプリは動かなかったりとかはあるようです。

でも、最初からmono、Windows双方での運用を意識して開発することは充分可能なんじゃないかと感じました。

P.S.

余興で作った上の15パズルのJava版をUbuntuのGUI上で実行出来ませんでした。monoの場合はmono hoge.exeで動きますが、Javaの場合はjava hoge.classではなくてjava hogeですよね。これ相当の操作はGUI上で出来るんでしょうか。

Linux|Linuxを入れてみた

以前からLinuxに興味があったのですが、敷居の高さを感じてなかなか導入に至りませんでした。

PCが1台しかないので考えられる方法は

1.デュアルブート

2.1CD Linux

3.仮想マシン

1はWinが起動しなくなることが稀にあるとかで却下。

2はCDROM買わないといけないので却下。お金はかけない主義。

残るは3の仮想マシンです。仮想マシンというとVirtualPCしか知らないのでその線で調べると、僕のWinXPHomeではVirtualPCは使えないらしい。

そこでVMwareという同種のソフトがあるのをグーグルで見付けました。VMware Playerというタダバージョンもあるとか。

しかしこのVMware Player、インストールしてみたら、仮想マシンが作れない!そう、これは構築済みの仮想マシンを動かすだけのソフトだったのです。よく調べないお前が悪い!仮想マシンを作れるバージョンは有料だとか。

そこで色々検索してみたら、ありました。UbuntuのサイトでUbuntuインストール済みのVMwareの仮想PCのファイルを配布しているではありませんか。そうか、Linuxにはこんな配布方法もあったのか…。

さっそく導入しました。Windowsを1からインストールするよりずっと簡単でした。VMwareを起動したら、もうすぐそこに使えるUbuntuの環境があるんですよ。GUIバリバリでWindowsと同じ感覚で使えます。必要なアプリも最初から一通りインストールされてるのも親切です。ブラウザやテキストエディタ、Officeソフト各種、メディアプレイヤーから、Windowsになりすましてファイル共有が出来るSambaサーバー、各種言語のコンパイラなんかも入ってるのには驚きです。

といっても、Windowsを使いながら培ってきた過去の遺産を生かせなければ進んでLinuxを使おうとは思いません。そこでまずはsambaサーバーでWindowsのディレクトリにアクセス出来るようにしてMS Officeの各種ファイルを開いてみました。OOoで問題なく扱えます。

次は画像、一通りのフォーマットはプリインストールのビューアで開けました。画像、オーディオ、ビデオ関連も付属のプレイヤーで再生出来ました。

FireFoxでニコニコ動画も見られるし、ずっとWindows使ってきて、Linuxで使えない資産があるってわけじゃなければこれで充分ですね。

ってことで超簡単にLinuxを使ってみる方法、

http://www.ubuntulinux.jp/products/JA-Localized/vmware

ここに全部載ってます。

C#|WPFブラウザアプリケーション(XBAP)で製作したWindows用タスクバー時計

JavaScriptで製作したWindows用タスクバー時計なんてページを見付けたので、それなら僕はXBAPでってことでやってみました。いかに.NETが楽かってことを見せ付けてやろうかと(誰にだ?)。

手順は簡単。VSでWPFブラウザアプリケーションのプロジェクトを作ったらPageにLabelを置いてこんな感じでコーディングします。

using System;
using System.Windows.Controls;
namespace clock {
  public partial class Page1 :Page {
    System.Threading.Thread thread;
    public Page1() {
      InitializeComponent();
      thread = new System.Threading.Thread(loop);
      thread.IsBackground = true;
      thread.Start();
    }
    private void loop() {
      while(true) {
        this.Dispatcher.Invoke(new System.Threading.ThreadStart(update), null);
        System.Threading.Thread.Sleep(1000);
      }
    }
    private void update(){
      this.label1.Content = DateTime.Now.ToString("yy/M/d(ddd)H:mm");
    }
  }
}

う~ん、Javascriptの方が簡単だったかも…。

こんな感じでタスクバーに時計が表示されます。

clockss[1]

そのうちSilverlightでもやってみたいですね。Javascriptでいいだろって突っ込みは無しで…。