delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks

#

有关ActiveX控件事件的问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061221000855234.html
我在ActiveForm里面添加了一个事件OnCall,参数为BSTR类型,  
  然后添加了一个Button,当单击Button的时候引发OnCall事件,  
  我传了一个String进去.  
  在JavaScript中我用一个简单的显示事件参数的函数来实现这个事件的回调.  
  结果运行时点击Button提示  
  "Access   violation   at......".  
  高手们指教啊

建议用WideString,双字节,或者使用VARIANT

(1)BSTR类型是COM中使用的标准字符串类型。它其实是一个32位指针,保存字符串首字符的地址。既然是指针类型,好的习惯应该是在定义一个BSTR类型变量时立刻初始化为NULL,即使随后立刻就会对其进行赋值。  
          (2)pLastNode->get_text(BSTR*   pstrText)方法内部为返回的字符串分配了内存资源,并将该字符串的地址bsName变量中。  
          (3)外部使用者pLastNode->get_text方法的调用者必须自己调用SysFreeString(BSTR   bstr)方法释放BSTR类型字符串占用的资源。  
          MSDN中用关于BSTR和其他字符串类型的更详细的叙述。

跟OnCall有关的定义:  
  procedure   OnCall(const   Param1:   WideString);   dispid   209;  
  TActiveFormXOnCall   =   procedure(ASender:   TObject;   const   Param1:   WideString)   of   object;  
  FOnCall:   TActiveFormXOnCall;  
  property   OnCall:   TActiveFormXOnCall   read   FOnCall   write   FOnCall;  
   
  procedure   TActiveFormX.Button1Click(Sender:   TObject);  
  var  
      msg:   WideString;  
  begin  
      msg:='测试';  
      self.FEvents.OnCall(msg);  
  end;  
  一点击这个按钮就出错。

posted @ 2009-01-04 16:51 delphi2007 阅读(382) | 评论 (0)编辑 收藏

关于Delphi字符转换的问题。不会啊!!!帮帮忙!!! VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220231901235.html
输入一个任意长的字符串,使用Stringgrid控件显示字符串及其ASCII码。

s:   string;  
   
  s:='abc';  
   
  IntToHex(Ord(s[n]),2);//返回ASCII码十六进制表示   n=1..Length(s)

楼上正确

ord

procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      s   :   string;  
      i   :   integer;  
  begin  
      s   :=   'asda';  
      StringGrid1.ColCount   :=   length(s);  
      for   i   :=   1   to   length(s)   do  
          StringGrid1.Cells[i-1,1]   :=   IntToHex(ord(s[i]),2)  
  end;

得到答案了吧

posted @ 2009-01-04 16:51 delphi2007 阅读(129) | 评论 (0)编辑 收藏

在DEPHI中如何将ScriptErrorsSuppressed的属性添加到TWebBrowser上 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220211421236.html
在DEPHI中如何将ScriptErrorsSuppressed的属性添加到TWebBrowser上  
  因为用TWebBrowser的控件遇到脚本错误的时候会跳出错误框,我想通过ScriptErrorsSuppressed的属性将提示框隐藏   谢谢

刚学的,silent=true   即可  
  我的问题是总出MSHTML.DLL异常

谢谢   搞定  
  顺便把答案粘贴到这里,我把分都给你  
  http://community.csdn.net/Expert/TopicView.asp?id=5239900  
  http://community.csdn.net/Expert/TopicView.asp?id=5239897

可以说说   MSHTML.DLL异常提示吗

posted @ 2009-01-04 16:51 delphi2007 阅读(211) | 评论 (0)编辑 收藏

image透明问题,操作系统不一样 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220205030237.html
form上image静态加载一个图片,图片上有个图标和几个文字,image的transparent属性设置为真,在windowsXP和windows2003下使用没问题(图片和文字都可以看见,背景也透明过去了),但是在windows2000professional上也可以透明背景,但是文字也看不见了,只能看见图片上的图标。现在我要求也可以看见文字!

图片上的文字也是图片的一部分,应该能看见,除非2000下窗口颜色和文字颜色接近。

posted @ 2009-01-04 16:51 delphi2007 阅读(162) | 评论 (0)编辑 收藏

delphi的字段名可以用字符串代替吗? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220172411239.html
比如字段名称为Edit1,  
  能不能  
  var  
        str:string  
   
  str:='edit1';  
   
  可以str.text吗?

java倒有,属于类加载器级别的  
  delphi也不是没有办法,但往往得不偿失

那就麻烦了~

可以使用另一种方法  
   
  (FindComponent('edit1')   as   TEdit).Text

thinks

posted @ 2009-01-04 16:51 delphi2007 阅读(157) | 评论 (0)编辑 收藏

timage组件判断是否有图片小问题,高手进,在线等..... VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220165852240.html
如题:  
      怎样判断image1里是否有片呀??  
      if   image1.picture.graphic=nil   then  
  还是  
      if   image1.picture.graphic.empty   then  
   
  这两个好像有冲突,因为我要在一个按钮里先清空图片  
   
  清空图片按钮事件:  
  procedure   TFrm_ckxs.Myspeedbutton3Click(Sender:   TObject);  
  begin  
      Image_zp.Picture.Graphic:=nil;  
  end;  
   
  然后在另一个按钮事件里判断image1是否有图片,判断事件如下:  
  无论是if   image1.picture.graphic=nil   then  
  还是  
  if   image1.picture.graphic.empty   then  
  好像都不对呀??请高手指点,在线等之  
 

有没有人呀

procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
   
      images.Picture.Graphic   :=   nil  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
      if   images.Picture.Graphic<>   nil   then  
          showmessage('接分');  
  end;  
   
  delphi7   下测试通过。

不对  
 

procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  if   image1.Picture.Graphic=nil   then  
    showmessage('mei   tu')  
    else  
    showmessage('you   tu   ');  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
  image1.Picture.Assign(nil);  
  end;

procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
  if   image1.Picture.Graphic=nil   then  
    showmessage('mei   tu')  
    else  
    showmessage('you   tu   ');  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  begin  
  image1.Picture.Graphic:=nil;  
  //image1.Picture.Assign(nil);  
   
  end;  
   
  而且这么做也是可以的,不知道你为什么不行

if   image1.picture.graphic=nil   then  
    OK!!

结了

谢谢大家

posted @ 2009-01-04 16:51 delphi2007 阅读(172) | 评论 (0)编辑 收藏

TIdFTP控件如何获取ftp上所以文件的时间 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220153610241.html
本人想根据ftp上文件的时间决定是否对文件进行下载,所以想获取ftp上文件的可比较时间

IdFTP.List   可以得到文件信息的列表,再解析出时间

如果是Indy9的TIdFTP,也可以用IdFTP.DirectoryListing.Items[i].ModifiedDate,不过很容易报“识别不了格式”的错误

我用过没有发现什么问题?IdFTP.List就可以得到相关文件的信息.

posted @ 2009-01-04 16:51 delphi2007 阅读(562) | 评论 (0)编辑 收藏

怎么同步树节点名称? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220153445242.html
我的树是数据库一次性加载的,但是我从其他地方修改了数据后,怎么同步树的节点属性?  
  就是怎么更改树节点的名称呢?  
   
  仿佛就是调用函数:TreeView1Edited(Sender:   TObject;   Node:   TTreeNode;  
      var   S:   string);     的问题

例如我在主窗口加载树Treeview1后,有一个节点为ss,我想在另一个窗口更改数据库内容,使对应的节点名称改为tt。  
  怎么同步显示呢?  
   
  请教!  
   
  马上给分!

如果另一个窗口是远端另一个客户端的话,哪么简单的办法只能是定时刷  
   
  如果另一个窗口也是本地的话   可以统一修数据更新接口  
   
  如用   ModifyXXX   函数来改数据  
   
  在这个函数里先改库再刷新UI  
   
  要自动做?   俺不知。。。。

