delphi2007 教程

delphi2007 教程

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

#

图片转换问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061016141026235.html
我有一个bmp图片是300dpi的,我要把他转换成200dpi的  
  而且他的大小也会跟着随之改变  
  比喻说  
  300dpi下一个图片是宽:263,高398,在200dpi下就是宽176,高265  
  就象photoshop中的'图片大小'中改边dpi时高宽也同时变化的  
  那样,图片的存储大小也回变化  
 

用GDI+的  
  SetResolution(96,   96)方法!这里是96DPI的  
   
  Image   :=   TGPImage.Create('A.BMP');  
  GetEncoderClsid('image/bmp',   encoderClsid);  
  TGPBitmap(image).SetResolution(200,   200);  
  image.Save('B.bmp',   encoderClsid);

其实dpi分辨率只是针对打印或扫描而言,跟像素分辨率没有必然的关系。因为一般图像中没有存储物理大小,所以也只好通过修改像素来适应了。  
   
  不过如果打印模块是你自己做的话,完全可以不缩减像素,那样可以获得更精致的打印效果。

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

读文件时,统计行数,为何比实际的多一行 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061016105832236.html
我的程序如下,现象是如果boat.txt中有10行,total的结果是11,在输出的boat1中最后多的一行是0   0   为什么,我换成fortran程序total的结果就是10   ??  
    var  
  g,f:textfile;  
  i,j,scale,multiple,total:integer;  
  xmax,ymax,xmin,ymin:integer;  
  nn,nx,ny,nb:integer;                        
   
  begin  
      assignfile(f,'E:\kong\delphi\picture\boat.txt');  
      assignfile(g,'E:\kong\delphi\picture\boat1.txt');  
      reset(f);  
      rewrite(g);  
   
      total:=0;  
      while   not   eof(f)   do  
   
      begin  
   
      readln(f,i,j);  
      writeln(g,i,j);  
   
   
   
        total:=total+1;  
   
      end;  
      closefile(f);  
      closefile(g);  
   
      memo1.lines.Add(inttostr(total));  
   
   
  end;  
  end.

期待大侠的回答

有些文本在末尾有空行,fortran可能没有把这个算进去。你用二进制编辑器看看?

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

求txt文档转png图片的程序 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061015203659237.html
小弟有许多txt格式的小说  
  原本放在免费的html空间给人下载  
  但发现很快空间就挂掉了  
  想来想去  
  觉得最好的办法就是把txt文档转换成图片  
  然后传到那些支持外链的网络相册空间上  
  这样能解决空间问题  
   
  为了尽量压缩文件大小  
  用黑白两色就行了  
  字库用hzk16就够了  
   
  个人不懂png需要的lz77算法(一向不研究算法),无法自己做程序  
  有没有好心人帮忙??

到sf.net搜索关键字“png   delphi”我记得有的

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

请问目前哪种控件支持的文件格式比较多?最好能支持PSD格式的。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061015164123238.html
如题多谢,万分感谢。
posted @ 2008-12-19 10:01 delphi2007 阅读(223) | 评论 (0)编辑 收藏

工作需要将图片保存为PSD格式,图片本身只是一个图层,请问哪个控件可以做到?imageen可以吗? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061015163937239.html
我知道如果图层多的话很麻烦,可是我的图片只是一个图层,没有多层的信息,只是要将格式转成PSD,如果有朋友用过这方面可以转PSD的控件,请提示一下,万分感谢。

在后台用fastreport打印后导出

还没有有其它好的方法,请用过的朋友提示一下好吗?万分感谢。

装虚拟打印机后台打印成文件

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

已知某个文件的全部路径,如d:\aa\bbb\ccc\0.jpg 如何得到0.jpg的父目录名称cc呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061015163508240.html
请问有没有直接的函数可以做到呢?

wpath:=ExtractFilePath(fn);

谢谢,可是我只是想要这个ccc而非整个路径,如何做到呢?

ExtractFileName

谢谢,可是我只是想要这个ccc而非整个路径,如何做到呢?  
  ->  
  没有直接的函数  
 

procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      s:string;  
      sl:tstringlist;  
  begin  
      sl   :=   tstringlist.Create;  
      s   :=   'd:\aa\bbb\ccc\0.jpg';  
      sl.Delimiter   :=   '\';  
      sl.DelimitedText   :=s;  
      showmessage(sl.Strings[sl.Count-2]);  
      sl.Free;  
  end;

mark

向andyzhou1101学习  
  DelimitedText我第一次看到,谢谢!  
 

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

