<   2008年 05月 ( 12 )   > この月の画像一覧
【洗濯】 クリーニング倶楽部の真実
 最近、「本当にお金が必要ですか」と問いかけるアコムのCMが気になってしょうがない。まあ、借りる前にそのお金が無駄な借金じゃないかちゃんと考えてくれということなんだろうけど、つい半年前までは「どんどん借りてね」と言わんばかりのCMだっただけに、その変貌っぷりが異様に気になってしまう今日この頃、皆様如何お過ごしでしょうか。とはいえ、背伸びして高価なプレゼントを買うより気持ちが大事なんだと言ってもらえる様な彼女と付き合いたいですけど。世の中の女性達、どうぞよろしく。

 さて、以前からこのブログに辿り着く人の中で「セブンイレブン クリーニング」と検索する人が多く、本家のセブンイレブンからは全くその情報が入手できない状態になっていることが原因だと思いますが、セブンイレブンの「クリーニング倶楽部」というクリーニングサービスは何ぞやという疑問を持つ人が徐々に増えてきたような気がしています。一番気になるのは料金体系でしょうかね。申し込まないと何がいくらなのか全くわからない(問い合わせれば教えてくれるでしょうけど)。私の場合は入会費年会費無料ということで、とりあえず使っても使わなくてもタダならという軽い気持ちで入り、その後ワイシャツが幾らだとかスーツが幾らだとかを知りました。
 そんなクリーニング倶楽部、何でセブンイレブンのホームページのサービス一覧に載っていないんだろうかという疑問を、直接セブンイレブンの人(お客様相談室)にメールで問い合わせてみました。そしたら、今現在はテスト対応として情報を収集している段階だからサービス一覧には記載されていないという返事が返ってきました。google先生に聞いてみるともう4年近く実験しているような気もしますが、(地元のクリーニング屋に?)外注していることもあり、なかなか全ての店舗で展開するのは難しいのかもしれません。

 ああ、因みにクリーニングのバッグは入会時に1個もらえますが、2個目の購入は劣化・破損等の理由による買い替えであっても費用がかかるとのことです(入会後すぐの場合は応相談らしい)。大切に使わないとね。
[PR]
by hidemite | 2008-05-27 14:01 | 日常
【地下】 江戸歴史散歩コーナー
 今日の午前中に歯科検診を3年ぶりに受け、虫歯はなかったものの「歯石:広い範囲で歯石が付着しています」「口腔清掃状態:歯ブラシの届いてないところがあります。時間をかけて丁寧に磨いてください」「歯肉炎:認められます」と、オール×の最低な結果となり、歯石取りマシーンで溜まりに溜まった歯石を根こそぎ取ったら歯と歯の間が違和感を感じるほどににスッキリしたので、ああ、こんなにも歯石が溜まっていたんだなぁ、とげんなりした今日この頃、皆様如何お過ごしでしょうか。しかし、「こんなんだよ」と歯にこびりついた黄色い歯石を見た時はホントガッカリ。やっぱり、1日1回寝る前の歯磨きだけでは足りないよね。

 今日は珍しく外出する予定が2つ続き、夕方は中途半端に暑くて背広がちょっと気持ち悪い中、都会の若干排気ガス臭い外の空気を吸う事ができました。
 んで、会社への帰りの電車に乗る時、南北線市ヶ谷駅にて珍しいものを発見。なんとコンコース内に「江戸歴史散歩コーナー」というものがありました。何でも南北線を作りために地下を掘削していたら数々の江戸時代の埋蔵文化財(主に江戸城の石垣)が発見されたのだそうで、その記念ということでしょうか。江戸城の石垣の積み方や、発掘したときの様子、江戸時代の地図、市ヶ谷駅周辺の模型などが展示されていました。模型はそこそこ丁寧なつくりなので、ちょっと見入ってしまいます。地図には建設当時の仮駅名が記述されており、溜池山王→溜池、六本木一丁目→東六本木、麻布十番→麻布、と書いてありました、今だと違和感を感じてしまいますが、こっちのほうがスッキリしていていいと思ったり。歴史の重みを感じます。
 そういや副都心線の掘削の時も、雑司が谷あたりで遺跡が出て大変なことになってたっけ。マンションやビルの建設もそうなんですが、地下を掘って遺跡が出ると、遺跡発掘の作業が入るらしく、その分工期が遅れるんだそうな。歴史的にはすごいんだろうけど、そこを使ってビジネスをしようとする会社は迷惑とは言わないまでも、ガッカリでしょうね。いや、迷惑か。

 まあ、数人座れる椅子が用意されていますから、南北線の人と有楽町線・JR線の人との逢瀬の待ち時間に是非お立ち寄り下さい。