uses  
      DBCtrls;  
   
   
  var    
      F:   TFieldDataLink;  
   
  //formcreate  
  begin  
      F   :=   TFieldDataLink.Create;  
      F.Control   :=   Self;  
      F.DataSource   :=   DataSource1;//连接数据库的DATASOURCE;  
      F.FieldName   :=   '要变化的字段';  
      F.OnDataChange   :=   DataChangeEvent;  
  end;  
   
  procedure   TForm1.DataChangeEvent(Sender:   TObject);  
  begin  
      ss.Text   :=   F.Field.AsString;  
  end;

//更改一下  
  procedure   TForm1.DataChangeEvent(Sender:   TObject);  
  begin  
      F.DataSet.Locate('字段'   '值',   []);   //数据库要先定位到当前树节点所对应的记录;  
      ss.Text   :=   F.Field.AsString;  
  end;  
 

做个记号~~~

数据改变后当然可以去找到这个节点把名称修改,但是为什么不这样做?就是写一个初始化treeview的过程,在过程中先清除treeview然后从数据库加载数据,在每次修改数据后调用这个初始化过程即可。我一直是这样做的,在一个项目中对于频繁使用或者比较繁琐的代码要尽量写成过程或者函数,这样使用和修改起来非常方便!!!

树的每一个接点有个属性pointer,你用这个Pointer属性记录和数接点名称对应的ID号+Node的组合码,然后每次更新时候利用这个组合码和ID直接查询到Node会很方便。

Node.Data   可以保存一个指针,可以在这里做点文章

posted @ 2009-01-04 16:51 delphi2007 阅读(148) | 评论 (0)编辑 收藏

請教:在ie中可以顯示的網頁,在webbrowser中確無法顯示,怎麼回事?在線等!給100分 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220152418243.html
有沒有高手幫忙解決啊,網頁是frame的,只能顯示一部份,有兩個顯示不出來,但是在ie中就可以全部顯示!

自己先頂

需要多个webbrower吧

。。。用WEBBROWSER很久了都没遇到过这种问题。

顯示不出來的那個網頁是整個網頁的一部分,就是frame的,我知道那個網頁的網址,直接在ie地址欄輸入網址,就提示這個網頁不支持打開這個網頁,然後就自動回到原來的業面了.但是用webbrowser就根本顯示不出來這個網頁,一直顯示loading   data......

不会啊,我刚好也在整这个东西,没有什么问题

我現在已經找到那個打不開的網頁的url了,然後我直接在ie地址欄中輸入這個網址,結果就是提示The   method   by   which   the   window   has   been   opened   is   not   supported   and   may   cause   unexpected   results.這不是系統提示的,應該是網頁本身就已經限制了,不知道這樣的話,在webbrowser中要怎麼辦呢?

會不會是因為delphi中提供的ie版本太低了,我用的是delphi6

posted @ 2009-01-04 16:51 delphi2007 阅读(268) | 评论 (0)编辑 收藏

dbcombobox可不可以实现这种功能,或是其它控件可以实现这个功能吗?在线等! VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220150549244.html
在dbcombobox中可不可以  
           
        显示值                   提交值  
            男                           1    
            女                           0  
   
  在选择时显示的是显示值,可是提交post时,提交的是int型的0或1;  
  其中dbcombobox只联接一个数据源!不用在listdatastore中联接其它数据源来对应提交值!  
   
  (注:只联接一个数据源!)

不行吧`~即使提交了`~哪你显示的时候呢?

用数据集字段的事件  
   
  procedure   TForm1.ADOQuery1SexGetText(Sender:   TField;   var   Text:   string;  
      DisplayText:   Boolean);  
  begin  
      case   Sender.AsInteger   of  
          0:   Text   :=   '女';  
          1:   Text   :=   '男';  
      end;  
  end;  
   
  procedure   TForm1.ADOQuery1SexSetText(Sender:   TField;   const   Text:   string);  
  begin  
      if   Text   =   '女'   then  
          Sender.Value   :=   0  
      else   if   Text   =   '男'   then  
          Sender.Value   :=   1;  
  end;

多谢了!老大啊,你答了我发的两个贴的同一个题!我的分也只好给你加一次了!

posted @ 2009-01-04 16:51 delphi2007 阅读(273) | 评论 (0)编辑 收藏

有没有一种控件可以实现如下功能???在线等! VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220150258245.html
在dbcombobox中可不可以  
           
        显示值                   提交值  
            男                           1    
            女                           0  
   
  在选择时显示的是显示值,可是提交post时,提交的是int型的0或1;  
  其中dbcombobox只联接一个数据源!不用在listdatastore中联接其它数据源来对应提交值!  
   
  (注:只联接一个数据源!)  
   
 

没有。只能用dblookupcombobox

用数据集字段的事件  
   
  procedure   TForm1.ADOQuery1SexGetText(Sender:   TField;   var   Text:   string;  
      DisplayText:   Boolean);  
  begin  
      case   Sender.AsInteger   of  
          0:   Text   :=   '女';  
          1:   Text   :=   '男';  
      end;  
  end;  
   
  procedure   TForm1.ADOQuery1SexSetText(Sender:   TField;   const   Text:   string);  
  begin  
      if   Text   =   '女'   then  
          Sender.Value   :=   0  
      else   if   Text   =   '男'   then  
          Sender.Value   :=   1;  
  end;  
 

 
  多谢了!老大啊,你答了我发的两个贴的同一个题!我的分也只好给你加一次了!在那个贴子中已经结了!

posted @ 2009-01-04 16:51 delphi2007 阅读(142) | 评论 (0)编辑 收藏

文件对话框编程 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220143507246.html
请问如何编写打开文件对话框,  
  在TOpenDialog.Execute()后,能自动打开一个FTP目录。  
  (我在执行对话框后,在文件名输入完整的FTP地址,点打开是可以的,  
  怎么才能做到在打开对话框后就能直接进入设定好的Ftp目录,而不需要手工输入)。

试试   InitDir   属性。。。

同上

posted @ 2009-01-04 16:51 delphi2007 阅读(114) | 评论 (0)编辑 收藏

每次在使用 StrToDate 或 DateToStr 我总是提心掉胆的 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220141719247.html
每次在使用   StrToDate   或   DateToStr   我总是提心掉胆的  
   
  因为   我的数据是在客户端用   DateToStr   转成   字符串发到服务器的  
   
  服务器再用   StrToDate   转成   TDate   的  
   
  现在没什么问题,   我怕万一客户端的日期格式与服务器不一下,   会转失败的.   如何办呢?  
   
  有没有统一的方法?  
  我知道可以用   FormatDateTime   来生成指定格式的string    
  但如果把这个字符串反变成   TDate   呢?   strtodate   也许是不行的

用   FormatDateTime   转换比较好的,比如FormatDateTime('yyyymmdd',Now());如果是Sql   Server,数据库会自己识别和转换传来的字符串,关系不大。

如果   客户端,服务端都是你做的话  
   
  在程序初始化时都    
   
      ShortDateFormat   :=   'yyyy-mmm....  
      LongDateFormat   :=     'yyyy-mmm....  
   
   
  给这两个全局量给个值,这样日期格式就不由系统设置变了  
   
   
   
 

FormatDateTime   统一标准   例如   2005-09-28   就可以了   楼上踢踏正解!

为什么要转成字符串呢,datetime本来就是浮点型的值,直接传不就行了。

传数值应该比穿字符快!

我必须要把它传成   String   .   系统需要

日期转double,double再转字符串!   用double传数据!  
  到服务器端,字符串转double,double再转日期!

在程序中将日期利用formatdatetime('yyyy-mm-dd',now())  
  这样保证格式能够一致  
  如果用datetostr有时会以字符串中有汉字(我就遇到过)  
  所以我觉得还是   formatdatetime较好

日期转double,double再转字符串!   用double传数据!  
   
  double   转   string   太长了