Dspack开发视频程序,如何读取硬件卡播放的图象 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061015130301241.html
做个卡拉OK点歌系统,如何读取神龙卡的播放图象,保存为一个视频文件  
  另外问一下,如何把声音也保存在一下?

VideoGrabber会更简单  
  DSPack也是OK的  
   
  用VFW也OK.但是效果比较差~  
   
  其实就是DirectShow的应用而已  
  至于DSPack如何配置,可参看本人Blog:http://LYSoft.G4Soft.Net

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

关于左右声道切换的问题 CDSoftwareWj 进来 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061015125046242.html
我希望播放影音文件时控制系统的左右声道切换,  
  是左右声道同时播放左声道的音频或同时播放右声道的音频。  
   
  搜索后发现只有CDSoftwareWj回复的一篇代码好象有点道理,于是按上面去做。  
  代码中    
  mciSendCommand(Form1.MediaPlayer1.DeviceID,MCI_SETAUDIO,       MCI_SET_OFF       ,integer(@s));  
  是关闭声音  
   
  mciSendCommand(Form1.MediaPlayer1.DeviceID,MCI_SETAUDIO,       MCI_SET_ON       ,integer(@s));  
  是打开声音  
   
  可在这两代码之间的  
  s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_Left;  
  并没有起到声道切换的作用,完全没有任何效果。  
   
  请问谁有好方法、好例子?  
  (ps:不要发单独控制左右声道音量的例子。)  
   
  CDSoftwareWj相关帖子:  
  http://topic.csdn.net/t/20020420/15/662797.html#Reply_4358704  
  http://topic.csdn.net/t/20031106/22/2435572.html

来一高手解决问题啊

mark  
 

http://topic.csdn.net/t/20020420/15/662797.html

找我就找对淫了   哇哈哈哈

20   分~~   太少了吧   多加点   ^^!

这问题时间太久了,要给你找找

http://topic.csdn.net/t/20031106/22/2435572.html  
   
  汗~~   我这个帖子里的代码不是就行么   -_-||  
   
  1.   播放中一定要先关闭声音,否则没效果  
  2.   设置声道  
  3.   //下面的MCI_DGV_SETAUDIO_VALUE       一定不能少            
  这里也很关键                     err:=mciSendCommand(MediaPlayer11.DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE       or       MCI_DGV_SETAUDIO_ITEM       ,integer(@s));      
           
  4.   重新打开就行了  
   
  就是这样的过程

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

小弟需要一个能显示播放音频的各频率音量大小(不知道叫什么东东)的控件~! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061014084757245.html
这个东东就是播放器上都有的,能显示正在播放的音频的各个频率(20~20000)的音量的控件,麻烦知道的人提供帮助

请高手赐教啊~

dspack应该能

http://www.fmod.org/   这个很好

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

打印机怎么不支持格式刷啊 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061012172003247.html
我用打印机输出个多边形   ,中间用格式刷填充   ,可打印机就只能打印出边框,中间的填充画不出来?  
  请高手指点下怎么回事啊?  
 
posted @ 2008-12-19 10:01 delphi2007 阅读(194) | 评论 (0)编辑 收藏

如何将TIFF格式转为JPG Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061012115536249.html
找了好久都没找到。哪位大侠帮一下。

用imageen控件

楼上的没错。

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

怎麼讀取圖型識別碼文件 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061012084608250.html
如下網址:http://www.mailsurf.info/ipcheck.php  
  請問有沒有辦法將其中的IP讀取出來!  
  這種網頁有沒有辦法讀取到網頁的內容或者只能采用圖型識別技術,如果是圖型識別技術又該怎樣操作?謝謝各位!

你给的链接打不开啊

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

怎么做一个不规则的动画的窗体背景? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061024002821210.html
怎么做一个不规则的动画的窗体背景?让程序运行是可以看到动态的图

没有人帮忙一下吗?先谢谢了啊

LZ要怎么样说具体点,  
  实在不行就用TIMER,一段时间换一张图

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

怎么保存TImage缩放后的图像? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061023170728211.html
TImage加载一张图片,缩放显示,然后调用TImage.SaveToFile   保存,可保存的还是原始图片大小,能有个办法使保存的为缩放后的图像吗?

用StretchBlt

var   Rect1,Rect2:TRect;  
          Bitmap   :TBitmap;  
  begin  
      Image1.Stretch   :=   True;  
      Rect1:=Rect(0,0,Image1.Width,Image1.Height);  
      Rect2:=Rect(0,0,Image1.Picture.Width,Image1.Picture.Height);  
      Bitmap   :=   TBitmap.Create;  
      Bitmap.Width   :=   Image1.Width;  
      Bitmap.Height   :=   Image1.Height;  
      Bitmap.Canvas.CopyRect(Rect1,Image1.Canvas,Rect2);  
      Bitmap.SaveToFile('c:\test.bmp');  
      Bitmap.Free;  
  end;