[PR]
by hidemite | 2008-05-23 19:51 | 日常
【健康】 体脂肪計すげぇ
 人生に悩みながらも何とか生活している今日この頃、会社のそこそこいい福利厚生の一つである健康測定(健康診断とは別ね)に果敢にチャンレンジしてみました。因みに健康診断はおおむね良好、血液検査などは1ヵ月後の忘れた頃にやってくるので、視力が1.5以上であることを保ち続けていることが取り急ぎの幸せでしょうか。んで、体力測定などを含めた健康測定は非常にいい結果が出ました。体力年齢は20歳だそうで嬉しい限りです。

 今回の健康測定で、非常に感動したのが体脂肪測定マシーン。体重計の搭載が当たり前のようになっていながらも、申し訳程度の測定しかできない簡易体脂肪測定機能付体重計とは異なり、両足と両手に電極?があって、全身の状況を把握できるのだそうな。1分ほどの測定で、ものすごい種類の測定結果があらわれました。

 身長:180cm 体重:76.6kg 体脂肪率:12.4% BMI:23.6kg/m^2

 は、まあ、何を使ってもとりあえず出る値ですが、何故か体脂肪率がメチャメチャ低い。上半身の測定も含めるとそこそこ正確な結果が出るそうなので、ある程度信頼できる数値のようです。

 [体成分分析]
 体水分:49.2kg 蛋白質:13.3kg ミネラル:4.64kg(推定) 体脂肪:9.5kg

 [その他]
 骨格筋量:38.2kg ウエスト:81cm 内臓脂肪レベル:5(低い)

 私の76.6kgは、このように構成されているようです。65%は水でできているんですね。また、別の角度から見ると、半分は筋肉的な要素で成り立っているようです。ウエストは何でわかったんだろう・・・
 因みに身体の各部位毎の数値も出ているようで、若干右側に筋肉が偏っているみたいです。体脂肪は下半身に集中しているようで、今後腰から下が要注意ゾーンらしいです。

 [筋肉量(発達率)]
 左上半身:3.5kg(106%)  右上半身:3.7kg(112%)
           胴体:27.8kg(102%)
 左下半身:10.8kg(109%) 右下半身:11.0kg(111%)

 [脂肪量(体脂肪率)]
 左上半身:0.4kg(10.8%) 右上半身:0.4kg(8.5%)
           胴体:4.5kg(13.4%)
 左下半身:1.5kg(11.8%) 右下半身:1.6kg(11.8%)


 こんなに世の中の技術が進化しているなんて、知らなかった・・・
 ま、この結果に甘んじることなく、今後も精進しないとね。
[PR]
by hidemite | 2008-05-21 22:15 | 日常
【希望】 無理な恋愛

 視聴率は低迷しているようだけど、面白く見ています。

 しかし、無理だと思っていたことが覆ると、思っていた以上の喜びを得られるのでしょうね。

 別にそんなこと、恋愛だけじゃないんだろうけど。


 とはいえ、最初からトントン拍子にうまくいく恋愛と、

 最初にマイナスだらけから始まった恋愛とでは、

 どちらがいい一生を過ごしていけるんでしょうかね。

 なんか、後者のほうがより強固な絆が生まれそう、というのは幻想?


 まあ、その時幸せと思えていれば、どっちでもいいか。