在程序中将日期利用formatdatetime('yyyy-mm-dd',now())  
  这样保证格式能够一致  
  如果用datetostr有时会以字符串中有汉字(我就遇到过)  
  所以我觉得还是   formatdatetime较好  
  ------------------------  
  关键是   用   formatdatetime('yyyy-mm-dd',now())  
  得到的   String   如何再转成   TDateTime

如果是Sql   Server数据库,传Double型数据不理想的,原因是Sql   Server和Delphi定义的时间起点是不一致的,相差了几天,大家可以自己看看  
  select   convert(datetime,0)       ----》   1900-01-01   00:00:00.000  
  DateTimePicker1.DateTime:=0     ----》   1899-12-30

那就用记录或者列表打包嘛...分别把年月日放到不同的字段里  
  如果是SOAP通信,那就更容易了,直接打成XML包

posted @ 2009-01-04 16:51 delphi2007 阅读(342) | 评论 (0)编辑 收藏

mxOutlookBarPro中,button是通过for语句动态生成的,如何取得当前单击button的标题呢? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220140320248.html
mxOutlookBarPro中,button是通过for语句动态生成的,如何取得当前单击button的标题呢?

动态生成的button如何他们响应他们onclick事件?

var  
      i:   Integer;  
      pButton:   TmxButton;  
   
              pButton:=pHeader.AddButton;  
              pButton.Caption   :=   Menus[i].sName;  
              pButton.Tag:=i;  
              pButton.OnClick:=   OnButtonClick;  
   
   
   
  procedure   TFMenus.OnButtonClick(Sender:   TObject);  
  var  
      pButton:   TmxButton;  
      pHeader:   TmxHeader;  
      iMenuIndex:   Integer;  
  begin  
      pButton:=TmxButton(Sender);  
      ShowMessage(pButton.Caption);  
  end;  
 

posted @ 2009-01-04 16:51 delphi2007 阅读(221) | 评论 (0)编辑 收藏

调整界面控件大小问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061220122036249.html
在form上放好控件,程序运行之后,当改变窗口大小,则有的控件就看不见了,如何解决?

想自动调节控件大,这是很麻烦的,是否有这个必要呢  
  因为控件都是画上去的,很费资源的

不是自动调节,我在设计期用最大窗口,可人家用我的程序,肯定会让窗口变化啊,不能挡住我的控件啊,郁闷死了我,

Form的   BorderStyle   属性设置为bsSingle   他就不能改变你的窗口大小了。

用最普遍的分辨率设计,用Anchors控制控件的位置点  
  如果小于这个设计时大小,看不到那就是客户的事情了

最好的方法是在设计的时候不用最大的窗口,让用户只能放大不能变小

把那个什么alclient属性设置成true不就行了.

设计时要考虑的问题啊,一般按800*600设计  
   
  要是用户不最大化   这是用户问题,他看不到组件自然会最大化  
   
  或你用代码使其最小窗口有足够大就行了  
   
  要不就自已辊滚动条啦,用户显示空间不够就滚   不过这样凑合着用,不美观

posted @ 2009-01-04 16:51 delphi2007 阅读(335) | 评论 (0)编辑 收藏

图片翻转时,一变成二,怎么先擦除掉之前那个图 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061026103637202.html
如题,我要把图片翻转,但是翻过来后原先的图还在,变成了原图跟新图叠在一起了,代码如下  
   
   
      for   i:=   0   to   Image1.width   do  
      begin  
          with   rect1   do  
          begin  
              left:=i;  
              top:=0;  
              right:=i+1;  
              bottom:=Image1.height;  
          end;  
          with   rect2   do  
          begin  
              left:=(Image1.width)-i-1;  
              top:=0;  
              right:=(Image1.width)-i;  
              bottom:=Image1.height;  
          end;  
          Image1.canvas.copyrect(rect2,Image1.canvas,rect1);  
      end;

这个问题应该不是太难吧~~~   再顶顶

procedure   Tform1.bmp_rotate(Srcbmp,   DestBmp:   Tbitmap;   angle:   extended);  
  var  
      c1x,   c1y,   c2x,   c2y:   integer;  
      p1x,   p1y,   p2x,   p2y:   integer;  
      radius,   n:   integer;  
      alpha:   extended;  
      c0,   c1,   c2,   c3:   tcolor;  
  begin  
      if   SrcBmp.Width   >   SrcBmp.Height   then  
      begin  
          DestBmp.width   :=   SrcBmp.Width;  
          DestBmp.height   :=   SrcBmp.Width;  
      end  
      else  
          DestBmp.Width   :=   SrcBmp.Height;  
      DestBmp.Height   :=   SrcBmp.Height;  
      //将角度转换为PI值  
      angle   :=   (angle   /   180)   *   pi;  
      //   计算中心点,你可以修改它  
      c1x   :=   SrcBmp.width   div   2;  
      c1y   :=   SrcBmp.height   div   2;  
      c2x   :=   DestBmp.width   div   2;  
      c2y   :=   DestBmp.height   div   2;  
      //   步骤数值number  
      if   c2x   <   c2y   then  
          n   :=   c2y  
      else  
          n   :=   c2x;  
      dec(n,   1);  
      //   开始旋转  
      for   p2x   :=   0   to   n   do  
      begin  
          for   p2y   :=   0   to   n   do  
          begin  
              if   p2x   =   0   then  
                  alpha   :=   pi   /   2  
              else  
                  alpha   :=   arctan2(p2y,   p2x);  
              radius   :=   round(sqrt((p2x   *   p2x)   +   (p2y   *   p2y)));  
              p1x   :=   round(radius   *   cos(angle   +   alpha));  
              p1y   :=   round(radius   *   sin(angle   +   alpha));  
   
              c0   :=   SrcBmp.canvas.pixels[c1x   +   p1x,   c1y   +   p1y];  
              c1   :=   SrcBmp.canvas.pixels[c1x   -   p1x,   c1y   -   p1y];  
              c2   :=   SrcBmp.canvas.pixels[c1x   +   p1y,   c1y   -   p1x];  
              c3   :=   SrcBmp.canvas.pixels[c1x   -   p1y,   c1y   +   p1x];  
   
              DestBmp.Canvas.pixels[c2x   +   p2x,   c2y   +   p2y]   :=   c0;  
              DestBmp.canvas.pixels[c2x   -   p2x,   c2y   -   p2y]   :=   c1;  
              DestBmp.canvas.pixels[c2x   +   p2y,   c2y   -   p2x]   :=   c2;  
              DestBmp.canvas.pixels[c2x   -   p2y,   c2y   +   p2x]   :=   c3;  
          end;  
          application.processmessages  
      end;  
  end;  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      newbmp:   TBitmap;  
      Bitmap:   TBitmap;  
      angle:   integer;  
  begin  
      Bitmap   :=   TBitmap.Create;  
  newbmp:=   TBitmap.Create;  
      screen.Cursor   :=   crhourglass;  
      newbmp.Assign(image1.Picture.Bitmap);  
   
      angle   :=   strtoint(inputbox('旋转位图',   '请输入旋转角度',   '90'));  
      Bmp_Rotate(newbmp,   bitmap,   angle);  
      image1.picture.Bitmap.Assign(bitmap);  
      image1.Left   :=   (self.Width   div   2)   -   (bitmap.Width   div   2);  
      image1.Top   :=   (self.Height   div   2)   -   (bitmap.Height   div   2);  
      screen.Cursor   :=   crdefault;  
      newbmp.Free;  
      Bitmap.Free;  
  end;  
 

posted @ 2008-12-19 10:02 delphi2007 阅读(168) | 评论 (0)编辑 收藏

多线程后台语音播放系统,支持多声卡的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061025154318203.html
目前我程序使用MMTOOLS开发,但是当语音播放比较频繁的时候创建和播放的时候都会出错导致线程异常终止,而且应用程序在无任何提示的情况下自动关闭(幸好我在播放处写了日志才知道是CREATE和PLAY的时候报错的)。由于MMTOOLS还需要破解使用,后来我改为API播放,单个线程播放语音正常,但是每播放一个声音后在THREADS的堆栈中总会多一个线程其状态为STOP,这样频繁播放也会导致程序异常。  
  这些线程都是通过waveoutwrite,waveOutOpen函数调用后自动生成的,请问如何捕获THREADID以便结束,或者其他办法让线程释放后台播放的资源。