学习

to:liangqingzhi(老之)    
  你的方法确实能保存,谢谢!  
  但是保存后图片颜色会失真,不知有解决方法没有?

Bitmap.PixelFormat   :=   pf24bit;

SetStretchBltMode(Bmp.Canvas.Handle,   STRETCH_HALFTONE);后图像质量有一定提高,但还是不够  
  再顶一次  
  下周一结贴

JPGE--->bmp   本来就会失色的~~这个和转换有关系的吧

缩放用   gdi+的   api     吧。。   还达不到要求就只能用其他插值酸法了  
  缩放肯定是有损的。。。

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

有谁知道哪有图象过渡的源代码吗参考一下? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061023130813212.html
就是在两个图片之间生成过渡图片,请教各位兄弟,帮一下!

我在你的另一个帖子里回复了:  
  http://community.csdn.net/Expert/TopicView3.asp?id=5110421

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

求助:图片移动 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061022195459213.html
我要实现图片像流星一样划过  
  而且图片是从小变到大  
  是怎么做的哦  
  各位高手请指点一下小弟的哦

没有人知道的呀??

自己实现。。   参考图形编程    
  用控件   flash   ..  
  3方控件   例如   www.delphiflash.com

横着竖着移动已经能实现  
  就是斜着没有办法实现的呀  
  图片由小变大就模糊  
  哪位大侠能指点一下小弟的呀  
 

斜着为什么不行?XY座标同时变啊。  
  为什么会模糊?用StretchBlt吧?你不要以上一次改变以后的图片作为下一次的源图片啊,每一步都用一开始load的那幅作源图片,就不会了。  
  还有,如果是NT内核的系统,最好在StretchBlt之前先设一下模式为半调:  
  SetStretchBltMode(HalfTone);

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

有关画线的问题(我感觉超难,各位大侠帮帮忙) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061022153520214.html
我的程序是这样的:选择了矩形框菜单命令按钮,然后鼠标左键按下并拖动鼠标,则实时显出矩形框的样子(在mousemove能够实时看到当前的矩形框),然后在松开鼠标左键时才最终画好确定大小的矩形。然后可以点击选中刚才所画的控件,可以进行拖拉、缩放大小等操作,该怎么做?大家能提供思路吗?急

呵呵,我正做这方面东东,明天加我:276605216

我也在做,我的QQ:66455150,但至今没有好办法。只能找现成控件。

我有一份功能类似的源代码,可选中,移动所画的图形,等一些操作。  
  下载地址http://disk.zzlygo.com/?YYhlm  
  下载“类cad绘图源码.rar”即可

我已经差不多可以搞定了,现在遇到一个问题就是,画线段时不知道怎么控制可以画的直,不知道该怎么办

应该不复杂。  
  既然你自己已经搞定,我就不多说什么了。  
   
   
  画线段时不知道怎么控制可以画的直?啥意思?  
 