[PR]
by hidemite | 2008-05-20 23:47 | 日常
【鳳梨】 続・コーラ戦争
 過去に緑色のコーラとして一世を特に風靡することなかった「ペプシ アイスキューカンバー」という胡瓜味のコーラ(注:前置きが長すぎるので読み飛ばすと出てきます)を飲んで感想を書いたことがあります。初めて飲んだ時の衝撃はメッコール以上だったけど、一瞬にして地獄に転げ落ちるほどの味だったことに気がついたのは既にお伝えしたとおり。おいしいところが、いい、と言いながら、おいしいところは皆無だったなー。因みにペプシの中ではレモンツイストが好きです。
 んでもって、メインのコーラのメンバーチェンジをして、リニューアルをはかったペプシが今回またもやチャレンジングな製品を出してきました。その名も「ペプシ ブルーハワイ」、どうやらパイナップルがコーラに入る模様。ここまで聞くと「ありかもしれない」と思いつつも、なんで液体の色が青なんだろう・・・前回の緑といい、ペプシは「身体に悪そうな色」の飲料を発売するのが得意なようです。今回の商品は好評を得ることができるのでしょうか。きっと甘いんだろうなー。

キュウリの次は、青色ペプシ――「ペプシブルーハワイ」登場(+D style)
[PR]
by hidemite | 2008-05-14 19:04 | 日常
【閉店】 コンビニの終焉
 近所のコンビニが、入居先のビルの建て替えで閉店となった。建て替え後に営業を再開するとのことだが、それは1年半後。駅前のコンビニで利用頻度が高そうな立地だっただけに、不便を強いられている人も少なくないだろう。まあ、私はそもそもコンビニを多用する人間ではなかったので、さほど不便とは思っていないのだが。

 私はコンビニの閉店する過程を知らなかったので、初めてその経過を見ることができたのだが、飲料を含め、数日前から入荷が止まってしまうようで、2日前には、ペットボトルの飲料として、1リットルの充実野菜とお腹が気になる人が飲む黒烏龍茶が淋しく並んでいるだけ。ビールもコーラもイエモンも水も何もかもがない。アイスも回転の少ないハーゲンダッツが残っているだけで、ガリガリ君1本も存在していなかった。そして公共料金などの払い込み、宅配便、その他様々なサービスは閉店の1週間以上前に終了しており、銀行ATMも存在せず。本は返品可能なシステムだからか、潤沢に置いてあった。棚は半分以上が整理され、「閑散」という言葉が似合う店内だった。
 そんな中、弁当やパンは普通に入荷されているようで。てか、飲み物がないんじゃー買う気も起きないよ。辛うじてコンビニの外徒歩10秒のところに自販機があるのが救いである。
 それでも夜に同じ場所を通った頃には、充実野菜がほんの少し残っているだけで、黒烏龍茶は完売。店内の品物も殆どなくなっていた。意外と売れるもんだ。

 閉店の日、朝八時を以て閉店となった店の前を12時頃に通りかかったが、まだいくつか品物は残っていたようだった。これはまとめて処分されてしまったのだろうか。食料・飲料は廃棄なのかな。店内で片付けをしていた店員の肩が非常に寂しそうだった。彼らの明日からの食い扶持はあるんだろうかと、余計な心配をしてみたりする今日この頃。ええ、自分のことを差し置いて言っていながら、自分も本当は心配されるほうなんですが。
[PR]
by hidemite | 2008-05-12 18:54 | 日常
【プログラミング】 レイヤードウインドウ
 前の記事の続き。プログラミングに縁のない人はこちらも読み飛ばしてくださいな。

 んで、google先生に「レイヤードウインドウ」を聞いてみた。んで、MSDNや、こんなページに行き着いた。これらのページを参考にしてプログラムを作ったら、まさにpngの意のままの透明度のフォームが出来上がりました。これは大成功か!?と思って単純に置き換えてみたら、全く文字が表示されない。

 なんと、レイヤードウインドウにすると、コントロールが表示されなくなってしまうという致命的な事実が発覚したのです。とはいえ、コントロール自体は配置されているみたいで、イベントには反応するんだけど、という非常に中途半端で困った事態になってしまいました。WS_CLIPCHILDRENなんてキーワードにも行き着いたけど、何をやっても無駄だったのです。レイヤードウインドウを出すまでのソースはあるのですが、その先の解説がなかなか見当たらず、ようやく辿り着いたのはC++のソースでVBに転用できそうにもなく・・・

 んで、いろいろとさまよった挙句、「ああ、ウインドウそのものの画像に文字を書きゃいいじゃん」という結論に達しました。限られたスペースで文字をスクロールさせる作業もしたかったので、若干冗長な気もしますが、下記のソースで無事、文字が表示されました。