waveOutClose

posted @ 2008-12-19 10:02 delphi2007 阅读(298) | 评论 (0)编辑 收藏

Delphi模拟键盘动作的问题,麻烦大家帮助,谢谢,!~有点急用 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061025132423204.html
我想为一个游戏做一个辅助工具,只要根据事件响应做出相应的键盘鼠标动作就行了!~  
  但是不知道为什么,??  
   
  键盘鼠标的动作都可以模拟出来了,但只有模拟鼠标能在游戏界面里的动作可以实现需要的动作,模拟键盘却不行,然而当窗口焦点切出来,发现模拟动作已经正常运行!~  
  就是模拟在键盘动作在游戏里没有反应,!~  
  麻烦哪位大侠帮帮忙,非常感激!~  
   
  PS:我开始做这个程序时用一个死循环来判断响应条件,  
  while   i   <   100   do  
      begin  
          if   <条件>   then  
              <模拟键盘鼠标>  
   end;  
  这个时候,键盘鼠标在游戏里的模拟正常,就是反应有点慢  
   
  后来改成用Timer控件来做,  
  procedure   TMainForm.TimerNGTimer(Sender:   TObject);  
   
  begin  
          if   <条件>   then  
          begin  
     <模拟键盘鼠标>  
            end;  
          end;  
  end;  
  判断响应条件和模拟动作都正常,  
  可是在游戏里就只有鼠标的动作正常,键盘动作在游戏里没有反应

wg真多

外挂是多啊,可是别人做的外挂总是不放心,自己做的还可以根据自己的要求去改变其中的功能,我是一个比较懒的人,所以总想找一个最佳的偷懒方式,呵呵!  
  理论上可以实现的东西,不知道为什么实践中居然会无效,想不通啊,不知道问题出在哪里?  
  有人知道麻烦说一下,非常感谢!~

用线程

我有同样的想法,不过没有太多时间编程

posted @ 2008-12-19 10:02 delphi2007 阅读(258) | 评论 (0)编辑 收藏

如何准确比较并识别2张图像的区别 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061025081046205.html
2个图片,一个图像A,一个图像B,他们的大小一样,如何比较他们的不同并能准确的知道不同的地方?请高手指点

最好详细点的,能有代码最好

你的不同指的什么。。  
  在一定条件下   可以提取特征。

不同就是图像有不同的地方,比如就象找茬游戏的那种不同

像素扫描?

要准确,就一个象素一个象素的比!呵呵!

除非是同一张图片修改,否则即使同样场景,在间隔很短的时刻拍的照片,光照也是不同的,像素比较不可行。  
  还是不同图像不同对待吧。有一些可以做边缘检测然后分割识别。

posted @ 2008-12-19 10:02 delphi2007 阅读(407) | 评论 (0)编辑 收藏

求最快的截屏函数!最好是 50ms 之内! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061024164940207.html
用   GetDC   的方法截屏大概耗时   180ms   左右。这对于远程控制来说显然是太慢了,  
  有没有更快的截屏方法。  
  听说设置系统重画钩子可以只截取屏幕变化的部分,从而可以提高速度。  
  这种使用钩子的方法,怎么作呢?  
  有另外的办法也行,只要够快就行!

procedure   TForm1.Cjt_GetScreen(var   Mybmp:   TBitmap;   DrawCur:   Boolean);  
  var  
  Cursorx,   Cursory:   integer;  
  dc:   hdc;  
  Mycan:   Tcanvas;  
  R:   TRect;  
  DrawPos:   TPoint;  
  MyCursor:   TIcon;  
  hld:   hwnd;  
  Threadld:   dword;  
  mp:   tpoint;  
  pIconInfo:   TIconInfo;  
  begin  
  Mybmp   :=   Tbitmap.Create;   {建立BMPMAP   }  
  Mycan   :=   TCanvas.Create;   {屏幕截取}  
  dc   :=   GetWindowDC(0);  
  try  
  Mycan.Handle   :=   dc;  
  R   :=   Rect(0,   0,   screen.Width,   screen.Height);  
  Mybmp.Width   :=   R.Right;  
  Mybmp.Height   :=   R.Bottom;  
  Mybmp.Canvas.CopyRect(R,   Mycan,   R);  
  finally  
  releaseDC(0,   DC);  
  end;  
  Mycan.Handle   :=   0;  
  Mycan.Free;  
  if   DrawCur   then   {画上鼠标图象}  
  begin  
  GetCursorPos(DrawPos);  
  MyCursor   :=   TIcon.Create;  
  getcursorpos(mp);  
  hld   :=   WindowFromPoint(mp);  
  Threadld   :=   GetWindowThreadProcessId(hld,   nil);  
  AttachThreadInput(GetCurrentThreadId,   Threadld,   True);  
  MyCursor.Handle   :=   Getcursor();  
  AttachThreadInput(GetCurrentThreadId,   threadld,   False);  
  GetIconInfo(Mycursor.Handle,   pIconInfo);  
  cursorx   :=   DrawPos.x   -   round(pIconInfo.xHotspot);  
  cursory   :=   DrawPos.y   -   round(pIconInfo.yHotspot);  
  Mybmp.Canvas.Draw(cursorx,   cursory,   MyCursor);   {画上鼠标}  
  DeleteObject(pIconInfo.hbmColor);{GetIconInfo   使用时创建了两个bitmap对象.   需要手工释放这两个对象}  
  DeleteObject(pIconInfo.hbmMask);{否则,调用他后,他会创建一个bitmap,多次调用会产生多个,直至资源耗尽}  
  Mycursor.ReleaseHandle;   {释放数组内存}  
  MyCursor.Free;   {释放鼠标指针}  
  end;  
  end;

这个函数应该不错

这个函数就是用的   GetDC   ,在线程中执行,在我的电脑上还是用了   172ms

能发送一个printscreen键消息吗?  
  相当于按一下printscreen那个拷屏键,  
  然后用使用剪贴板的数据就可以了

blog.joycode.com/jiangsheng/posts/10410.aspx

to   jiangsheng(蒋晟.Net[MVP])   :  
  你在文章中提到用系统钩子拦截重画消息,VNC   的源代码我看不懂,用   Delphi   如何拦截,拦截后如何截屏变化的部分?  
   
  另外听说用   DirectX   可以直接访问显存,但是用   DirecxX   如何截屏呢?  
  用   DelphiX(封装   DirecxX   的   Delphi   组件)   如何截屏呢?

up

mark

Benchmarks   shows   that   DirecxX   is   much   slower   then   GDI  
  I   don't   know   Delphi.   If   you   don't   know   C++   you   can   rewrite   all   Windows   API   calls   in   Delphi.

如果楼主愿意给分的话,我可以帮你编写一个速度超快的载图函数,而且带压缩功能。  
   
  如果想从剪切板读出图片数据,保存为一张BMP文件,也非常简单:  
   
  先发送一个PrintScreen键,再通过Image控件的SaveToFile()方法保存即可!

VNC没有完全的Delphi   Source,但是却有Delphi的组件,只是核心层仍然是使用的C++的DLL.

另外楼主最好搞清楚,你说的那个50ms是针对你的机器配置来说的,也许在别人机器上能达到50ms以内,但是放到你的机器上就不是那么回事了.  
  一个程序员,自己提出来的需求都如此,那么如果是你的客户提出类似的需求你会如何?

想快,估计只能用驱动层面上的

to   mwy654321(无条件为你):  
  你要多少分,我再开个帖子,你把代码给我!

学习中,关注~~~~~