思路:  
   
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs;  
   
  type  
      TForm1   =   class(TForm)  
          procedure   FormMouseDown(Sender:   TObject;   Button:   TMouseButton;  
              Shift:   TShiftState;   X,   Y:   Integer);  
          procedure   FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
          procedure   FormMouseUp(Sender:   TObject;   Button:   TMouseButton;  
              Shift:   TShiftState;   X,   Y:   Integer);  
      private  
          {   Private   declarations   }  
          Drawing:   Boolean;  
          MouseOrg:   TPoint;  
          NextPoint:   TPoint;  
          LastDot:   TPoint;  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.FormMouseDown(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
      Drawing   :=   True;  
      MouseOrg   :=   Point(X,   Y);  
      NextPoint   :=   MouseOrg;  
      LastDot   :=   NextPoint;  
      Canvas.MoveTo(X,   Y);  
  end;  
   
  procedure   TForm1.FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
      Y:   Integer);  
  begin  
      if   Drawing   then  
      begin  
          Canvas.Brush.Style   :=   bsClear;  
          Canvas.Pen.Mode   :=   pmNotXor;  
          Canvas.Pen.Style   :=   psDash;  
          Canvas.Rectangle(MouseOrg.X,   MouseOrg.Y,   NextPoint.X,   NextPoint.Y);  
          NextPoint   :=   Point(X,   Y);  
          Canvas.Rectangle(MouseOrg.X,   MouseOrg.Y,   NextPoint.X,   NextPoint.Y);  
      end;  
  end;  
   
  procedure   TForm1.FormMouseUp(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
      if   Drawing   then  
      begin  
          Canvas.Pen.Mode   :=   pmCopy;  
          Canvas.Pen.Style   :=   psSolid;  
          Canvas.Rectangle(MouseOrg.X,   MouseOrg.Y,   X,   Y);  
          Drawing   :=   False;  
      end;  
  end;  
   
  end.  
 

上面没有实现重新选择后拖拉和缩放,应该也不难,只要判断鼠标点在已经存在的矩形的地方重新拖拉就行了,如在四角附近,整体进行缩放,在四边中心附近,单边缩放等.  
 

to   litangel(还是朋友)    
  使用lineto进行画线段时,画的线段不直,有稍微歪曲扭曲的情况,不知道怎么解决,另外线段的选取也很麻烦

UP

////画的线段不直,有稍微歪曲扭曲的情况。  
   
  不会吧?画直线与线段,都是用这个,没有问题的。  
   
  线段的选取,你判断当前鼠标的点到线段的距离,如果小于一个你设定的数值,就选中。

楼主可能指的是斜线的锯齿.  
 

这个问题在Borland提供Delphi第一个版本(Version1)开始,就有完整的例子了!!!  
  请查一下DelphiX的demo\doc目录下的graphex工程。  
   
 

如果要点击来选中所画的矩形进行移动或擦去,其他都不动,那么你  
  需要为每个新画矩形动态地开辟一个独立的Image组件才行!!!  
 

"用lineto进行画线段时,画的线段不直,有稍微歪曲扭曲的情况,不知道怎么解决"  
   
  这是在显示器上,利用一个一个象素连成的直线的通病,不可能有彻底的解决方法.  
   
  利用"去锯齿"法可以使线条梢好看点.但用"去锯齿"法作出的直线必须有较大线宽.  
   
  另外,提高显示分辨率,也可以使线条的"锯齿"状看起来不那么明显.  
   
 

to   zzwu(未名):  
  但是我看到在用windows的画笔时,他有一个功能,就是按住shift键,就可以保证你每次拖拉的线条都是直线,没有锯齿,这个是怎么做的?大家有什么思路没有?

shift是不能画任意角度直线的,只能是按照45度角的倍数来画

建议直接   学习gdi+的   函数.

这个也简单:查一下的shift是否按下状态,  
   
  如果shift按下,则  
  查deltaY=abs(y2-y1)与   deltaX=   abs(x2-x1)的比值,  
  如果>1,则实际画的线是垂线,否则画水平线。  
   
  如果shift未按下,则  
  直接连接(x1,y1)、(x2,y2)两点。  
 

推荐Graphic32库。很棒的东西

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

可以确定找对了窗体的handle,可是为什么如下代码发送组合键会没有反应呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061022023426215.html
SENDMessage(tmph,WM_SYSKEYDOWN,VK_control,0);  
   
      SENDMessage(tmph,WM_SYSKEYDOWN,ord('A'),0);  
   
      Sleep(800);  
   
      SENDMessage(tmph,WM_SYSKEYUP,ORD('A'),0);  
   
      SENDMessage(tmph,WM_SYSKEYUP,VK_CONTROL,0);  
   
  手工在窗体上按ctrl+a是有反应,可是为什么用这个组合键不行呢?

关注

需先将输入焦点放在窗体上:  
   
  keybd_event(VK_CONTROL,   MapVirtualKey(VK_CONTROL,   0),   0,   0);  
  keybd_event(Ord('A'),   MapVirtualKey(Ord('A'),   0),   0,   0);  
  keybd_event(Ord('A'),   MapVirtualKey(Ord('A'),   0),   KEYEVENTF_KEYUP,   0);  
  keybd_event(VK_CONTROL,   MapVirtualKey(VK_CONTROL,   0),   KEYEVENTF_KEYUP,   0)  
   
 

楼上的老师:  
  上述可以向外部程序发送组合键吗?

.....   可以,先动手再动口  
  用一个Timer来测试

谢谢了,楼上的老师!我一直在用button_click测试,所以没成功!没想到用timer!谢谢你!只不过我不是楼主,所以没法给您加分......你到http://community.csdn.net/Expert/topic/5120/5120704.xml?temp=.9539606这个贴子光顾一下,有分相赠!  
 

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

请问能不能将一个外部应用程序的视频播放窗口中的动画实时传到我的程序中的一个窗口中呢? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061022001350216.html
可以得到这个外部应用程序及它的视频窗口的句柄,得到以后如何将它的实时动画传到自己程序中呢?  
 
posted @ 2008-12-19 10:01 delphi2007 阅读(180) | 评论 (0)编辑 收藏

bitblt和getpixel哪个更效率 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061021203252217.html
要取屏幕上的一个点(只有一个像素),用bitblt和getpixel哪个更效率呢?

想快速地对指定图片或区域进行处理,常见的方法取出图片数据,逐像素  
  进行运算,很麻烦。还见有用Point或GetPixel取点运算的,其低速可想而知。    
  其实利用BitBlt的位运算,可高速完成这种操作。

up

bitblt和getpixel  
   
  光看名字就觉得后者慢

getpixel   是gdi函数   应该速度很快的。  
  我机器不好25w次   一秒。。

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

为什么32BIT的BMP的颜色容PATTATE总为0????特急!!!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061021130343218.html
不知为什么在WINDOWS,DELPHI对32位的BMP的PATTATE的取得总为‘0’,如何取得呢?  
  告诉我大侠们??????  
  因为要对32的位图进行处理啊,“转换成32位的ICO”

只有1/2/4/8位的位图有调色板,16/24/32位的都是所谓“真彩色”,即象素本身定义了颜色值,不需要调色板。  
 

谢谢了。。。。。。。。。  
  要对32的位图进行处理啊,“转换成32位的ICO”  
  那该怎么办呢?

function   CreatIconFromBitmap(Source:   TBitmap):   TIcon;  
  var  
      IconInfo:   TIconInfo;  
  begin  
      Result   :=   TIcon.Create;  
      if   Source.Empty   then  
          exit;  
      IconInfo.fIcon   :=   true;  
      IconInfo.hbmMask   :=   Source.Handle;  
      IconInfo.hbmColor   :=   Source.Handle;  
      Result.Handle   :=   CreateIconIndirect(IconInfo);  
  end;  
 

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

Delphi里如何实现图像角点检测?网上搜到的代码都不全,哪位大哥有完整的? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061021090404219.html
RT
posted @ 2008-12-19 10:01 delphi2007 阅读(168) | 评论 (0)编辑 收藏

如何在图片中添加文字 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061020165948220.html
如题,谢谢   !!

在图片上写字的哦  
  用canvas

将图片加载到TBitmap对象,用Canvas.TextOut输出文字,可以用Canvas.Font设置字体大小颜色等,最后保存就可以。

使用Canvas.TextOut,格式:Canvas.TextOut(x,y,str),str为string类型;如在x=100,y=200处显示“你好”,就是Image1.Canvas.TextOut(100,200,'你好')

是要形成这样的效果:  
  鼠标拖一下出来一个框,然后在框里面写字。。

计算鼠标坐标   处理。。

mark!

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

图象识别 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061020154335221.html
-----------------------------------------------------  
      |     A图像                                                                                         |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                                                                                       |  
      -----------------------------------------------------  
  如果   A图像里多出一个B图像  
      -----------------------------------------------------  
      |     A图像                                                                                         |  
      |                                                                                                       |  
      |                                                                                                       |  
      |                                   -----------                                               |  
      |                                 |                       |                                             |  
      |                                 |       B图像       |                                             |  
      |                                 |                       |                                             |  
      |                                 |                       |                                             |  
      |                                   -----------                                               |  
      -----------------------------------------------------  
  我怎么快速的知道B图像出现的位置?  
   
   
 

掃描两次,形成差值列表,对列表进行排序,挑出一个区域就是结果

楼上所言极是!  
 

赞同一楼,二图相减

两图异或即可

异或...

别忘记考虑误差

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

有关流程图的开发,如Visio那样的.分不够再加啊. Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061020134133222.html
最近想做一个能够自己画流程图的东西,具体就象Microsoft   Visio那样.能够在程序里面画流程图,大家给点思路啊..  
 

要制作一个创建流程图之类的小程序,  
  就是在一个区域内画些方框,圆,写点文字,  
  然后用线连接,可以拖动方框之类(连接的线也要会动)  
  最后还要保存成一个图象,  
  应该用什么方案.  
  我想了两个方案  
  一个是直接绘图  
  另一个是用图形组件(就象Delphi的环境一样)  
   
  <上面没说得太详细,主要就是象这样的功能了>

dev有flowchat

创建特定的数据结构描述不同的图形,然后配合绘图的概念进行编程。

第三方控件dxflowchart,特好使!

呵呵.多谢楼上的了.上个周末在家里怎么也打不开CSND.说真的.有时候不得不说CSDN好烂啊.一段时间不是这儿有问题就是那里有问题.  
   
 

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

怎么将验证码图片保存到本地或是用Image显示 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061020084435223.html
我用WebBrowser打开网页http://www.harbin.gov.cn/ztbd/sdmp/wytp.php   我想把上面的验证码图片用image显示或是保存到本地,怎么处理?

各位老大,帮解答一下吧

up一下

//又是,我  
  //原理是:将验证码移到可见区域,拷贝验证码所在的屏幕图像,保存到位图中  
  //参考如下代码  
   
  uses   MSHTML;  
   
  function   TakeDesktop(   //   获取屏幕指定区域的图像  
      mBitmap:   TBitmap;   //   输出位图  
      mRect:   TRect   //     获取的区域  
  ):   Boolean;   //   返回截取是否成功  
  var  
      vDC:   HDC;  
  begin  
      Result   :=   False;  
      if   not   Assigned(mBitmap)   then   Exit;  
      mBitmap.Canvas.FillRect(mBitmap.Canvas.ClipRect);  
      mBitmap.Width   :=   mRect.Right   -   mRect.Left;  
      mBitmap.Height   :=   mRect.Bottom   -   mRect.Top;  
      mBitmap.PixelFormat   :=   pf32bit;  
      vDC   :=   GetWindowDC(GetDesktopWindow);  
      try  
          BitBlt(mBitmap.Canvas.Handle,   0,   0,   mBitmap.Width,   mBitmap.Height,  
              vDC,   mRect.Left,   mRect.Top,   SRCCOPY);  
      finally  
          DeleteDC(vDC);  
      end;  
      Result   :=   True;  
  end;   {   TakeDesktop   }  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      WebBrowser1.Navigate('http://www.harbin.gov.cn/ztbd/sdmp/wytp.php');  
  end;  
   
  procedure   TForm1.WebBrowser1DocumentComplete(Sender:   TObject;  
      const   pDisp:   IDispatch;   var   URL:   OleVariant);  
  var  
      vHTMLDocument2:   IHTMLDocument2;  
      vHTMLElementCollection:   IHTMLElementCollection;  
      vHTMLElement:   IHTMLElement;  
      vHTMLImgElement:   IHTMLImgElement;  
      I:   Integer;  
      vRect:   TRect;  
  begin  
      if   not   Assigned(TWebBrowser(Sender).Document)   then   Exit;  
      vHTMLDocument2   :=   TWebBrowser(Sender).Document   as   IHTMLDocument2;  
   
      vHTMLElementCollection   :=   vHTMLDocument2.body.all   as   IHTMLElementCollection;  
      for   I   :=   0   to   vHTMLElementCollection.length   -   1   do  
      begin  
          vHTMLElement   :=   vHTMLElementCollection.item(I,   0)   as   IHTMLElement;  
          if   SameText(vHTMLElement.tagName,   'img')   then  
          begin  
              vHTMLImgElement   :=   vHTMLElement   as   IHTMLImgElement;  
              if   Pos('vimage.php',   vHTMLImgElement.src)   >   0   then  
              begin  
                  vHTMLElement.scrollIntoView(0);  
                  Application.ProcessMessages;  
                  vRect.TopLeft   :=   Point(TWebBrowser(Sender).Left,   TWebBrowser(Sender).Top);  
                  vRect.TopLeft   :=   ClientToScreen(vRect.TopLeft);   //   计算WebBrowser屏幕位置  
                  OffsetRect(vRect,   130,   184);   //   这里根据具体情况调整  
                  vRect.Right   :=   vRect.Left   +   80;  
                  vRect.Bottom   :=   vRect.Top   +   25;  
                  TakeDesktop(Image1.Picture.Bitmap,   vRect);  
                  Break;  
              end;  
          end;  
      end;  
  end;  
 

呵呵,再次谢谢   伴水清清

http://support.microsoft.com/kb/293125/en-us

http://www.harbin.gov.cn/ztbd/sdmp/wytp.php    
  的那个验证码的文本框我怎么写上数据呢,前面的姓名的文本框我是用  
  ovElements   :=   WebBrowser1.OleObject.Document.all.tags('INPUT');  
  for   i   :=   0   to   (ovElements.Length   -   1)   do  
          begin  
              if   (UpperCase(ovElements.item(i).type)   =   'TEXT')   and   (UpperCase(ovElements.item(i).name)   =   'MYNAME')   then  
              begin  
                  ovElements.item(i).value:='zb';  
                  break;  
              end;  
          end;  
   
  写上的数据,但是下面那个框的类型好象有问题type=number   name=number

uses   Math,   MSHTML;  
   
  function   TakeDesktop(   //   获取屏幕指定区域的图像  
      mBitmap:   TBitmap;   //   输出位图  
      mRect:   TRect   //     获取的区域  
  ):   Boolean;   //   返回截取是否成功  
  var  
      vDC:   HDC;  
  begin  
      Result   :=   False;  
      if   not   Assigned(mBitmap)   then   Exit;  
      mBitmap.Canvas.FillRect(mBitmap.Canvas.ClipRect);  
      mBitmap.Width   :=   mRect.Right   -   mRect.Left;  
      mBitmap.Height   :=   mRect.Bottom   -   mRect.Top;  
      mBitmap.PixelFormat   :=   pf32bit;  
      vDC   :=   GetWindowDC(GetDesktopWindow);  
      try  
          BitBlt(mBitmap.Canvas.Handle,   0,   0,   mBitmap.Width,   mBitmap.Height,  
              vDC,   mRect.Left,   mRect.Top,   SRCCOPY);  
      finally  
          DeleteDC(vDC);  
      end;  
      Result   :=   True;  
  end;   {   TakeDesktop   }  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      WebBrowser1.Navigate('http://www.harbin.gov.cn/ztbd/sdmp/wytp.php');  
  end;  
   
  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.WebBrowser1DocumentComplete(Sender:   TObject;  
      const   pDisp:   IDispatch;   var   URL:   OleVariant);  
  const  
      cPoints:   array[0..3]   of   TPoint   =   (  
  (X:   -5;   Y:   -9),  
  (X:   -26;   Y:   -9),  
  (X:   -47;   Y:   -9),  
  (X:   -68;   Y:   -9)  
      );  
  var  
      vHTMLDocument2:   IHTMLDocument2;  
      vHTMLElementCollection:   IHTMLElementCollection;  
      vHTMLElement:   IHTMLElement;  
      vHTMLImgElement:   IHTMLImgElement;  
      vHTMLInputElement:   IHTMLInputElement;  
      I,   J:   Integer;  
      vRect:   TRect;  
      vNumber:   TBitmap;  
      vBitmap:   TBitmap;  
      S:   string;  
  begin  
      if   not   Assigned(TWebBrowser(Sender).Document)   then   Exit;  
      vHTMLDocument2   :=   TWebBrowser(Sender).Document   as   IHTMLDocument2;  
   
      vHTMLElementCollection   :=   vHTMLDocument2.body.all   as   IHTMLElementCollection;  
      for   I   :=   0   to   vHTMLElementCollection.length   -   1   do  
      begin  
          vHTMLElement   :=   vHTMLElementCollection.item(I,   0)   as   IHTMLElement;  
          if   SameText(vHTMLElement.tagName,   'img')   then  
          begin  
              vHTMLImgElement   :=   vHTMLElement   as   IHTMLImgElement;  
              if   Pos('vimage.php',   vHTMLImgElement.src)   >   0   then  
              begin  
                  vHTMLElement.scrollIntoView(0);  
                  Application.ProcessMessages;  
                  vRect.TopLeft   :=   Point(TWebBrowser(Sender).Left,   TWebBrowser(Sender).Top);  
                  vRect.TopLeft   :=   ClientToScreen(vRect.TopLeft);   //   计算WebBrowser屏幕位置  
                  OffsetRect(vRect,   130,   184);   //   这里根据具体情况调整  
                  vRect.Right   :=   vRect.Left   +   80;  
                  vRect.Bottom   :=   vRect.Top   +   25;  
                  TakeDesktop(Image1.Picture.Bitmap,   vRect);  
                  Break;  
              end;  
          end;  
      end;  
      vNumber   :=   TBitmap.Create;  
      vBitmap   :=   TBitmap.Create;  
      try  
          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,   Image1.Picture.Graphic);  
              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  
          vBitmap.Free;  
          vNumber.Free;  
      end;  
   
      vHTMLInputElement   :=   (vHTMLDocument2   as   IHTMLDocument3  
          ).getElementById('number')   as   IHTMLInputElement;  
      if   Assigned(vHTMLInputElement)   then   vHTMLInputElement.value   :=   S;  
  end;  
 

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