Module1.vb:

Module Module1
Public DataPath As String = System.Windows.Forms.Application.StartupPath
Public frm As Form1

Public Sub Main()
If DataPath.Substring(DataPath.Length - 1) <> "\" Then DataPath &= "\"

frm = New Form1(New Bitmap(DataPath & "1linebar.png"))

Application.Run(frm)
End Sub

End Module

Form1.vb:

Imports System.IO
Imports System.Drawing
Imports System.Runtime.InteropServices
Imports System.Drawing.Text

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
Dim baseBitmap As Bitmap
Dim srcbmp As Bitmap

Public Sub New(ByVal bmp As Bitmap)
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。
Me.SetBackground(bmp)
baseBitmap = bmp
End Sub

' Form は dispose をオーバーライドしてコンポーネント一覧を消去します。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

' Windows フォーム デザイナで必要です。
Private components As System.ComponentModel.IContainer

' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
' Windows フォーム デザイナを使って変更してください。
' コード エディタは使用しないでください。
Friend WithEvents Timer1 As System.Windows.Forms.Timer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
'
'Timer1
'
Me.Timer1.Enabled = True
Me.Timer1.Interval = 50
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
Me.ClientSize = New System.Drawing.Size(292, 266)
Me.Name = "Form1"
Me.Text = "Form1"
Me.TopMost = True

End Sub

#End Region

#Region " UpdateLayerdWindow 関連 API "

<DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)> _
Public Shared Function CreateCompatibleDC(ByVal hDC As IntPtr) As IntPtr
End Function

<DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)> _
Public Shared Function DeleteDC(ByVal hdc As IntPtr) As Boolean
End Function

<DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)> _
Private Shared Function DeleteObject(ByVal hObject As IntPtr) As Boolean
End Function

<DllImport("gdi32.dll", ExactSpelling:=True, SetLastError:=True)> _
Private Shared Function SelectObject( _
ByVal hDC As IntPtr, ByVal hObject As IntPtr) As IntPtr
End Function

<DllImport("user32.dll", ExactSpelling:=True, SetLastError:=True)> _
Private Shared Function GetDC(ByVal hWnd As IntPtr) As IntPtr
End Function

<DllImport("user32.dll", ExactSpelling:=True, SetLastError:=True)> _
Private Shared Function ReleaseDC( _
ByVal hWnd As IntPtr, ByVal hDC As IntPtr) As Integer
End Function

<DllImport("user32.dll", ExactSpelling:=True, SetLastError:=True)> _
Private Shared Function UpdateLayeredWindow( _
ByVal hwnd As IntPtr, _
ByVal hdcDst As IntPtr, _
<System.Runtime.InteropServices.In()> _
ByRef pptDst As Point, _
<System.Runtime.InteropServices.In()> _
ByRef psize As Size, _
ByVal hdcSrc As IntPtr, _
<System.Runtime.InteropServices.In()> _
ByRef pptSrc As Point, _
ByRef crKey As Integer, _
<System.Runtime.InteropServices.In()> _
ByRef pblend As BLENDFUNCTION, _
ByVal dwFlags As Integer _
) As Boolean
End Function

<StructLayout(LayoutKind.Sequential, Pack:=1)> _
Private Structure BLENDFUNCTION
Public BlendOp As Byte
Public BlendFlags As Byte
Public SourceConstantAlpha As Byte
Public AlphaFormat As Byte
End Structure

Private Const WS_EX_LAYERED As Integer = &H80000
Private Const WS_EX_NOACTIVATE As Integer = &H8000000
Private Const WS_EX_TRANSPARENT As Integer = &H20
Private Const WS_BORDER As Integer = &H800000
Private Const WS_THICKFRAME As Integer = &H40000
Private Const WS_CHILD As Integer = &H40000000
Private Const WS_CLIPCHILDREN = &H2000000
Private Const CS_NOCLOSE As Integer = &H200
Private Const AC_SRC_OVER As Byte = 0
Private Const AC_SRC_ALPHA As Byte = 1
Private Const ULW_ALPHA As Integer = 2