//mwy654321的方法如下:  
  uses   Clipbrd;  
   
  procedure   TForm1.Timer1Timer(Sender:   TObject);  
  begin  
      keybd_event(VK_SNAPSHOT,   0,   0,   0);  
      keybd_event(VK_SNAPSHOT,   0,   KEYEVENTF_KEYUP,   0);  
      if   not   ClipBoard.HasFormat(CF_BITMAP)   then   Exit;  
      Image1.Picture.Bitmap.LoadFromClipboardFormat(CF_BITMAP,  
          ClipBoard.GetAsHandle(CF_BITMAP),   0);  
  end;  
 

首先,   此种应用不必设置系统钩子,   那种方法只会更慢  
  其次,   不要使用CopyRect,   因为CopyRect调用的StretchBlt,   直接使用BitBlt更快  
  对于BitBlt,

首先,   此种应用不必设置系统钩子,   那种方法只会更慢  
  其次,   不要使用CopyRect,   因为CopyRect调用的StretchBlt,   直接使用BitBlt更快  
  对于BitBlt,   我的笔记本电脑测试结果为   1024   x   768   只需要   3   ms  
  如果楼主的机器需要的时间超过50ms,那只能说明楼主的机器的显卡太烂,   应当立马更换  
  BitBlt的性能一般与CPU性能无关,   主要与显卡性能相关  
  示例如下:  
  注意,   对于性能测试,   我的例子中  
          Caption   :=   Caption   +   'OK';  
  这句看似废话,   其实必不可少;   因为   BitBlt会立即返回,   其交给显卡上的GPU完成相关操作  
  这句Caption   :=   Caption   +   'OK';是确保所有BitBlt   GPU操作完成,   否则,   如果没有此句,  
  时间之差接近于0  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      oldTick,   NewTick:   DWord;  
      aBit:   TBitmap;  
      i:   Integer;  
      dc:   HDC;  
  begin  
      aBit   :=   TBitmap.Create;  
      try  
          aBit.Width   :=   Screen.Width;  
          aBit.Height   :=   Screen.Height;  
          OldTick   :=   GetTickCount;  
          for   i   :=   0   to   999   do  
          begin  
              dc   :=   GetDc(HWND_DESKTOP);  
              Win32Check(bitblt(aBit.Canvas.Handle,   i   mod   10,   i   mod   10,   aBit.Width,   aBit.Height,   dc,   0,   0,   SRCCOPY));  
              ReleaseDC(HWND_DESKTOP,   dc);  
          end;  
          Caption   :=   Caption   +   'OK';  
          NewTick   :=   GetTickCount;  
      finally  
          aBit.Free;  
      end;  
      Beep();  
      ShowMessage(Format('%u   -   %u   =   %d',   [NewTick,   OldTick,   NewTick   -   OldTick]));  
  end;  
   
   
 

请教楼上的,为什么要弄个循环在这里?一次bitblt不就ok了吗  
          for   i   :=   0   to   999   do  
          begin  
              dc   :=   GetDc(HWND_DESKTOP);  
              Win32Check(bitblt(aBit.Canvas.Handle,   i   mod   10,   i   mod   10,   aBit.Width,   aBit.Height,   dc,   0,   0,   SRCCOPY));  
              ReleaseDC(HWND_DESKTOP,   dc);  
          end;

回楼上:   我弄一个循环是为了测试bitblt的性能  
  因为   GetTickCount的精度只有10ms,   而一次bitblt会小于10ms  
  这样,   可以使用   总时间/次数   计算每次的时间消耗

对于楼上许多人提供的Print   Screen加Paste   From   Clipboard的方法,   我只能说这种方法太弱  
   
  其一性能很差  
  其二破坏了Clipboard   (此乃大忌)  
   
  但别对于楼主这种应用来说,   远程控制被控制的机器的Clipboard就不能用了  
 

to   spirit_sheng(老盛)   :  
  我用你的方法在我的机器上测试,怎么于其它方法相差无几,耗时还是   170~180   ms。  
  另外你说设置系统钩子会更慢,为什么?我听说   Radmin   就是用的这种办法!  
  这是我把你的代码稍加修改后的代码,没什么问题吧?  
  procedure   BitBlt_CapScreen(AStream:   TMemoryStream;   Left,   Top,   Width,   Height:   Integer);  
  var  
      aBit:   TBitmap;  
      dc:   HDC;  
  begin  
      aBit   :=   TBitmap.Create;  
      try  
          aBit.Width   :=   Screen.Width;  
          aBit.Height   :=   Screen.Height;  
          dc   :=   GetDc(HWND_DESKTOP);  
          Win32Check(BitBlt(aBit.Canvas.Handle,   0,   0,   aBit.Width,   aBit.Height,   dc,   0,   0,   SRCCOPY));  
          ReleaseDC(HWND_DESKTOP,   dc);  
  //         Caption   :=   Caption   +   'OK';  
          aBit.SaveToStream(AStream);  
      finally  
          aBit.Free;  
      end;  
  end;  
  我去掉   Caption   :=   Caption   +   'OK';   也很正常啊!

楼主把你的机器环境帖出来的吧  
  我的是   Dell   Latitude   D600  
  CPU   Intel(R)   Pentium(R)   M   Processor   725   (1.6   GHz)    
  显卡   ATI   Mobility   RADEONTM   9000   图形卡,带有   32MB   DDR   内存  
  操作系统   Windows   XP   Profressional   SP2   (简体中文)  
  在我的机器上1024x768只要3ms,   你说要170~180   ms,   相差也太大了  
 

TO:   楼主,   我那   Caption   :=   Caption   +   'OK';   主要是基于计时考虑的  
  因为   BitBlt   是立即返回的

我的机器是集成显卡。听说集成显卡已经没有显存了,所用内存是在主内存中叩!  
  我的机器是   CPU   2.6   GHz,   内存是   512   MB,   操作系统是   Windows2000   Server

请教下spirit_sheng(老盛)  
  我用你的代码,  
  明明很快就听见    
  Beep();  
  但showmessage却等了几秒才跳出来,这是为啥  
      ShowMessage(Format('%u   -   %u   =   %d',   [NewTick,   OldTick,   NewTick   -   OldTick]));

To:   楼上  
  这也就是我帖子里的说的,   你加上那句Caption   :=   Caption   +   'OK';   后,   Beep   就不会很快了出现了  
  bitblt   函数会很快返回,   其具体会交由显卡完成  
  ShowMessage   操作也要请求显卡完成,   所以,   其会等待GPU可用才能继续执行  
   
 

TO:   楼主,   你的集成显卡太差了,   更换显卡是王道

不能叫客户也去换把       :)

用循环测试Bitblt的方法有问题,GetDC可能耗费的时间更多。  
 

楼主,你可以看看这个http://www.delphibox.com/article.asp?articleid=3710远程屏幕传输   差异截图

posted @ 2008-12-19 10:02 delphi2007 阅读(833) | 评论 (0)编辑 收藏

看看这个图片转换函数,为什么bmp转jpg时正常,jpg转jpg时,转成的图片Delphi自己不认识. Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061024164425208.html
Function   PictureResiz(aFilename{原图},dFileName{转换后的图片}:   String):   String;  
  var  
      Image:   TPicture;  
      bmp,   tmpbmp:   TBitmap;  
      aDesiredFileName:   String;  
  begin  
      Image     :=   TPicture.Create;  
      bmp         :=   TBitmap.Create;  
      tmpbmp   :=   TBitmap.Create;  
      try  
          Image.LoadFromFile(aFilename);  
          bmp.Assign(Image.Graphic);  
          tmpbmp.Width   :=   liWidth;         //指定图片宽度  
          tmpbmp.Height   :=   liHeight;     //指定图片高度  
          SetStretchBltMode(tmpbmp.Canvas.Handle,   STRETCH_DELETESCANS);   //平滑处理  
          StretchBlt(tmpbmp.Canvas.Handle,   0,   0,   tmpbmp.Width,   tmpbmp.Height,  
              bmp.Canvas.Handle,   0,   0,   bmp.Width,   bmp.Height,   SRCCOPY);  
          Image.Graphic.Assign(tmpbmp);  
          aDesiredFileName:=dFileName;  
          if   FileExists(aDesiredFileName)   then   DeleteFile(aDesiredFileName);  
   
          Image.SaveToFile(aDesiredFileName);  
          Result   :=   aDesiredFileName;  
      finally  
          bmp.Free;  
          tmpbmp.Free;  
          Image.Free;  
      end;      
  end;

