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

用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.

国外一学生发明新计算机系统,用微芯片代替硬盘 《近匠》第12期:Yeelink——智能硬件云服务 三星Galaxy S5:home键内置指纹识别传感器、5.25寸2K屏幕 Google发布Google Glass使用守则 三星将发布新款智能手表 搭载Tizen系统抛弃Android 从Camera360 V5版本发布,看现代相机应用趋势 索契冬奥会API:赛事的数据直播 为什么开源企业的开源大旗正在褪色 尘埃落定 腾讯确认投资大众点评,获20%股份 Unite China·2014:上千Unity开发者狂欢、五大精品课程全面开启 下载4万首歌曲仅需几秒——蓝色巨人IBM发布新传输技术 15核芯片+数据平台,Intel软硬兼备的Hadoop战略 Facebook以160亿美元收购50名员工、4.5亿月活跃用户的WhatsApp 2014年全美最吃香职业TOP100,程序员排第一 LinkedIn向所有用户开放博客发布平台 Google与Facebook的产品研发之道 小米海外扩张第一步 红米进军新加坡 Google I/O大会时间已定,Google Glass真的来了? 精英团队PK全能型数据科学家,拼的可不只是数量 专攻移动支付?PayPal将面向全球开放移动SDK CoconutKit:iOS开发必备的开源组件库 个人隐私是如何“泄漏”的:国内外互联网企业隐私策略对比 惠普2014年Q1财报:净利润同比增16% PC业务逆势好转 “阅后即焚”挖谷歌墙角,GAE技术大牛跳槽Snapchat 日800万访客、20万RPS网站的5个9可用性架构 程序员想找好工作?那就学好Linux吧! 一周消息树:开源专家袁萌,国产COS操作系统是“杂种”,不是中国软件梦 移动周报:对话智能硬件云服务平台Yeelink Node.app:用Node.js API开发iOS“原生”应用 Google Project Tango:能3D捕捉的智能手机 成功打造Evernote API生态系统的五大经验 请您对您的言行负责,遵守中华人民共和国有关法律、法规,尊重网上道德 请教一下杭州的PB程序员工资行情 反解密,有谁能那么牛?100分相送!!!!!!!!! 没问题,想倒分怎么办? 正是风雨飘摇日 =============怎么固定一个ActiveX控件的大小为资源里一个对话框的大小?========= 哲学家就餐问题,为了防止死锁,通常用几个信号量就可以解决? 这几天心里赌的慌,女友怎么能够这样! api中怎样初始时就最大化 小问题,在线等....好了就结分 怎么样检查这些端口是做什么的? 我读取数据集的时候,为什么会产生越界的异常? 如何通过超链接传值到下一页 谢谢 如何把当前时间组合成一个字符串? 请教大家一个问题: 请教大家一个问题: 本人给出配置表,请问路由器配置好之后,客户机网上邻居--》本地连接该怎么设置? 提问:页面如何顶边??? 难道嗳!!! 如何在几个窗体之间进行数据传递 请问:为什么编译无错,但生成。EXE文件时却有错,我是在卸载中文VC后安装英文版的 高手们,有一事不明! 郁闷~~ 调用VCDLL的参数传递问题 各位好心的大哥帮帮我,救救我~~~~~~我在线等待~~~~~~~~~ 六七十年代发生的几件很牛B的事情【转载】 求一存储过程写法 select ....union windows xp上oracle 816的数据库服务进程不能启动 image字段的处理? 今天我开始上班了 数据判断加分 关于注册用户问题 请教关于时间类型的问题 如何获取一个字符串中中文字符的个数?100分 如何用api获取cpu的processorId? 如何获取一个字符串中中文字符的个数?100分 神啊,救救我吧! 能把bcb6的程序转换成bcb5的吗? 如何获取服务器时间? 万分紧急,请大哥们帮小弟!!!!!!!!我在线等待高手相救 请教关于连接数据库的问题 如何把当前时间组合成一个字符串? 如何使SOAP客户端的web引用的url变成程序中设置(就是不写死了),又不需要重新编译客户端程序的! 我在运行某些程序的时候,为什么会出现office2000的安装进程,还要叫我放入off2000的安装盘??? 请问Oracle触发器里能执行Grant语句吗?? 关于DBGRID字段显示问题 连接时出现这样的提示,可能的问题在那里? 碰到一个几乎让我晕倒的问题!! 紧急提问:我的小型机死机了,怎么样关闭安全的关闭数据库,在重新启动小型机?在线... access有没有光盘路径的设置? 作文 我在生活中学习语 高中励志格言如题. pvc配方有分冬季夏季配方吗?又怎么区别 pvc滴塑产品软硬度怎么调 已知:∠a=∠f,∠c=∠d,你知道db,ec有什么样的位置关系吗?并说明理由 褒姒的拼音 如图,在三角形ABC中,BC=9,AC=12,AB=15,角ABC的平分线BD交AC于D,DE垂直于DB交AB于E设圆O交BC于点F,连接EF,求AE的长和EF的长 我们的作业题(关于二次函数的).....1.关于二次函数y=(x+2)2-3的最大(小)值,叙述正确的是( )(A)当x=2时,有最大值-3 (B)当x=-2时,有最大值-3 (C)当x=2时,有最小值-3 (D 1、即有忘记往事,重新开始,又有与人为善的成语和词语,请举例!2、请写出与茶马古道的近义词 RTQH-60 SF6气体回收净化充放装置可以选配进口真空泵吗? RTQH-60 SF6气体回收净化充放装置的SF6储罐可以选择200公斤吗? 欧洲风暴肆虐 高校推风暴命名项目收费韩外长:日本错误历史认知阻碍韩日关系日知名主播之子因盗窃被解雇 检方暂不奥巴马提名两名竞选支持者为美国驻外大韩在独岛海域清理垃圾17吨 吁居民游日土发表共同宣言 安倍决心加强战略伙意大利比萨斜塔修复见成效 12年扶正美称法国西班牙自行实施电子窃听行动 美称法国西班牙自行实施电子窃听行动 外媒:美联储资产规模恢复正常至少要到乌克兰法院裁定没收季莫申科女儿名下饭3·15金牌诚信企业岷宏投资 承诺坚新疆想赢靠内线 北京爆发看老马6旬孤寡老人 自家地头服毒亡2014年中国贵金属纪念币寻找蓉城“最美花海”沱牌舍得公布2013年年报小学开设“二外”课 家长问“学来干啥四川贷款中心银行利率八折 当天也能放失信于众的自主招生宁肯不要紧接01版春花稍纵即逝 春光不可辜负
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