fc2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


2011年04月15日

更新遅れてます
スポンサーサイト





2011年02月22日

更新間隔が空いてます...

2010年12月08日

枠なしウィンドウの作り方

某台湾製萌えキャラ騒ぎをはじめ、次期バージョンの概要も発表され、微妙に盛り上がりつつある Silverlight ですが、実際に利用されているのを見かけるのは相変わらずメディアプレイヤーくらいな気もする今日この頃。

と、それはさておき、今回は最新の「Another TL」で採用した『枠なしウィンドウ(OOB限定)』の実装コードをご紹介。

まぁ、実際にはたいしたことはしておらず、プロジェクトプロパティでOOB設定のウィンドウスタイルを変更したうえで、ウィンドウサイズの変更/移動、マウスカーソルの形状変更くらいをコーディングしてあげれば出来上がりです。
マウスドラッグによるウィンドウ移動やリサイズの実装が1メソッドで実現できるのでえらく簡単です。

・プロジェクトプロパティ - 「ブラウザ外実行の設定」


// ウィンドウサイズ変更/移動
private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!Application.Current.IsRunningOutOfBrowser) return;

Point pos = e.GetPosition(this);
double borderSize = 8;
Window win = Application.Current.MainWindow;

if (pos.X <= borderSize)
if (pos.Y <= borderSize)
win.DragResize(WindowResizeEdge.TopLeft);
else if (pos.Y >= this.ActualHeight - borderSize)
win.DragResize(WindowResizeEdge.BottomLeft);
else
win.DragResize(WindowResizeEdge.Left);
else if (pos.X >= this.ActualWidth - borderSize)
if (pos.Y <= borderSize)
win.DragResize(WindowResizeEdge.TopRight);
else if (pos.Y >= this.ActualHeight - borderSize)
win.DragResize(WindowResizeEdge.BottomRight);
else
win.DragResize(WindowResizeEdge.Right);
else
if (pos.Y <= borderSize)
win.DragResize(WindowResizeEdge.Top);
else if (pos.Y >= this.ActualHeight - borderSize)
win.DragResize(WindowResizeEdge.Bottom);
else
win.DragMove();
}

// マウスカーソル形状設定
private void UserControl_MouseMove(object sender, MouseEventArgs e)
{
if (!Application.Current.IsRunningOutOfBrowser) return;

Point pos = e.GetPosition(this);
double borderSize = 8;

if (pos.X <= borderSize)
if (pos.Y <= borderSize)
this.Cursor = Cursors.SizeNWSE;
else if (pos.Y >= this.ActualHeight - borderSize)
this.Cursor = Cursors.SizeNESW;
else
this.Cursor = Cursors.SizeWE;
else if (pos.X >= this.ActualWidth - borderSize)
if (pos.Y <= borderSize)
this.Cursor = Cursors.SizeNESW;
else if (pos.Y >= this.ActualHeight - borderSize)
this.Cursor = Cursors.SizeNWSE;
else
this.Cursor = Cursors.SizeWE;
else
if (pos.Y <= borderSize)
this.Cursor = Cursors.SizeNS;
else if (pos.Y >= this.ActualHeight - borderSize)
this.Cursor = Cursors.SizeNS;
else
this.Cursor = Cursors.Arrow;
}

巷では Silverlight/WPF に関して MVVM による実装が注目されているようなので、こうしてイベントをチマチマと書くやり方はいずれ時代遅れになってしまいそうな気配ですが、その辺りは今後の状況を伺いつつ臨機応変に対応していけばよろしいかと。

[ posted by ken ]


2010年11月08日

DataGridViewの表示連動

久々のスクラッチ開発は、Windows Formsベースの小さなツール。
一覧データの表示にDataGridViewコントロールを利用しているのですが、意外と色々できて思っていたよか便利だったり。
というわけで、2つのDataGridViewコントロールの表示(カラム幅と横スクロール位置)を連動させる方法をメモっときます。
明細と合計のグリッドを別々に配置したようなシーンで使えるかも、です。
'グリッドビューカラム幅変更イベント
Private Sub dgvData_ColumnWidthChanged( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) _
Handles dgvData.ColumnWidthChanged

If dgvTotal.Columns.Count > e.Column.Index Then
dgvTotal.Columns(e.Column.Index).Width = e.Column.Width
End If

End Sub

'グリッドビュースクロールイベント
Private Sub dgvData_Scroll( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.ScrollEventArgs) _
Handles dgvData.Scroll

If e.ScrollOrientation = ScrollOrientation.HorizontalScroll Then
dgvTotal.HorizontalScrollingOffset = e.NewValue
End If

End Sub

[ posted by ken ]


2010年10月01日

Silverlightでスカイツリー鑑賞

エラく更新が滞ってしまい、広告が出まくってましたが、
ようやく一息つける状況になってきたので、性懲りも無くSilverlightネタいっときます。

今月の弊社トップページを飾っている東京スカイツリーの写真は、弊社K氏が出勤途中に毎日撮ってきているものなのですが、せっかく毎日撮っているので、自分のほうで容量無制限らしいフォト蔵にアップロードしてたりします。
公開設定にしている枚数もそこそこ貯まってきたので、これをブログネタにすべく、簡単な画像ビューアを作ってみました。

問題だったのは、フォト蔵APIがクロスドメインアクセスを許可していないこと。
SilverlightからのアクセスではAPIが利用できなかったので、こちらのサイトを参考に、PHPで書いた簡易プロキシを経由させてみたところ、無事APIが使えるようになりました。

画面は相変わらずセンスが微妙なところですが、反射っぽい表示と、お約束のアニメーション、フルスクリーン表示対応、簡単なスライドショーあたりを付けてみました。
全部コミコミで所要時間は1日くらいでしたが、やっぱりSilverlightは楽しいですね。



コンパクトデジカメの撮って出し(無加工)なので、天気の悪い日はイマイチですが、天気の良い日はなかなかに良く撮れてます。
自分はデジ一眼使いなのですが(最近あまり撮ってませんが)、いまどきのコンデジもなかなか侮れませんね。

[ posted by ken ]