先判断文件是bmp还是jpg的  
  然后再分别处理  
  uses    
        jpeg;  
   
  //--------------------  
  var  
      MyJpeg:   TJpegImage;  
      MyBitmap   :   TBitmap   ;  
  begin  
      MyBitmap   :=   TBitmap.Create();  
      MyJpeg:=   TJpegImage.Create();  
      MyBitmap.LoadFromFile('c:\windows\desktop\aa.BMP');     //   Load   the   Bitmap   from   a   file  
      MyJpeg.Assign(MyBitmap);     //   Assign   the   BitMap   to   MyJpeg   object  
      //     MyJpeg.Canvas.StretchDraw(TRect(0,0,   nImageWidth,   nImageHeight),   MyBitmap);  
      MyJpeg.CompressionQuality:=StrToInt('75');  
      MyJpeg.Compress;  
      MyJpeg.SaveToFile('c:\windows\desktop\test.JPG');   //   Save   the   JPEG   to   Disk  
  end;

jpg转bmp反过来写就可以了

转换的时候图片大小也要改变,   happyggy(TObject说:我是上帝~~~),你的代码不能设置图片大小吧.   比如:500*500的jpg或bmp图片,要变成100*100的jpg图片.

再加一个变量  
  //==========================  
  var  
      MyJpeg:   TJPEGImage;  
      MyBitmap:   TBitmap;  
      desbitmap:   TBitmap;  
  begin  
      myjpeg   :=   TJPEGImage.Create;  
      MyBitmap   :=   TBitmap.Create;  
      desbitmap   :=   TBitmap.Create;  
      MyJpeg.LoadFromFile('c:\123.jpg');  
      MyBitmap.Assign(MyJpeg);  
      desbitmap.Height   :=   100;  
      desbitmap.Width   :=   100;  
      desbitmap.Canvas.CopyRect(desbitmap.Canvas.ClipRect,   MyBitmap.Canvas,                               MyBitmap.Canvas.ClipRect);  
      Image1.Picture.Bitmap   :=   desbitmap;  
      MyBitmap.Free;  
      MyJpeg.Free;  
      desbitmap.Free;  
  end;

有问题加群32179979或26929954

posted @ 2008-12-19 10:02 delphi2007 阅读(409) | 评论 (0)编辑 收藏

怎样存储大尺寸图标?? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061024113333209.html
我想存储图片为图标,但是在存储为256x256或更大尺寸图标时遇到困难,如下所列,宽和高不得超过255。   如果把BYTE类型更改为LONG,INTEGER类型时,却存储时会发生错误!   因该怎样做才能存储大于255的图标吗?  
   
  完整教程:http://dev.yesky.com/449/2463449.shtml  
   
  bWidth:BYTE;//   图标图片的显示宽度,以像素为单位,最大值为255   ($10=16D)  
  bHeight:BYTE;//   图标图片的显示高度,以像素为单位,最大值为255   ($10=16D)
posted @ 2008-12-19 10:02 delphi2007 阅读(226) | 评论 (0)编辑 收藏

求一个识别验证码的程序(顶者有分) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061019103808225.html
急求能识别出  
  http://www.harbin.gov.cn/hrbzfw/poll_sdmp/images/vimage.php?show=true  
  验证码的程序,分不够可以再加

试下这个:  
  http://www.2ccc.com/article.asp?articleid=3084

回楼上,这个我看过了,不太好使,谢谢

上面的图还比较清晰。。  
  不是很难

这个easy类型.报价500..有网站专门做这个.  
  找我也行

up

这比较简单,每数字的像素又没变,抓十个图,然后比较就成  
  下午有空给你写一个

UP

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ExtCtrls,   ImgList,   StdCtrls,   IdBaseComponent,   IdComponent,  
      IdTCPConnection,   IdTCPClient,   IdHTTP;  
   
  type  
      TForm1   =   class(TForm)  
          ImageList1:   TImageList;  
          Image1:   TImage;  
          IdHTTP1:   TIdHTTP;  
          Button1:   TButton;  
          Edit1:   TEdit;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  uses   pngimage,   Math;  
   
  function   SameCanvas(mCanvasA,   mCanvasB:   TCanvas):   Boolean;   {   比较两个画布是否相同   }  
  var  
      I,   J:   Integer;  
  begin  
      Result   :=   False;  
      if   not   Assigned(mCanvasA)   then   Exit;  
      if   not   Assigned(mCanvasB)   then   Exit;  
      for   I   :=   Min(mCanvasA.ClipRect.Left,   mCanvasB.ClipRect.Left)   to  
          Min(mCanvasA.ClipRect.Right,   mCanvasB.ClipRect.Right)   do  
          for   J   :=   Min(mCanvasA.ClipRect.Top,   mCanvasB.ClipRect.Top)   to  
              Min(mCanvasA.ClipRect.Bottom,   mCanvasB.ClipRect.Bottom)   do  
          begin  
              if   mCanvasA.Pixels[I,   J]   <>   clBlack   then   mCanvasA.Pixels[I,   J]   :=   clWhite;  
              if   mCanvasB.Pixels[I,   J]   <>   clBlack   then   mCanvasB.Pixels[I,   J]   :=   clWhite;  
              if   mCanvasA.Pixels[I,   J]   <>   mCanvasB.Pixels[I,   J]   then   Exit;  
          end;  
      Result   :=   True;  
  end;   {   SameCanvas   }  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  const  
      cPoints:   array[0..3]   of   TPoint   =   (  
  (X:   -5;   Y:   -9),  
  (X:   -26;   Y:   -9),  
  (X:   -47;   Y:   -9),  
  (X:   -68;   Y:   -9)  
      );  
  var  
      vMemoryStream:   TMemoryStream;  
      vBitmap:   TBitmap;  
      vNumber:   TBitmap;  
      vPngObject:   TPngObject;  
      I,   J:   Integer;  
      S:   string;  
  begin  
      vMemoryStream   :=   TMemoryStream.Create;  
      vPngObject   :=   TPngObject.Create;  
      vBitmap   :=   TBitmap.Create;  
      vNumber   :=   TBitmap.Create;  
      try  
          IdHTTP1.Get(  
              'http://www.harbin.gov.cn/hrbzfw/poll_sdmp/images/vimage.php?show=true',  
              vMemoryStream);  
          vMemoryStream.Position   :=   0;  
          vPngObject.LoadFromStream(vMemoryStream);  
          Image1.Picture.Graphic   :=   vPngObject;  
          vBitmap.Width   :=   8;  
          vBitmap.Height   :=   10;  
   
          S   :=   '';  
          for   J   :=   0   to   3   do  
          begin  
              vBitmap.Canvas.FillRect(vBitmap.Canvas.ClipRect);  
              vBitmap.Canvas.Draw(cPoints[J].X,   cPoints[J].Y,   vPngObject);  
              for   I   :=   0   to   9   do  
              begin  
                  vNumber.Canvas.FillRect(vNumber.Canvas.ClipRect);  
                  ImageList1.GetBitmap(I,   vNumber);  
                  if   SameCanvas(vBitmap.Canvas,   vNumber.Canvas)   then  
                  begin  
                      S   :=   S   +   IntToStr(I);  
                      Break;  
                  end;  
              end;  
          end;  
      finally  
          vPngObject.Free;  
          vMemoryStream.Free;  
          vBitmap.Free;  
          vNumber.Free;  
      end;  
      Edit1.Text   :=   S;  
  end;  
   
  end.  
 