#End Region

Const ScrollStr As String = _
"Internet Radio Player Scroll TEST - Scroll string - [END]"
Dim g2 As Graphics
Dim g As Graphics
Dim b As Bitmap
Dim myFont As Font = _
New Font("MS ゴシック", 9.0!, FontStyle.Regular, GraphicsUnit.Point)
Dim xpos As Integer
Dim scrollstrsize As Integer
Dim stoptime As Integer = 2000
Dim stopcount As Integer = -1

#Region " オーバーライドCreateParam:ウインドウを常にアクティブにしない "

Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
' レイヤードウィンドウスタイルを適用
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle Or _
WS_EX_NOACTIVATE Or WS_EX_LAYERED
cp.Style = cp.Style And (Not WS_BORDER)
cp.Style = cp.Style And (Not WS_THICKFRAME)
Return cp
End Get
End Property

#End Region

#Region " Public メソッド "
Dim blend As New BLENDFUNCTION()

Public Sub SetBackground(ByVal srcBitmap As Bitmap)

' デバイスコンテキストを取得
Dim screenDc As IntPtr = GetDC(IntPtr.Zero)
Dim memDc As IntPtr = CreateCompatibleDC(screenDc)
Dim hBitmap As IntPtr = IntPtr.Zero
Dim hOldBitmap As IntPtr = IntPtr.Zero
Try

hBitmap = srcBitmap.GetHbitmap(Color.FromArgb(0))
hOldBitmap = SelectObject(memDc, hBitmap)

' BLENDFUNCTION を初期化
blend.BlendOp = AC_SRC_OVER
blend.BlendFlags = 0
blend.SourceConstantAlpha = 255
blend.AlphaFormat = AC_SRC_ALPHA

' レイヤードウィンドウを更新
Dim r As Boolean = UpdateLayeredWindow( _
Me.Handle, screenDc, Me.Locatio n, _
New Size(srcBitmap.Width, srcBitmap.Height), _
memDc, New Point(0, 0), 0, blend, ULW_ALPHA _
)

Finally
ReleaseDC(IntPtr.Zero, screenDc)
If Not hBitmap.Equals(IntPtr.Zero) Then
SelectObject(memDc, hOldBitmap)
DeleteObject(hBitmap)
End If
DeleteDC(memDc)

End Try
End Sub

Public Sub ReSetBackground()

' デバイスコンテキストを取得
Dim screenDc As IntPtr = GetDC(IntPtr.Zero)
Dim memDc As IntPtr = CreateCompatibleDC(screenDc)
Dim hBitmap As IntPtr = IntPtr.Zero
Dim hOldBitmap As IntPtr = IntPtr.Zero
Try

'文字を描く
DrawStringImage()

hBitmap = srcbmp.GetHbitmap(Color.FromArgb(0))
hOldBitmap = SelectObject(memDc, hBitmap)

' レイヤードウィンドウを更新
Dim r As Boolean = UpdateLayeredWindow( _
Me.Handle, screenDc, Me.Locatio n, _
New Size(srcbmp.Width, srcbmp.Height), _
memDc, New Point(0, 0), 0, blend, ULW_ALPHA _
)

Finally
ReleaseDC(IntPtr.Zero, screenDc)
If Not hBitmap.Equals(IntPtr.Zero) Then
SelectObject(memDc, hOldBitmap)
DeleteObject(hBitmap)
End If
DeleteDC(memDc)

End Try
srcbmp.Dispose()
End Sub

Private Sub DrawStringImage()
'スクロール移動量の設定
xpos += 1
If xpos > scrollstrsize Then xpos = 0 : stopcount = 0
'文字を描く-描画したグラフィックより引用領域を指定してコピー
srcbmp = baseBitmap.Clone()
Dim g2 As Graphics = Graphics.FromImage(srcbmp)
g2.DrawImage(b, New Rectangle(4, 4, 230, 14), _
New Rectangle(xpos + 230, 0, 230, 14), GraphicsUnit.Pixel)
g2.Dispose()
End Sub

