Kalender DFGEN

March 2010
M T W T F S S
« Feb    
1234567
891011121314
15161718192021
22232425262728
293031  

Render Form: Desain Sekaligus Form dan Produk Tercetak

Perlu dicatat, bahwa prosedur ini untuk produk tercetak berupa list belum diimplemetasikan.

Prosedur ini tercakup dalam utility.pas. dan digunakan bersamaan dengan fungsi PrintTStrings pada sesi pencetakan memo.

===

procedure RenderForm(AForm: TForm; ACanv: TCanvas);
var i,j,x,y :integer;
cn: TControl;
s,tm: string;
NormalKeyBoardChar:string;

function CleanAccelChar(sc:string):string;
var idx:integer;
begin
result:=”;
for idx:=1 to length(sc) do
if sc[idx]<>’&’ then result:= result+sc[idx];
end;
begin
NormalKeyBoardChar := ‘ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()-_+=|\,<.>/?:;”‘+#39;
for i:= 0 to AForm.ControlCount -1 do
begin
s:=”;
cn:= AForm.Controls[i];
if cn.Visible then
begin
if cn is TLabel then
begin
ACanv.Font := TLabel(cn).Font;
S:= TLabel(cn).Caption;
if Trim(s)<>” then
begin
if (TLabel(cn).FocusControl<>nil) then
begin
s:=CleanAccelChar(s);
end;
if ACanv.TextWidth(TLabel(cn).Caption)<=cn.Width then
begin
case TLabel(cn).Alignment of
taLeftjustify: x:= cn.Left + 1;
taRightjustify: x:= cn.Left + cn.Width – ACanv.TextWidth(S)-1;
taCenter: x:= cn.Left + (( cn.Width -  ACanv.TextWidth(S))div 2);
end;
ACanv.TextOut(x,cn.Top +1,s);
end
else
PrintTStrings(s,cn.BoundsRect,ACanv,TLabel(cn).Alignment,15);
end;
end else
if cn is TEdit then
begin
ACanv.Font := TEdit(cn).Font;
S:= TEdit(cn).Text;
if Trim(s)<>” then
begin
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
ACanv.TextOut(cn.Left+1,cn.Top + j,S);
end;
end else
if cn is TCurrencyEdit then
begin
ACanv.Font := TCurrencyEdit(cn).Font;
if TCurrencyEdit(cn).Value <> 0 then
begin
s:= Format(‘%.0n’,[TCurrencyEdit(cn).Value]);
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
ACanv.TextOut(cn.Left+cn.Width-2-ACanv.TextWidth(S),cn.Top+J,S);
end;
end else
if cn is TSpinEdit then
begin
ACanv.Font := TSpinEdit(cn).Font;
if TSpinEdit(cn).Value <> 0 then
begin
s:= Inttostr(TSpinEdit(cn).Value);
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
ACanv.TextOut(cn.Left+cn.Width-2-ACanv.TextWidth(S),cn.Top+J,S);
end;
end else
if cn is TPanel then
begin
ACanv.Font := TPanel(cn).Font;
S:= TPanel(cn).Caption;
if Trim(s)<>” then
begin
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
case TPanel(cn).Alignment of
taLeftJustify: x := cn.Left + 2;
taRightJustify:x := cn.Left + cn.Width – ACanv.TextWidth(S) – 2;
taCenter:    x:=  cn.Left + ((cn.Width – ACanv.TextWidth(S) ) div 2);
else x:= cn.Left + 2;
end;
ACanv.TextOut(x,cn.Top+J,S);
end;
end else
if cn is TImage then
begin
ACanv.StretchDraw(cn.BoundsRect,TImage(cn).Picture.Bitmap)
end else
if cn is TShape then
begin
//tmpb := ACanv.Brush;
//ACanv.Brush := TShape(cn).Brush;
ACanv.Rectangle(cn.BoundsRect);
//ACanv.Brush := tmpb;
end else
if cn is TMaskEdit then
begin
ACanv.Font := TMaskEdit(cn).Font;
S:= TMaskEdit(cn).Text;
if Trim(s)<>” then
begin
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
ACanv.TextOut(cn.Left+1,cn.Top + j,S);
end;
end else
if cn is TComboBox then
begin
ACanv.Font := TComboBox(cn).Font;
S:= TComboBox(cn).Text;
if trim(s)<>” then
begin
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
ACanv.TextOut(cn.Left+1,cn.Top + j,S);
end;
end else
if cn is TDateTimePicker then
begin
ACanv.Font := TDateTimePicker(cn).Font;
S:= DateToStr(TDateTimePicker(cn).Date);
j:= (cn.Height – ACanv.TextHeight(‘0′)) div 2;
ACanv.TextOut(cn.Left+1,cn.Top + j,S);
end else
if cn is TMemo then
begin
ACanv.Font := TMemo(cn).Font;
{tm:= DelNonListedChar(TMemo(cn).lines.Text,NormalKeyBoardChar);
if Trim(tm)<>” then
begin
y:=0;
repeat
s:= ”;
x:= 1;
repeat
Informate(inttostr(x));
s:= s+tm[x];
x:= x+1;
if x>length(tm) then break;
until ACanv.TextWidth(s)> cn.Width;
j:= 0;
ACanv.TextOut(cn.Left+1,cn.Top + j + y ,S);
y:= y+(3*ACanv.TextHeight(‘0′) div 2 );
Delete(tm,1,x);
until tm=”;
end;}
PrintTStrings(TMemo(cn).Text,cn.BoundsRect,ACanv,TMemo(cn).Alignment,20);
end;
end;
end;
end;

===

Prosedur yang tertulis di sini dapat saja berubah disebabkan HTML-TAG-STRIPTING. Untuk menghindari kesalahan silakan lihat di file library yang disertakan dalam paket source DFGEN versi terakhir.

==

Salam bahagia