object   ImageList1:   TImageList  
      Height   =   10  
      Width   =   8  
      Left   =   64  
      Top   =   8  
      Bitmap   =   {  
          494C01010A000E00040008000A00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600  
          0000000000003600000028000000200000002800000001002000000000000014  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
 

0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          0000000000000000000000000000000000000000000000000000000000000000  
          000000000000000000000000000000000000424D3E000000000000003E000000  
          2800000020000000280000000100010000000000A00000000000000000000000  
          000000000000000000000000FFFFFF0000000000000000000000000000000000  
          000000000000000000000000000000000000000000000000C3C3000099990000  
          3CBC00003CFC000099C40000C3980000993C00003C3C000099990000C3C30000  
          F9C3C33FF999993FF93C3C9F00FC3CCF39FC19E7991923F3C9233FF9E13F3DFC  
          F13F99FCF901C300E7810083C3E79F3999E7CFFC3CE7E7FC3CE7F3F93CE7F9E3  
          3CE7FCF999873CFCC3C79939E7E7C38300000000000000000000000000000000  
          000000000000}  
  end  
 

谢谢   zswang(伴水清清)(专家门诊清洁工)

lovebanyi(风云)   有点不地道

mark

并不是每个东西都是免费的!  
   
  ------------------------------------------------------- 本回复由大傻的破玩意儿【CSDN's   forum   Explorer】完成! 大傻的破玩意儿,今天你用了木有   !! 软件功能强大,速度超快!!支持中... 软件下载地址:http://CoolSlob.ys168.com

200RMB给你做个DLL直接用就可以了

QQ:17092674

给你做了一个演示www.allforyou.cn/demo.rar

posted @ 2008-12-19 10:01 delphi2007 阅读(196) | 评论 (0)编辑 收藏

高手来~关于画图的效率问题(500FPS) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061018141036227.html
Timer_GetWave.Enabled:=false;  
                  timestart:=now();  
                  self.GroupBox_Draw.DoubleBuffered:=true;  
                  for   i:=0   to   500   do  
                  begin  
                                  getdata();  
                                  drawdata();  
                        //           PB.Canvas.Draw(0,0,_DrawMap);  
                  end;  
                  timeend:=now();  
                  self.LabelFPS.Caption:=inttostr(milliSecondsBetween(timestart,timeend));  
   
  -------------------------------------------------------------------------  
   
  用了双缓冲,以上代码的执行结果是1100毫秒.  
   
  如果我把PB.Canvas.Draw(0,0,_DrawMap);加上去,执行结果要9900毫秒,效率差了十倍.  
   
  请问有什么方法可以加上这句后效率不变化那么大~?  
   
  给个思路也好~~

对于占用大量计算时间的画图操作不能使用直接在PictureBox上画图的办法的,这样效率很低的,好久不做这方面的程序了,具体方法我说不清楚,你自己查,给你个思路。  
  第一步,计算需要的画图数据  
  第二步,在内存页(一般是bitmap对象)画出图形(这两步花费比较长的时间)  
  第三步,直接用显示组件(例如PictureBox)把画好的内存页直接调入,显示出来。  
  根据需要使用内存页的数量。  
  如果图形的计算与绘制本身就是要花很多时间,这个画图程序是没有办法降低画图时间的,但是使用上边的方法,可以消除绘画的过程(至少用户看不到),不会产生图形的闪烁。而且内存页的绘制时间本身也要比直接绘制显示还是要快。

好像要用到bitblt函数,如果组件不提供类似方法,就要用Windows   API了。

我就是用TBitmap在内存画的啊~~然后发觉贴出来的时候,  
    PB.Canvas.Draw(0,0,_DrawMap);  
  特别耗时间~~~  
   
  不执行   PB.Canvas.Draw(0,0,_DrawMap);的话比执行快很多~

_DrawMap就是个Tbitmap

显示本来就耗时间啊,需要从内存到显存复制,就是直接用BitBlt也快不了多少。  
  如果不需要动画效果,全部画完之后再更新显示就可以了,否则单独用一个线程(定时器也可以)来更新,每秒更新个15-30次就够了,完全不需要象你现在这样每秒50几帧。  
 

问题是公司需要.....  
   
   
  因为从波形采样频率很高....要是帧数低了就有可能错过某些采集来的重要信息.....  
 

你不是都保存了吗?不显示也不会丢失吧。  
 

不怕丢失,但得实时显示....

30FPS就是实时显示了。  
  你非要50FPS以上,没啥意义。  
 

for   i:=0   to   500   do  
                  begin  
                                  getdata();  
                                  drawdata();  
                        //           PB.Canvas.Draw(0,0,_DrawMap);  
                  end;  
  要求太高了,什么软件,如果真的是要求高效的制图,请使用DirectX,不要用原始方法。

DirectX~~~用不用装多什么开发工具~~~  
   
  没用过~~~~  
   
  能给个小例子看看吗~~?

要装DirectX开发包,例子我现在拿不出来,入门肯定也不容易,这个一般只有做3D游戏才需要,首先你弄清楚你的需求,不要乱来。

不知道你的具体需求,我只是讨论一下:  
  1)如果你采样的数据是历史增量数据,只需要在上面更新新的数据,而不需要整幅图重画吧。也就是你的DRAWDATA应该直接向PB的CANVAS上画,我想,如果新数据量应该不会很大吧。  
  2)如果新数据真的很大,就只能是使用DIRECTX了。  
  3)如果如你的程序给出的思路,那么也可以在显示的时候将一组合并成一帧来画吧。

opengl   可以看   nehe   入门例子做简单   还是可以的  
  另外teechart控件包有   封装   opengl   chart

netfly(支点)说得对,可以考虑只重画变化了的部分,不用全部重画。

只是简单绘制2D图,用什么速度都差不多。并不是你用DirectX(准确地讲是用DirectX中的DirectDraw)或者OpenGL就能快多少。  
  如果你是显示一个连续变化的波形(因为你有Timer_GetWave这种命名),那么可以使用ScrollDC把前一幅图卷动一下(左到右或者右到左之类的),然后画上更新的部分就可以了。  
 