像PhotoShop那样保存 JPG 的格式选项如何做? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061019114413224.html
 
      平时没发觉  
   
      无意中发现自己的代码保存的JPG质量不如PS的  
   
      载入代码如下:   [LoadIn   是完整文件名]  
   
      LoadInBmp   :=   Tbitmap.Create;  
   
          if   (LowerCase(extractfileext(LoadIn))=   '.jpeg')   or   (LowerCase(extractfileext(LoadIn))=   '.jpg')then  
              begin  
                  jpg:=   Tjpegimage.Create   ;  
                  jpg.LoadFromFile(LoadIn);  
                  LoadInBmp.Assign(jpg);  
                  jpg.Free;  
              end;  
          if   LowerCase(extractfileext(LoadIn))=   '.png'   then  
              begin  
                  png:=Tpngobject.Create;  
                  png.LoadFromFile(LoadIn);  
                  LoadInBmp.Width   :=   png.Width;  
                  LoadInBmp.Height   :=png.Height;  
                  LoadInBmp.Assign(png);  
                  png.Free;  
              end;  
          if   LowerCase(extractfileext(LoadIn))=   '.bmp'   then  
              begin  
                  LoadInBmp.LoadFromFile(LoadIn);  
              end;  
   
      ImageView.Width   :=   LoadInBmp.Width;  
      ImageView.Height   :=LoadInBmp.Height;  
      ImageView.Picture.Assign(LoadInBmp);  
   
   
      保存JPG代码如下:   [FN   是完整文件名]  
   
      jpg   :=   TJpegImage.Create;  
      jpg.Assign(ImageView.Picture.Bitmap);  
      jpg.CompressionQuality   :=   100;  
      jpg.Performance   :=   jpBestQuality;  
      jpg.Compress;  
      jpg.SaveToFile(FN);  
      jpg.Free;  
   
      我试的图是这样的:    
   
      一张JPG   用PS在靠左上角的位置加入   "Sample   Picture"   的红色粗体字  
   
      用PS保存后字样的周围轮廓很清晰  
   
      接着用自己的程序载入     显示在Image上还是很清晰的效果  
   
      可一保存才发现     存成的文件其它地方都还好   就是字体那一块糊了  
   
      同样用PS打开那个PS保存的JPG文件直接再存成JPG却还很清晰  
   
      后来试了一下发现      
   
      jpg:=   Tjpegimage.Create   ;  
      jpg.LoadFromFile(LoadIn);  
      jpg.SaveToFile(TempJpgFile);  
   
      载入时直接存效果是清晰的  
   
      转成BMP后在Image里显示也是清晰的  
   
      仅仅是BMP存成JPG时效果不行  
   
      D7自带的JPG示例里也没有保存JPG文件的代码  
   
      而且PS里的保存选项内容还挺多的     不知道怎么实现  
   
      网上也找不到介绍这类的资料  
   
      哪位大大解下惑     谢谢!  
   
 

