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}
}

