说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用Delphi编写CGI程序返回图象

HTML文档下载 WORD文档下载 PDF文档下载
用Delphi编写CGI程序返回图象

---- Delphi 4.0对Internet编程提供了强大的支持,Delphi 4.0编写CGI非常容易, Delphi 4.0本身提供了例程。但是笔者在实践中遇到需要CGI程序根据数据库动态返回图象的情况,很多文章推进使用Cgi-Expert或有关的OCX控件,使用控件不仅带来额外的开销,且缺乏灵活性,那么能否不使用这些控件自己编写代码实现,现推荐一种方法,代码如下:

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.

推荐5款超实用的.NET性能分析工具 OpenStack基金会主席Alan Clark访华 欢迎提问 程序员的十大烦恼 兼顾性能和兼容体验:HTML5时代的浏览器全面测试 Lisp的本质 Amazon工作环境恶劣员工高流失率 为何却依然能持续成功和创新? 对几个软件开发传统观点的质疑和反驳 [实战分析] 编写高效的JavaScript程序 Twitter的系统编程 百度高通达成合作 为Android终端提供云服务 EasyHadoop技术沙龙在北京、广州两地齐发 CloudStack技术沙龙:committer李学辉及中航信分享 思科为什么愿意花12亿美元收购云计算网络初创公司Meraki? 谷歌有麻烦了!联邦贸易委员会正调查其搜索业务 当数据中心遭遇污水 微软新能源数据中心的诞生 2012vForum:更加注重开发者 腾讯赵伟:Hive在腾讯分布式数据仓库的实践 Apple将在2013年启动香港数据中心的建设 顶级域名扩张受阻:ICANN透露部分域名存争议 硅谷创业教父Paul Graham:如何获得创业好点子? GDC2012特别报道:中西方游戏开发思想在这里融合 应用示例和对象是编程的未来吗? 为什么2012年HTML5发展远未达预期 当程序不再工作时,程序员说 独立游戏开发者易犯的9大致命错误 “Do Not Track”的前世今生 《Warcraft是怎样炼成的(三)》:从Demo到游戏 无限强大的超级马里奥AI 以Google第二代数据库产品MegaStore为理论模式 探索HBase系统 传Google明年推Chrome OS触摸屏上网本 下载自己过去的Tweets?用户准备好了吗? 一个关于打印的简单问题?在线等,急? 有对KYLIX熟悉的吗,请发表一些东东撒:) 如何在程序内屏蔽掉Alt+Tab这组系统功能键? 各位节日快乐!!! 请各位搞VxWorks 的高手指导一下菜鸟!一定进来看看!谢谢! C/s结构,从一个c端发一些数据(如报表等)到另一个c端,接收到后最好能返回一个成功消息,有什么好的方案么 我受不了,救命啊 如何使得树形控件中的一个没有子项目的目录前面显示为减号或不显示'+'和'-'? 如何实现将页面的内容导入到word中?在线等,急! 怎么回事?主机名可以CONNECT到SQL服务器,用IP地址不行了 打印的问题!!!! pb8与win2000server 小小问题?如何得到窗体右上角关闭,最大化,最小化的句柄??? 多少分才能有两绿三角?多少分才能有一个红星? 哪位同志知道网站的风格像 win xp? 请问哪里可以下载xml spy的中文帮助文件? 请教如何将.cab包解开 50分﹕HELP!!!為什么我的report分發后﹐項目全錯位了﹐應如何解決﹖ 各位,在工程中怎样用资源文件(*.res) !!请问如何利用ADO做三层设计? 哪位大哥有vfw.pas的啊?60分相赠 ATL在中国的现状怎样,大家进来说说!!! 如何黑一个网吧~~~ 急:问个初级问题,希望能得到解决 这个论坛不错! 能不能让C盘只读不写啊? 为什么CopyMemory在NT下的效率与在98下的效率不同! cmos密码如何破解 database控件的问题????? 关于if 语句! 急急急...所以的程序一运行报错:This Example Program Can Only Be Run From With The IDE? 我的机器一运行该页面就慢 怎样设置FileListBox1的路径 free,delete ,Free()的区别? 初学网络,从何学起?如何过渡 请问生成EXE文件以后,要把PB下的哪些dll文件拷贝过去,全部都要吗??还是只要拷贝几个就可以,请问是哪几个? 如何实现自动编号(在线等待) 请问如何在使用insert into时同时使用select和values语句?(十万火急) 怎样改变ListView1在详细显示模式下表头的高度(调用小5号字体)? 我用的是TomCat,请大侠们帮我看看这段调用access数据库的jsp程序那里错了!每次都提示“From字句语法错误”! 如何对数据窗口中的内容进行批量修改?急!!!!! 全上海暂无业者,联合起来!!! 请问如何在使用insert into时同时使用select和values语句?(十万火急) 高分解答!!!谢谢!!!! 字符'\'在c++中当什么看 初学者的problem,讲一讲 一个菜问题 我的爱机是不是感冒了? 关于.NET的资源占用问题? 大侠们好!!!为什么我用DBEdit输入中文可是在DBGrid中显示的是“#”?? 请教Sybase高手3个问题 电镀桌脚开始生锈了,有什么办法可以去锈? 高压电容柜与电容器并联的电压互感器做什么用,说是放电线圈,具体是什么原理? 形容拘谨 谨慎的词语我只等30分钟 求 怎么去除电镀板锈渍 变电站并联电容器组的作用是什么? 3P空气开关是否能改成1P一个和2P开关一个? 电能表上的空气开关按上后,屋内总空气开关跳闸;屋内总线上的空气开关按上后,电能表上的空气开关跳闸. 变电站电容器电容器的单位是什么? 拘谨拘束,写出相应的词语 电容降压电路的功耗到底为多少?相比提供相同的功率的开关电源,功耗是大还是小?请专家指教.我采用1UF的电容降压组成一个12V的稳压电源,输出最大电流为60MA左右,按理论上讲电容不消耗功, 地球上什么地方温度最高? 形容拘谨,不自然,不安定的样子.(什么词?) 11600吨水的等价值与当量值是多少? 地球哪个地方温度最高? 什么样的玉米秸秆打捆机可以捆出300~400公斤的方捆 已知水的密度是1.0*10^3kg/m^3标准煤的热值是3.4*10^7j/kg求5t水的体积? 空气开关1P﹢N和2P各指什么意思?有什么区别?家用空气开关总开关,不用带漏电的会不会好点,因为怕家中一处漏电导致全部停电… 诗人思念家乡的诗句和 诗人一腔爱运用国热情的诗句 数学画圈圈的题, 地球上什么地方的温度最高? 请告诉我爱国主义题材的古诗和思念家乡亲人的古诗各一首!要题目、诗人、诗人的朝代 画圈圈的2.3题帮忙解答下谢谢了过程和结果 “形容死得毫无价值”这个意思的词语是什么? 变电站一次二次部分都包括什么 直流屏的作用是什么 形容死的词 8086/8088系统中有20根地址线,它的存储空间最大是多少?将该内存空间顺序分为16段,每段64K,试写出第二段和最末段的地址范围. 消费量与需求量的区别?我想请问一下,消费量与需求量具体概念及区别是什么?从实际生活经验上来分析,请解释消费量等同于需求量吗? 死的有意义有价值的相关诗句 8086存储器系统的1MB空间为什么要分为奇偶两个部分,字访问时应注意什么 什么是石油表观消费量 太阳温度很高是因为它在发生着核聚变,地球中心有五千度的温度是因为什么?有的说是公转造成的,可是地...太阳温度很高是因为它在发生着核聚变,地球中心有五千度的温度是因为什么?有的 埃菲尔铁塔是什么时间建造的 找出自己感受最深的句子画出来,并说说自己的解释《美好的发现者》 什么是温度在运动中核聚变 法国的埃菲尔铁塔是什么时候建成的? 只需要画圈圈的题 18 1 表皮中有神经末梢吗 埃菲尔铁塔是什么时候建立的? 青岛海湾大桥全长是多少 埃菲尔铁塔为什么这样建? 1.十指连心是不是因为表皮内分布有感觉神经末梢?2.当一只苍蝇飞到你面前是你的眼睛会闭上是因为?2.A.感觉 B.刺激 C.反射 青岛海湾大桥(胶州湾跨海大桥)的建筑特点和意义 什么是数字化变电站 地球上什么地方温度最高? 三台各1P的冷暖空调,应安装多大的空气开关?我计划给三个房间同时安装均为1P的冷暖空调(1P×3台),以备夏季降温,初春和深秋季节取暖之用.请这三台冷暖空调共用一个空气开关.为了安全,请 国内数字化变电站有哪些 比喻非常有滋味 是什么词语的意思? 1p空调配多大的空气开关 碘当量是怎么算的 核聚变产生的几亿的温度是怎么测的?用什么仪器测啊,好像没有东西能承受几亿度的高温啊 房间里同时开启一台电脑一个热水壶1P的空调一台电视需要装多大的空气开关 读了文中画横线的句子,你有什么感受? 地球为什么有天气 胶州湾跨海大桥在现在胶州湾隧道的地方建跨海大桥就好了啊,为什么偏偏选胶州湾最宽处建跨海大桥? 谁能讲解一下电容器放电线圈的工作原理?如题,我现在在站里看放电线圈的原理图,但是还是不知道它是怎么放电的,电容器正常工作的时候是怎么不放电的!特别是它工作的时候是否也在放电? 现在的地球温度是多少` 胶州湾跨海大桥长多少米 户外的电容器组怎样经放电线圈放电那需要人手工放电吗 拘谨 ,拘束的相应词语
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