谢谢各位!  
   
  现在问题解决了!说出来笑死人,郁闷了我好多天.....原来是给我用的那个笔记本电脑没显卡驱动  
  ......  
   
  我写的东西是用在工业超声探伤上的波形显示.  
   
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
                  c1,t1,t2:int64;  
                  t3:double;  
  begin  
                  self.Button1.Enabled:=false;  
                  QueryPerformanceFrequency(c1);  
                  DrawCount:=0;  
                  self.Button1.Enabled:=false;  
                  QueryPerformanceCounter(t1);  
                  while   true   do  
                  begin  
                                  GetPoints;  
                                  Draw;  
                                  DrawCount:=DrawCount+1;  
                                  Form1.Edit1.Text:=IntToStr(DrawCount);  
                                  Application.ProcessMessages;  
                                  if   DrawCount=500   then  
                                  begin  
                                                  break;  
                                  end;  
                  end;  
                  QueryPerformanceCounter(t2);  
                  t3:=(t2-t1)/c1*1000;  
                  ShowMessage('实际经过时间'+FloatToStr(t3)+'毫秒');  
                  self.Button1.Enabled:=true;  
  end;  
   
   
   
   
  //取得模拟数据  
  procedure   GetPoints;  
  var  
                  x:integer;  
  begin  
  //取得数据  
                  for   x:=0   to   511   do  
                  begin  
                                  DrawPoints[x].X:=x;  
                                  DrawPoints[x].Y:=random(300);  
                  end;  
  end;  
  //画图  
  procedure   Draw;  
  begin  
                  //画背景入缓存  
                  Form1.Image1.Canvas.Brush.Color:=clBlack;  
                  Form1.Image1.Canvas.FillRect(Rect(0,0,512,300));  
                  //画波形入缓存  
                  Form1.Image1.Canvas.Pen.Style:=psSolid;  
                  Form1.Image1.Canvas.Pen.Color:=clGreen;  
                  Form1.Image1.Canvas.Polyline(DrawPoints);  
                  //画网格入缓存  
                  Form1.Image1.Canvas.Pen.Style:=psDot;  
                  Form1.Image1.Canvas.Pen.Color:=clRed;  
                  Form1.Image1.Canvas.MoveTo(0,30);  
                  Form1.Image1.Canvas.LineTo(511,30);  
                  Form1.Image1.Canvas.MoveTo(0,60);  
                  Form1.Image1.Canvas.LineTo(511,60);  
                  Form1.Image1.Canvas.MoveTo(0,90);  
                  Form1.Image1.Canvas.LineTo(511,90);  
                  Form1.Image1.Canvas.MoveTo(0,120);  
                  Form1.Image1.Canvas.LineTo(511,120);  
                  Form1.Image1.Canvas.MoveTo(0,150);  
                  Form1.Image1.Canvas.LineTo(511,150);  
                  Form1.Image1.Canvas.MoveTo(0,180);  
                  Form1.Image1.Canvas.LineTo(511,180);  
                  Form1.Image1.Canvas.MoveTo(0,210);  
                  Form1.Image1.Canvas.LineTo(511,210);  
                  Form1.Image1.Canvas.MoveTo(0,240);  
                  Form1.Image1.Canvas.LineTo(511,240);  
                  Form1.Image1.Canvas.MoveTo(0,270);  
                  Form1.Image1.Canvas.LineTo(511,270);  
                  Form1.Image1.Canvas.MoveTo(51,0);  
                  Form1.Image1.Canvas.LineTo(51,300);  
                  Form1.Image1.Canvas.MoveTo(102,0);  
                  Form1.Image1.Canvas.LineTo(102,300);  
                  Form1.Image1.Canvas.MoveTo(153,0);  
                  Form1.Image1.Canvas.LineTo(153,300);  
                  Form1.Image1.Canvas.MoveTo(204,0);  
                  Form1.Image1.Canvas.LineTo(204,300);  
                  Form1.Image1.Canvas.MoveTo(255,0);  
                  Form1.Image1.Canvas.LineTo(255,300);  
                  Form1.Image1.Canvas.MoveTo(306,0);  
                  Form1.Image1.Canvas.LineTo(306,300);  
                  Form1.Image1.Canvas.MoveTo(357,0);  
                  Form1.Image1.Canvas.LineTo(357,300);  
                  Form1.Image1.Canvas.MoveTo(408,0);  
                  Form1.Image1.Canvas.LineTo(408,300);  
                  Form1.Image1.Canvas.MoveTo(459,0);  
                  Form1.Image1.Canvas.LineTo(459,300);  
                  Form1.Image1.Canvas.MoveTo(510,0);  
                  Form1.Image1.Canvas.LineTo(510,300);  
                  //画边框  
                  Form1.Image1.Canvas.Pen.Style:=psSolid;  
                  Form1.Image1.Canvas.MoveTo(0,0);  
                  Form1.Image1.Canvas.LineTo(511,0);  
                  Form1.Image1.Canvas.MoveTo(0,299);  
                  Form1.Image1.Canvas.LineTo(511,299);  
                  Form1.Image1.Canvas.MoveTo(0,0);  
                  Form1.Image1.Canvas.LineTo(0,300);  
                  Form1.Image1.Canvas.MoveTo(511,0);  
                  Form1.Image1.Canvas.LineTo(511,300);  
                  bitblt(Form1.Canvas.Handle,Form1.Image1.Left,Form1.Image1.Top,512,300,Form1.Image1.canvas.handle,0,0,srccopy);  
   
  end;  
   
   
  在公司我用的机器上运行是8000多毫秒,在同事的机器上是1000多...  
   
  另外发现一个问题,同样的这个程序,我在家里用delphi7编译的时候,不用用到btiblt,image1直接画直接显示画面不会闪烁,拿到公司这部机器编译后运行就很闪,得加上btiblt才不会闪,公司的环境是delphi6.....  
   
  不知是不是跟delphi的版本有关~~~~~  
   
  现在试不了~回家再重新试试~!

感觉用btiblt的速度比在Form里面开双缓冲速度快一半.

开心~~~~~知道是电脑的问题....不是我能力问题......  
   
  一开始还很郁闷和我一起新进公司的那个同事很轻松就能达到500FPS....早上才发觉是因为没显卡驱动的原因~~~松了口气~!

posted @ 2008-12-19 10:01 delphi2007 阅读(267) | 评论 (0)编辑 收藏

求帮助:图片移动 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061018120505228.html
 
  图片从右上角移动到左下角  
  移动的速度是可以控制的  
  移动的过程中出现它的痕迹  
  而且图片是从小到大的  
  应该怎么做呢

痕迹是什么,会随着时间消失吗?如果没有痕迹就非常简单,Image里放上图片,不停的移动Image组件,并放大他就可以了(不过局限于不是很大的图片),而且很容易保存背景,如果需要痕迹,难度就不是一个档次了,要写的程序就多多了。

嘿嘿,简单,不刷新,直接绘制。Ontimer里面做

posted @ 2008-12-19 10:01 delphi2007 阅读(160) | 评论 (0)编辑 收藏

【大家好,我有几个关于创业的问题,希望有创业经验,或是现在在开公司的朋友们给一些建议?】 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061017220956229.html
我今年20岁了,在上海就读大专(民办).     物流管理(专业).   现在读的是2年级.还有两年就毕业了.我是一个“0”基础的人将来想在IT界上创业。我有下面几个问题,大家帮回答一下。  
  1.IT行业创业未来前景好不好?在哪个方面成功率大点?  
  2.我要创业的话,我的技术需要达到什么地步呢,需要学习几年,我需要什么团队呢?  
  3.风险投资在IT行业很流行,你们对“风险投资”看法?拿到风险投资的可能性是多少呢?  
  4.网络和传统工业的结合,可能是未来发展的动向吗?      
   
    希望大家在看贴之后,给一中肯的答复,小弟我在这先行谢过各位。谢谢了。。。。                                                                                                                              
       
 
posted @ 2008-12-19 10:01 delphi2007 阅读(141) | 评论 (0)编辑 收藏

哪本书详细讲到FindFirst和FindNext查找文件??? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061017115520230.html
哪本书详细讲到FindFirst和FindNext查找文件???  
   
  请告诉我书名,谢谢。
posted @ 2008-12-19 10:01 delphi2007 阅读(456) | 评论 (0)编辑 收藏

怎么样用DSPack拍摄一张照片 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061017101106231.html
现在我需要用DSPack这个控件,用摄像头拍摄一张照片  
  我不知道怎么写,请给出源码,  
  源码请发到我的邮箱fartripliao@163.COM

DSPack的Demo自带SimpleGrabber的用法

posted @ 2008-12-19 10:01 delphi2007 阅读(333) | 评论 (0)编辑 收藏

SPL文件结构,关于打印监控的 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061016164935233.html
我想通过分析SPL文件,来获得打印机的打印内容,不知道哪位高人有这方面的资料或源码,谢谢!

关注!

posted @ 2008-12-19 10:01 delphi2007 阅读(462) | 评论 (0)编辑 收藏

请问delphix下双缓冲是自动开启的吗? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061016161719234.html
需不需要做什么设置才能开启双缓冲?  
  我用delphix做alpha混合时机器慢的要死,不知为什么?

混合速度慢跟双缓冲没有关系吧………………关注

求解??

要在内存做alpha   brend操作,不能在显存中进行.

delphix的绘图你可以理解为doubleBuffer=true;因为它是基于ddraw的翻页机制;  
   
  delphix   的早期版本是基于ddraw7的,所以没有3d优化2D,alpha都比较慢;你可以到2CCC.COM下个最新版本的,UNDELPHIX;

posted @ 2008-12-19 10:01 delphi2007 阅读(325) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 14 15 16 17 18 19 20 21 22 Last