📄 026.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题--网络应用-->用Delphi编写CGI程序返回图象</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题--网络应用 用Delphi编写CGI程序返回图象">
<META NAME="description" CONTENT=" - DELPHI专题--网络应用 - 用Delphi编写CGI程序返回图象">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index4.html">返回</a>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">用Delphi编写CGI程序返回图象</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><span style="font-family: 宋体; font-size: 9pt"><font color="#ffffff">----</font>
Delphi 4.0对Internet编程提供了强大的支持,Delphi 4.0编写CGI非常容易,
Delphi 4.0本身提供了例程。但是笔者在实践中遇到需要CGI程序根据数据库动态
返回图象的情况,很多文章推进使用Cgi-Expert或有关的OCX控件,使用控件不仅
带来额外的开销,且缺乏灵活性,那么能否不使用这些控件自己编写代码实现,现
推荐一种方法,代码如下: </span></p>
<BR>
<pre><span style="font-family: 宋体; font-size: 9pt">
unit ChartMod;
interface
uses
Windows, Messages, SysUtils, Classes,
HTTPApp, Db, DBTables,
DbChart, Series, Jpeg, ExtCtrls;
type
TWebModule1 = class(TWebModule)
Table1: TTable;
procedure WebModule1ActionAreaAction
(Sender: TObject;
Request: TWebRequest; Response:
TWebResponse; var Handled:
Boolean);
procedure WebModule1ActionPopulationAction
(Sender: TObject;
Request: TWebRequest; Response:
TWebResponse; var Handled:
Boolean);
procedure WebModule1Create(Sender: TObject);
procedure WebModule1Destroy(Sender: TObject);
procedure WebModule1AfterDispatch(Sender: TObject;
Request: TWebRequest; Response:
TWebResponse; var Handled: Boolean);
private
Chart: TDBChart;
Series: TPieSeries;
Image: TImage;
public
{ Public declarations }
end;
var
WebModule1: TWebModule1;
implementation
{$R *.DFM}
procedure TWebModule1.WebModule1ActionAreaAction(
Sender: TObject;
Request: TWebRequest; Response: TWebResponse;
var Handled: Boolean);
begin
// set specific values
Chart.Title.Text.Clear;
Chart.Title.Text.Add ('Area of Countries');
Chart.LeftAxis.Title.Caption := 'Area';
Series.Title := 'Area';
Series.PieValues.ValueSource := 'Area';
end;
procedure TWebModule1.WebModule1ActionPopulationAction(
Sender: TObject;
Request: TWebRequest; Response: TWebResponse;
var Handled: Boolean);
begin
// set specific values
Chart.Title.Text.Clear;
Chart.Title.Text.Add ('Population of Countries');
Chart.LeftAxis.Title.Caption := 'Population';
Series.Title := 'Population';
Series.PieValues.ValueSource := 'Population';
end;
procedure TWebModule1.WebModule1Create(Sender: TObject);
begin
// open the database table
Table1.Open;
// create the chart
Chart := TDBChart.Create (nil);
Chart.Width := 600;
Chart.Height := 400;
Chart.AxisVisible := False;
Chart.Legend.Visible := False;
Chart.BottomAxis.Title.Caption := 'Name';
// create the pie series
Series := TPieSeries.Create (Chart);
Series.ParentChart := Chart;
Series.DataSource := Table1;
Series.XLabelsSource := 'Name';
Series.OtherSlice.Style := poBelowPercent;
Series.OtherSlice.Text := 'Others';
Series.OtherSlice.Value := 2;
Chart.AddSeries (Series);
// create the memory bitmap
Image := TImage.Create (nil);
Image.Width := Chart.Width;
Image.Height := Chart.Height;
end;
procedure TWebModule1.WebModule1Destroy(
Sender: TObject);
begin
Chart.Free;
Series.Free;
Image.Free;
end;
procedure TWebModule1.WebModule1AfterDispatch(
Sender: TObject;
Request: TWebRequest; Response: TWebResponse;
var Handled: Boolean);
var
Jpeg: TJpegImage;
MemStr: TMemoryStream;
begin
// paint the chart on the memory bitmap
Chart.Draw (Image.Canvas, Image.BoundsRect);
// create the jpeg and copy the iamge to it
Jpeg := TJpegImage.Create;
try
Jpeg.Assign (Image.Picture.Bitmap);
MemStr := TMemoryStream.Create;
try
// save to a stream and return it
Jpeg.SaveToStream (MemStr);
MemStr.Position := 0;
Response.ContentType := 'image/jpeg';
Response.ContentStream := MemStr;
Response.SendResponse;
finally
MemStr.Free;
end;
finally
Jpeg.Free;
end;
end;
end.</span></pre>
<BR>
<hr color="#EE9B73" size="1" width="94%">
</TD>
</TR>
</table>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -