RSSリーダーの表示
RSSリーダーで情報を表示する部分は部品化して作成しました。文字列のスクロールスピード(普通/速い/遅い)、スクロール種類(文字列が見えなくなるまでスクロール/右端にきたらスクロールを止める/すべて表示されたらスクロールを止める)、次の文字列を表示するまでの間隔を指定できるようにしました。コントロールのソースコードを簡単に説明します。コントロールのソースコードはダウンロードして実行できます。
コントロールはグラフィカルな子を1つ格納するコンテナの基本クラスBaseFrameクラスを継承して作成しました。
{define-class public MyScrollMessageFrame {inherits BaseFrame} : 省 略 : }
コンストラクタは、「①スクロールスピード」「②スクロール種類」「③次の文字列を表示するまでの間隔」「④表示を繰り返すか?」「⑤画面に表示されたら自動的にスクロールを再開するか?」を引数で受け取るようにしました。
{constructor public {default scroll-speed: int = MyScrollMessageFrame.NORMAL, ||①スクロールスピード type: int = MyScrollMessageFrame.SCROLL, ||②スクロール種類 delay: int = 20, ||③次の文字列を表示するまでの間隔 repeat?: bool = false, ||④表示を繰り返すか? auto-resume?: bool = false, ...} ||⑤画面に表示されたら自動的にスクロールを再開するか? {construct-super ...} : 省 略 : }
文字列のティッカー表示はタイマーを使用しています。タイマーはTimerクラスを使用するば簡単に実現できます。
self._timer = {Timer enabled? = false, interval = 100ms, delay = 0ms, {on t: TimerEvent do ||タイムアウト {if-non-null self.layout then {self.on-timeout-timer t} } } }
文字列を描画している部分です。drawメソッドは描画が必要になったときに自動的に呼ばれるメソッドです。drawメソッドをオーバーライドして現在のスクロール位置に文字列を直接描画しています。
{method public {draw r2d: Renderer2d}: void {with-render-properties font = {Font self.font-family, {self.any-to-distance self.font-size, {self.get-display-context} }, weight = self.font-weight, style = self.font-style }, fill-pattern = self.color, translation-x = self._message-xpos, translation-y = {r2d.get-font-ascent} on r2d do {r2d.render-string 0pt, 0pt, self._message } } }
コントロールを使用している部分です。コントロールを生成してappendメソッドで表示する文字列を登録します。startメソッドでティッカー表示が始まります。
{let v_frame: MyScrollMessageFrame = {MyScrollMessageFrame width = 500pt, height = 15pt, background = "silver", font-size = 12pt, type = MyScrollMessageFrame.STOP-IN-MESSAGE-END, repeat? = false, auto-resume? = true} } {do ||表示する文字列をセット {v_frame.append "Windows PowerShell 活用編(3) ファイル操作 3"} {v_frame.append "「会社の成長」と「自身の成長」を実感できるカカクコム"} {v_frame.append "VB.NETで入力エラーチェック機能を持ったフォームを作成する"} {v_frame.append "PR: 迷惑メール対策なら信頼のマトリックススキャンAPEX"} ||表示の開始 {v_frame.start} }