Private Sub SetStringImage(ByVal src As String)
b = New Bitmap(2048, 14)
Dim g As Graphics = Graphics.FromImage(b)
'文字列をグラフィック領域に描画
g.DrawString(src, myFont, Brushes.White, 230, 0)
Dim rc As SizeF = g.MeasureString(src, myFont, _
New SizeF(2048.0!, 14.0!))
scrollstrsize = CInt(rc.Width)
xpos = 0
g.Dispose()
End Sub
#End Region

#Region " ウインドウの移動・表示 "
'マウスのクリック位置を記憶
Private mousePoint As Point

'マウスのボタンが押されたとき
Private Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown

If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
'位置を記憶する
mousePoint = New Point(e.X, e.Y)
End If
End Sub

'マウスが動いたとき
Private Sub Form1_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseMove

If (e.Button And MouseButtons.Left) = MouseButtons.Left Then
Me.Locatio n = New Point( _
Me.Locatio n.X + e.X - mousePoint.X, _
Me.Locatio n.Y + e.Y - mousePoint.Y)
End If
End Sub

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

SetStringImage(ScrollStr)
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick

If stopcount < 0 Then
ReSetBackground()
ElseIf stopcount >= 0 Then
stopcount += 1
If (stopcount * Timer1.Interval) > stoptime Then
stopcount = -1
End If
End If
End Sub
End Class



※Module1.vbのsub main()を起動させるように設定してください。Form1.vbの部分は新しく作ったプロジェクトのForm1にそのまま上書きして、この画像ファイルをbinフォルダに置けば、きっと動くはずです。

 SetBackgroundを初回に呼びだし、レイヤードウインドウの基本を作って表示させています。もしかしたらこれは必要ないのかもしれません。実際に文字を更新していくのはResetBackgroundのほう。因みに画像は300x20で、x:0-230が文字の表示できる範囲としています。
 ベースとなるウインドウの画像はBaseBitmapという変数に格納され、このBaseBitmapのコピーを作成したtempBitmapに文字を書き込んでいきます。スクロールする場合は、文字のみを書き込んだビットマップのコピー引用元をずらしていきます。
 Internet Radio Playerでは、webから情報を取得して表示させようとしているので、非同期処理なんかも使ったりして、非常に面倒なことになっています。

 あとはボタンの反応をどうするか。PictureBoxを置いてもいいのですが、クリック判定だけであればマウスが押されたときの位置の判断で何とかなります(これは上記のプログラムと関連性はあるようでないです)。


'マウスのボタンが押されたとき
Private Sub Form1_MouseDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles MyBase.MouseDown

Select Case e.X
Case Is < 240
'処理その1 - テキスト表示エリア
Case Is < 257
'処理その2 - ボタン1
Case Is < 272
'処理その3 - ボタン2
Case Is < 287
'処理その4 - ボタン3
Case Else
'処理その5 - ボタン4
End Select
End Sub


 というわけで、なんとかレイヤードウインドウの動的な変化と実用化にこぎつけました。これくらいの実力だとその手の業界に就職できるかしら。無理か。
[PR]
by hidemite | 2008-05-10 01:08 | PC
【プログラミング】 半透明のウインドウへの憧れ
 私はVB.NETの一番最初のバージョン(2002?)でプログラミングをしています。いまでは2008年版もでていてだいぶ便利になった機能もあるようですが、VB6とVB.NET2002との差を比較するとビックリするほどの差ではないし、その割には結構な金額で棚に並んでおり貧乏な私にはそんなものを買うお金を出せるわけがないわけで、いまでも2002のバージョンでプログラミングしている今日この頃、皆さん如何お過ごしでしょうか。今回の記事はプログラミングを知らない人にとっては苦痛以外の何者でもないので、是非読み飛ばしてください。

 さて、このページではおなじみのInternet Radio Playerですが、当初のプログラミング知識の低さから、「とにかく簡単に聴ける」こと以外は高くて遠い棚へと置き去りにして開発したものの、そこそこ形になってくるといろんなことがしたくなりまして、ガジェットなどでおなじみの半透明のウインドウにできないかと模索しました。

 そこで辿り着いたのが「レイヤードウインドウ」なる言葉。どうやらWindows2000以降に導入された仕組みで、ちょっとしたコードを追加するだけで透過pngを背景に指定でき、自由で綺麗な半透明のウインドウを作ることができるようだ。

 最初はそんなことできるなんて知らなくて、とりあえずフォームの背景を透明にすることぐらいしかできなかった。以下そのソース(冒頭部の部分抜粋)。


