F5キーの無効化
一般的なブラウザでは、F5キーを押すとブラウザの更新が行われページが初期化されてしまいます。しかし、以下のようにすることで、Curlではブラウザにイベントが通知される前にイベントを無効化できます。
{{get-gui-manager}.add-event-handler {on t: KeyPress do {if t.value == KeyPressValue.f5 then {t.consume} } } }
帳票出力
ポータル・スケジューラーは、帳票出力として以下の2つを実装しています。
予定をエクセル形式で出力
PHPでpearのSpreadsheet_WriteExcelを使用して、予定をエクセル形式で出力します。ただし、出力されるファイルフォーマットがExcel 95形式なので、1セル255文字までの制約があります。なお、出力形式を2000形式にするパッチが公開されているようです(参考:Spreadsheet_Excel_WriterでBIFF8を取り扱う - Paradigm Shift Design)。
画面のハードコピー
画面のハードコピーをBMP形式でローカルに一時保存し、保存したファイルをプリンタに出力します。わざわざ帳票を作成するまでもないときは使えそうな機能だと思います。
{define-proc public {my-graphic-to-bitmap p_image: Graphic, p_file: Url}: void let v_gc: DisplayContext = {p_image.get-display-context}, v_rect: GRect = {p_image.layout.get-bounds}, (r2: Renderer2d, d: Drawable) = {Renderer2d.create-offscreen v_rect.width, v_rect.height, 1 / v_gc.pixel-size }, v_data: ImageData = {ImageData} {r2.render-rectangle 0pt, 0pt, v_rect.width - 0.5pt, v_rect.height - 0.5pt, fill-pattern = "white" } {{p_image.get-graphical-root}.draw r2} {r2.render-line 0pt, 0pt, 0pt, v_rect.height - 0.5pt, fill-pattern = "black" } {r2.render-line 0pt, v_rect.height - 0.5pt, v_rect.width - 0.5pt, v_rect.height - 0.5pt, fill-pattern = "black" } {r2.render-line v_rect.width - 0.5pt, v_rect.height - 0.5pt, v_rect.width - 0.5pt, 0pt, fill-pattern = "black" } {r2.render-line v_rect.width - 0.5pt, 0pt, 0pt, 0pt, fill-pattern = "black" } set v_data.pixmaps = {new {Array-of Pixmap}, {d.to-Pixmap} } {v_data.save-to-url p_file, "image/bmp"} {d.destroy} }