.`  
  `  
 

TJPEGImage.CompressionQuality/GrayScale/PrograssiveEncoding等等。  
 

mark

关注

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

哪位有没有reportbuilder的教程?共享一下。万分感谢! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061223012343151.html
哪位有没有reportbuilder的教程?共享一下。万分感谢!

查一下帮助文件嘛,很好的

楼主有一万分吗????  
  没有的话,你怎么用万分来感谢呢????  
   
  呵呵~~~~~~  
  说话要考虑一下嘛!

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

请教wwdbgrid高手 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222203937152.html
用wwdbgrid如何实现,事先增加5条空白记录在上面,录入数据时直接就可以在上面增加了,而不用录入一条再新增一条

用insert

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

多表组合分类统计问题~~~ Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061222185321153.html
现有两个表xxlx,students    
  xxlx  
  C1  
  B2  
  C3  
  students下有相关学员的信息  
  如何自动枚举xxlx下的学习类型   然后自动统计出students下相关的信息?  
   
  另一个附带说下   如何把sql里的图片字段读取出来实行压缩?   写进去的是JPG的图片   会读不会压缩...   或则如何写的时候直接压缩存储?

UP?

JPG本身就是压缩过的图片,若你想再对它进行压缩,可能你的收效不大.建议忽略JPG压缩的想法

1.不是特别了解你的需求,不过用两表关联应该可以解决你的问题  
  如:  
  select   a.xxlx,count(*)   as   tjs   from   students   a   ,xxlx   b    
  where   a.xxlx=b.xxlx   group   by   a.xxlx  
   
  2.同意楼上所说.JPG本身就是压缩的

to   cowboy_tt    
  压缩过我知道的   只是数码相机出来的   体积还是太大   存数据库里太苦恼    
  是可以再做压缩的   没那么高的清晰度要求和分辨率

to   keiy  
  不能赋予数据集合吧

TKS     keiy  
  问题解决~

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

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