Form1.vb:

Public TransKeyColor As Color = Color.FromArgb(127, 127, 127)
Public TransKey As Color

Public Sub New()
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。
Dim img As New Bitmap(1, 1)
img.SetPixel(0, 0, transkeycolor)
TransKey = img.GetPixel(0, 0)
img.MakeTransparent(TransKey)
Me.BackColor = TransKey
Me.TransparencyKey = TransKey
Me.lTime_back.BackColor = TransKey
End Sub

'以下・・・

 いろいろと端折っているけど、要は透明のキーカラーを設定(ここでは#777777)して、Formのnew()の中に、フォーム(とコントロール)の背景色をそのキーカラーに設定すると、テキスト文字のみで描画されるようにできる。勿論プログラムの途中で背景色を変更すると、キーカラー以外であればその色に変更されます。
b0000480_0424884.jpg ただ、この方法だと(本来の)ウインドウの描画領域の背景の描画が微妙であったり、32bitカラーの環境では透過しなたっかり、そもそもテキストのアンチエイリアシングがうまく効かないみたいで非常に使い勝手が悪いのです。まあ、書き方が悪いのかもしれないけど、一部ではバグとも言われているそうな。んで、右のようになる。

 んで、これの解決をしてくれそうなのがレイヤードウインドウだったのです。ここまでで若干記事が長めになってしまったので、つづく。
[PR]
by hidemite | 2008-05-10 00:36 | PC
【音楽】 Internet Radio Player 1.32
 放送局のインターネットラジオを比較的簡易に聴取できるプレイヤーInternet Radio Playerをバージョンアップ。徐々にプレイヤーぽくしてみています。レイヤードウインドウに対応させた前バージョンの動作が微妙な部分があったので、ちょっと手入れをして安定化させました。これでなんとか大丈夫だと思います。

 Internet Radio Player 1.32(lzh形式)

Internet Radio Player:過去の記事

Wiki
[PR]
by hidemite | 2008-05-10 00:07 | PC
【氷菓】 ボクのおやつ
 出先から会社へ帰る帰り道、

 ああ、会社に帰るの面倒くさいなー、でも失踪するのもなんだし、

 と考えていたら、何故かふと無性にアイスが食べたくなって

 「ボクのおやつ チョコバナナモナカ」というアイスを買った。

 ああ、小学生のころ、こんな味のもの食ったなぁ。

 普通のチョコバナナじゃ出ないんだよね。この、体に悪そうな味。

 アイスだったかどうかは忘れたけど。なんとなく、昭和の味がする。

 昭和といえば、私が過ごした幼少期は、既に高度経済成長も終わっていたけど、

 一瞬バブルとかその崩壊とかもあって、なんか「元気」を感じたものだ。

b0000480_1649517.jpg

 容量も200mlで105円と、

 最近軒並み値上がりして100円前後で買えなくなったアイスなんかより全然いい。


 といいながらも、確か前はチョコミント味があったんだよね。

 そっちのほうが更に大好きだ。

 そういや昔ローソンでアイス売ってなかった?

 そこのチョコミントアイスが、当時の私にとって、何よりの贅沢だった。

 サーティーワンとか、ハーゲンダッツとか目じゃなかったね。


 別に子供の頃の味覚を覚えているわけじゃーないし、

 もっと美味しいアイスクリームは食ってると思うけど、

 その頃の喜び以上を感じられるアイスクリームに出会った事は、今のところ、ない。

 不思議なものだ。
[PR]
by hidemite | 2008-05-08 17:04 | 日常