delphi2007 教程

delphi2007 教程

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

#

谁知道 按键精灵 如何给其他程序发送按键? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061201170149138.html
想给一个游戏窗口发送按键K;  
  用了PostMessage,keybd_event;都不行,但是用按键精灵却可以,  
  哪位高手来指点下啊!!!  
  //  
  postmessage和keybd_event用的绝对没错!!

//关键问题,你要保证输入焦点是在游戏的窗口中  
   
  keybd_event(Ord('C'),   0,   0,   0);  
  keybd_event(Ord('C'),   0,   KEYEVENTF_KEYUP,   0);  
 

肯定可以了。

:)

posted @ 2008-09-23 09:37 delphi2007 阅读(413) | 评论 (0)编辑 收藏

如何查找IE浏览器上所有的flash和图片文件的 路径?如 迅雷 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061201161011139.html
如题!!!用   findwindowEx   好像不行啊

你要查路径还是窗口啊?  
   
  查路径的话,先把那个网页保存在string变量里,然后做html的字符串分析,查找特征码。比如flash的源文件就是src='xxxxxxxx',查找src,然后截取出'xxxxxxxx'就是路径了。注意,javascrip中也有src=的用法,你要结合其他特征码来判断是否是flash的源文件地址。  
 

分析网页源码..

www.codeproject.com/shell/AutomateShellWindow.asp  
  bdn.borland.com/article/26574

对于windows   的   ie     可以采取   bho的方式    
   
  自己程序里可以象ls导入mshtml   分析..  
   
  http://vividw.go3.icpcn.com/ie_with_delphi.chm       ie   &   delphi...

mark

对代码分析是不行的,因为有些是IEframe形式的,他们把地址放在其他的网页中,从页码中是   找不到的。不信可以去   QQ网,xinhuanet网   ctrl+f看看     是找不到“.swf”的

还有,大家有没有线程学习的例子阿~~介绍几个阿

?

这个确实比较麻烦,弄了好长时间才弄出来,不是几句话的事情,得仔细看MSDN

posted @ 2008-09-23 09:37 delphi2007 阅读(155) | 评论 (0)编辑 收藏

进程通迅,共享内存中对象的引用? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061201104623140.html
type        
              PShared=^TShared;        
              TShared       =       record        
                      UDPClient:TIdUDPClient;  
                      path:array[0..255]   of   char;  
                      Self:integer;        
                      Count:integer;        
                      hinst:integer;        
              end;        
   
  .....  
   
      MemFile:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TShared),HookMemFileName);        
  将此共享内存放入所有进程空间,其它进程读UDPClient不可用,而path却可以,  
  因为UDPCLient是对象,  
  不知问题出在哪里?  
   
 

关注

UDPClient:TIdUDPClient;  
  这只是一个指针,只占用了四个字节。  
   
  所以对象当然不可以用。

进程之间只可以共享数据,不能共享对象。

posted @ 2008-09-23 09:37 delphi2007 阅读(253) | 评论 (0)编辑 收藏

如何得到dcu文件 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061201104620141.html
我有一个aa.pas和一个aa.dfm,我如何通过这两个东西得到aa.dcu文件

Add到一个工程里   编译

posted @ 2008-09-23 09:37 delphi2007 阅读(191) | 评论 (0)编辑 收藏

delphi 所有程序运行调试都出现cpu窗口,急! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061201095127142.html
就连delphi新建的一个工程不加任何东西也是出现cpu调试窗口  
  而且每次都是停在  
  013c264b   03eb   add   ebp,   ebx这一句,不知道为什么  
  重装了delphi都没用!!!

重装系统

系统配置错误?  
  建议reinstall

我前些天也遇到这个问题,花了十几个小时找遍全球也没有找到答案  
  后来细心审查系统,   发现是中了一个木马,   叫SysInfo.WMP,   是用来偷QQ密码的,   在C:\Program   Files\Common   Files\Microsoft   Shared\MSInfo目录,   它通过注册表,   在IE里执行关联,   把它清除后Delphi即正常,   不再出现CPU窗口,   希望对你有帮助

posted @ 2008-09-23 09:37 delphi2007 阅读(479) | 评论 (0)编辑 收藏

怎样翻译这段C代码 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061201065700143.html
调用Dll文件中的一个函数  
  int   ret;  
  char   *   host_list[3]   =   {"192.168.0.2",   "192.168.0.3",   ""};  
   
  //   初始化布控函数库  
  ret   =   READCD(host_list);  
   
  其中READCD是DLL文件定义的函数,声明如下  
  int   READCD(char   **   host_list);  
   
  谢谢!

var  
      ret:integer;  
      host_list:array[0..2]   of   pchar;  
  begin  
      host_list[0]:=pchar('192.168.0.2');  
      host_list[1]:=pchar('192.168.0.3');  
      host_list[2]:=pchar('');  
      ret:=READCD(host_list);  
  ...  
  end;

ret:=READCD(@host_list);

我写的代码是动态分配数组的即   SetLength(Host_list,3),运行一运行就跳出内存地址错误,不知哪位朋友能否赐教?  
   
  这是我写的  
  function   READCD(host_list:Pointer):integer;stdcall;external   'RCode.dll';  
   
  var  
  i:integer;  
  host_list:array   of   pchar;  
  begin  
          i:=-1;  
          SetLength(host_list,3);  
          host_list[0]:='192.168.1.1';  
          host_list[1]:='192.168.1.2';  
          host_list[2]:='192.168.1.3';  
          i:=READCD(@host_list);  
          ShowMessage(IntToStr(i));  
  end;

个人认为问题应该在你的function   READCD里

i:=READCD(@host_list[0]);  
  //                                       ~~

host_list:array   of   pchar;  
   
      你用的是PCHAR   需要NEW一下才能使用  
  host_list[0]:='192.168.1.1';  
   
 

强烈鄙视问题解决后不结贴的人!  
  强烈鄙视技术问题解决后把贴子转移到非技术区的人!  
  鄙视你们!  
   
  http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659

posted @ 2008-09-23 09:37 delphi2007 阅读(138) | 评论 (0)编辑 收藏

delphi7中如何修改注册表键值 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061130225610144.html
delphi7中如何修改注册表键值啊?   详细点   最好有实例

 
   
  procedure   TClientMainForm.SaveUserSetup(IsKey:   Boolean);  
  var  
      Reg:   TRegistry;  
      i:   Integer;  
  begin  
      Reg   :=   TRegistry.Create;  
      try  
          if   Reg.OpenKey(RegPath,   False)   then  
          begin  
              if   IsKey   then  
              begin  
                  FPassWord   :=   UseKeyForm.Edit1.Text;  
                  FDialName   :=   UseKeyForm.ComboBox1.Text;  
                  FHtmlAddr   :=   UseKeyForm.Edit3.Text;  
                  Reg.WriteString('PassWord',   PassWord);  
                  Reg.WriteString('DialName',   DialName);  
                  Reg.WriteString('HtmlAddr',   HtmlAddr);  
              end   else  
              with   ClientDataForm.UsersCDS   do  
              begin  
                  FUserCode   :=   FieldByName('CODE').Value;  
                  FUserName   :=   FieldByName('NAME').Value;  
                  i   :=   Length(FUserName);  
                  while   (i   >   0)   and   (FUserName[i]   =   #32)   do  
                  begin  
                      FUserName[i]   :=   #0;  
                      Dec(i);  
                  end;  
                  FLine   :=   FieldByName('LINE').Value;  
                  FViewClass   :=   FieldByName('VIEWCLASS').Value;  
                  Reg.WriteString('UserCode',   UserCode);  
                  Reg.WriteString('UserName',   UserName);  
                  Reg.WriteString('ViewClass',   ViewClass);  
                  Reg.WriteString('ComputerName',   ComputerName);  
                  Reg.WriteString('Line',   Line);  
              end;  
          end;  
      finally  
          Reg.Free;  
      end;  
  end;  
 

posted @ 2008-09-23 09:37 delphi2007 阅读(362) | 评论 (0)编辑 收藏

C语言中“char * params[]”的参数在delphi中该如何定义?100分求解决放过。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061130165801145.html
VC写的动态库 一个参数定义成  
  “char   *   params[]”delphi中该如何定义?才能正确的调用。  
   
  有经验的朋友应该一看就知道。  
  因为好久没有来泡坛了。所以放100分吧。来者有分。  
   
   
  int   DllExport   PersonalizeCard   (long   CardNumber,   int   nargs,   char   *   params[])  
  如果成功会在C:下写ookk.txt文件    
  感兴趣的朋友可以通过下面地址下载DLL 试验一下。  
   
  http://ys-h.ys168.com/ys168up/D1/?dll.rary72z7ld4f9f9b1f8z95b4b4b7b0b1b1fq9b4b2b7fl9fl6e14z97e14e24b1b2f2b1fl9b4fc6fd7z  
   
 

params   :   array   of   char

type  
  c=array   of   PChar;  
   
   
   
  int   DllExport   PersonalizeCard   (long   CardNumber,   int   nargs,   params   c)

谢谢大家支持!如方便请大家下载后调用一下。  
  然后把程序贴出来。  
   
  to:hongqi162(失踪的月亮)    
  我试了一下,没成功。  
  相信你应该能搞定。赶快出手吧。

个人认为char   *   params[]是一个字符指针数组,不应该理解为array   of   char,而应该理解为array[low..high]   of   string或TstringList类。本人初学,对概念的理解可能较肤浅,高手勿笑

二楼array   of   pchar应该是最精确的理解了

用PChar  
   
  function   PersonalizeCard   (CardNumber:   Cardinal;     nargs:   Integer;   params:   PChar):   Integer;    
   
  对应是array   of   PChar,我觉得  
   
  C里面有种调用方式是...,意思是说可以写入很多参数的那种,感觉params差不多。  
  LZ这样一试:  
  var  
      Buffer:   array   [0..10,   0..1024]   of   Char;  
  begin  
      //buffer赋值  
      PersonalizeCard   (no,   10,   @Buffer);  
  end;  
   
  dll弄不下来,不弄了。

楼上的有道理,不过后面要加stdcall;   external   dllname等,否则还是错误的.总之,那个参数是个指针就行了,至于怎样用,要看情况,输出和输入指针可有不同的处理  
 

谢谢大家的支持,根据大家的思路早上我又试了一次还是不行。  
  百思不的其解呀!  
   
  to:maozefa(阿发伯)   压栈方式已经检查过了stdcall。  
  三个参数都是入参。  
   
  不好意思,上面的下载地址过期了,下面是新的百分百好用。  
  http://blog.chinaunix.net/upfile/061201092335.rar

char   *   params[]等价char**   params  
  char*p   等价   pchar(delphi)  
 

谢谢大家的支持!  
  我开了一个空间把DLL   传上去了。地址http://free.ys168.com/?goodok   的“软件下载”目录下的dll.rar   文件。  
   
  希望高手出面解决这个问题

这个,还是用pointer就可以了  
   
  用的时候定义一个array   of   char   数组就可以了!

在参数前面加个var就行了

最好把array的参数定义成record来传

类型严格对应的DELPHI声明是  
      params:   PPChar;  
   
   
  定义成    
      params:   Array   of   PChar;   也可以的,  
  Array   of   PChar可以强制转换成PPChar不出问题,  
  但反过来转换不行的.  
   
   
  感觉楼主问题不在这儿.  
  看楼主的DLL   C声明中,并没有声明__stdcall,  
  那为什么DELPHI声明中要用stdcall?   DELPHI声明对应的应该是cdecl  
 

string是Pascal特有的类型,不能直接兼容PChar  
   
  char   *   params[]  
  看成一个PChar的数组,就是array   of   PChar  
   
  function   PersonalizeCard   (  
                      CardNumber:   Integer;  
                      nargs:   Integer;  
                      params:   PPChar  
                      ):   Integer;   stdcall;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      vParams:   array[0..1]   of   PChar;  
  begin  
      vParams[0]   :=   'Zswang';  
      vParams[1]   :=   '到此一游';  
      PersonalizeCard(1,   2,   @vParams[0]);  
  end;  
   
  你提供的Demo无法调试,缺少Mfc42d.dll、MSVCRTD.DLL  
  只有你自己调试了

关于array   of   char   与PPCHAR   类型转换,可以看下面代码验证其可行.  
  //---------------------------------------------------------------  
   
  procedure   test(params   :   ppchar);//这儿用的PPChar类型,严格对应char*   params[];  
  begin  
      ShowMessage(params^);  
      inc(params);  
      ShowMessage(params^);  
  end;  
   
  type  
      ttest2   =   procedure(params:   array   of   pchar);  
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      s:   array   of   pchar;  
      p:   ttest2;  
  begin  
      setlength(s,2);  
      s[0]   :=   '1234151';  
      s[1]   :=   'abc';  
      p   :=   ttest2(@test);//函数转换,四字节指针赋值而已.  
      p(s);   //参数使用array   of   ppchar   方式调用procedure   test  
  end;  
 

char   *   params[]在一般的C++编译器(Bcb、VC)是不能通过编译的,因为C++中不允许定义动态数组(C++的动态数组应该通过堆内存分配才行),但如果这样就不会错:char   *   params[]={“china”,“French”,“Japan”};  
  char   *   params[]的准确含义应该是动态字符指针数组,在delphi中与array   of   PChar等价。

谢谢大家帮忙!虽然现在还没有调通但问题应该不是参数定义的问题了。通过讨论对c与delphi的类型有了更多的认识。

ding.......

posted @ 2008-09-23 09:37 delphi2007 阅读(189) | 评论 (0)编辑 收藏

关于delphi如何调用用c写的*.h文件 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061130134905146.html
小弟刚刚学习delphi,刚刚接触到一个问题,就是要用delphi去调用开发环境中库里面的API函数(用C写的),请问如何将*.h引入到delphi中去,求各位大侠帮忙,万分感谢,如有可能给个实际的例子,再次感谢下

把.h文件自己翻译成pas文件吧。

必须翻译成pas单元,例子很多,典型的就是delphi源码的Windows.pas  
 

delphi是不能直接在project中使用C的h头文件的。  
   
  可以用一个叫c2pas.exe的小工具,将h文件,转为一个pas文件,再加入project即可  
   
  http://c2pas.sourceforge.net/  
  https://sourceforge.net/project/showfiles.php?group_id=50975  
  http://www.programmersheaven.com/download/4171/download.aspx  
 

用BCB可以转成pas文件

c2pas.exe这个软件我下了,可以将.c文件转换,是否可以将*.h文件也转换呢?  
  另外,转换完在加入PROJECT后,是不是就可以直接调用里面定义的函数了?谢谢了,急

c2pas.exe这个软件使用后生成的.pas文件和我们自己编写的貌似结构不一样,请告诉我下怎么做,谢谢啊,急啊~~~~~~~~~

posted @ 2008-09-23 09:37 delphi2007 阅读(260) | 评论 (0)编辑 收藏

好久没有来了,各位如何像迅雷那样定位并且浏览指定下载文件,谢了 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061130124136147.html
好久没有来了,各位如何像迅雷那样定位并且浏览指定的下载文件,谢了

猴子     性欲不高   不行啊`每人会回答的哦~~

posted @ 2008-09-23 09:37 delphi2007 阅读(143) | 评论 (0)编辑 收藏

关于CreateOleObject函数的调用问题(用友U86登陆界面调用) Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061129223145148.html
我用CreateOleObject调用COM控件,跟踪发现他在使用该函数时没有问题,当调用里面的函数时,第一次调试调用成功,再运行一次报计算溢出或下溢,不知道是什么原因。我用Import   Type   Libary安装该DLL无法得到该DLL中的类,下面是部分代码(我做的是用友的财务接口,这是调用登陆窗口出的错)  
   
   
  var        
      m_NetLog:olevariant;        
  begin        
      m_NetLog   :=   createoleobject('UFSoft.U8.Framework.Login.UI.clsLogin');        
   
      If   Not   m_NetLogin.login_2('DP')   Then   //显示登录界面   在这一句用过一次成功,到登陆窗口点取消后再调试调用,这一句报计算溢出或下溢错误  
            ShowMessage(m_NetLogin.ErrDescript)  
      Else  
            ShowMessage('login   ok');  
  end;
posted @ 2008-09-23 09:37 delphi2007 阅读(266) | 评论 (0)编辑 收藏

日志钩子能分辨不同编辑控件中输入的字符吗? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061129112134149.html
我想把不同控件输入的字符分别记录,日志钩子的参数中是否包含了不同控件的相关信息(如句柄)?  
  如果日志钩子不能实现这个功能,那如何才能达到上述目的?
posted @ 2008-09-23 09:37 delphi2007 阅读(118) | 评论 (0)编辑 收藏

Delphi可以写USB驱动程序吗? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061129092535150.html
Delphi可以写USB设备的驱动吗,  
  需要哪些东西写,  
 

Delphi写驱动只能通过DDDK(Delphi   NT   DDK),  
  由于是非官方的,对于复杂驱动,不建议使用(写Rootkit类的还行)  
  其他的还是老实用C写DDK吧  
   
  另外DDK需要很多系统核心的知识,和普通程序差别很大的

如果用C写,  
  需要哪些方面的知识?  
  多谢你,

DDK知识~Ring0~系统核心~NT   Native   API  
  WDM架构  
   
  如果你是初学,我只能告诉你,驱动开发远比桌面~数据库都难

建议先看看汇编

有点怕怕,  
  听您这么说!

绝对能写,但是建议你还是用C或者汇编写

posted @ 2008-09-23 09:37 delphi2007 阅读(492) | 评论 (0)编辑 收藏

delphi问题,运行时都弹出cpu窗口大家帮帮忙 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208165003101.html
我机子上的DElphi每次在运行的时候,不管是什么项目就是空项目也弹出,也不能调试了。好烦人,   我重新装了一次,还是不行,大家来帮帮忙阿  
  我刚来这里
posted @ 2008-09-23 09:36 delphi2007 阅读(284) | 评论 (0)编辑 收藏

关于“区域与语言选项”的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208144832102.html
请教高手如何获取操作系统“区域与语言选项”->   "区域选项"->"标准和格式"和"位置"中的下列列表中是否为“中国”?多谢!

Waiting...

可以的.   用WMI来查询.

稍后给你代码,马上要忙公务了

在注冊表里可以查得到  
  簡體系統的值是8040(好象是。記得不太清了。)

系统全局变量  
  SysLocale.PriLangID=LANG_CHINESE

如果你是想知道,是否该用中文显示  
  用   GetOEMCP();  
   
   
      case   GetOEMCP()   of  
          936:  
              begin  
                  //   GBK;  
              end;  
          950:  
              begin  
                  //   BIG5  
              end;  
          else  
              begin  
                  //   English  
              end;  
      end;  
 

posted @ 2008-09-23 09:36 delphi2007 阅读(187) | 评论 (0)编辑 收藏

DLL里面的共享数据段怎么写? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208112551103.html
DLL里面的共享数据段怎么写?   用delphi,谢谢!

怎么没人回啊!?

内存映射文件,Delphi好似没有共享段的声明。

楼上,不是吧,我现在的情况是在调用dll之前,先要向dll里传一个值,有什么方案可以解决?

仅仅是传值的话,就用正常的传值方法呗。

如果仅仅是传值,就不必要大动干戈了吧。  
  共享数据段是用来多个进程同时调用一个DLL时,做进程间通讯用途的。

我可以给你参考下我以前写过的关于   dll共享一个整数的例子     你可以参考下    
  library   DLLMem;  
   
  {   Important   note   about   DLL   memory   management:   ShareMem   must   be   the  
      first   unit   in   your   library's   USES   clause   AND   your   project's   (select  
      Project-View   Source)   USES   clause   if   your   DLL   exports   any   procedures   or  
      functions   that   pass   strings   as   parameters   or   function   results.   This  
      applies   to   all   strings   passed   to   and   from   your   DLL--even   those   that  
      are   nested   in   records   and   classes.   ShareMem   is   the   interface   unit   to  
      the   BORLNDMM.DLL   shared   memory   manager,   which   must   be   deployed   along  
      with   your   DLL.   To   avoid   using   BORLNDMM.DLL,   pass   string   information  
      using   PChar   or   ShortString   parameters.   }  
   
  uses  
      windows,  
      SysUtils,  
      Classes,  
      SHareMem   in   'SHareMem.pas';  
  exports  
      setsharedata,getsharedata;   //提供接口  
   
  {$R   *.res}  
   
  begin                 //程序从这里进入  
          DllProc:=@DllEntrypoint;  
          DllEntryPoint(DLL_PROCESS_ATTACH);  
   
  end.  
  unit   SHareMem;  
   
   
  interface  
  uses  
  SysUtils,windows;  
  type  
          Tsharedata=integer;  
          Psharedata=^Tsharedata;  
  const  
        sharedata_size=sizeof(Tsharedata);  
        mapfilenamw='DLLMem';  
  var  
        maphandle:Thandle;  
        sharedata:psharedata;  
        procedure   opensharedata;  
        procedure   closesharedata;  
        procedure     setsharedata(value:Tsharedata);stdcall;  
        function   getsharedata:Tsharedata;stdcall;  
        procedure   DllEntrypoint   (reason:dword);  
  implementation  
   
        procedure   opensharedata;     //把文件映射到内存  
        begin  
            maphandle:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,sharedata_size,mapfilenamw);  
            //if   maphandle=0   then   Raise   Exception('创建公有数据的buf不成功');  
            sharedata:=mapviewoffile(maphandle,File_Map_Write,0,0,sharedata_size);  
        end   ;  
        procedure   closesharedata;       //取消内存映射文件  
        begin  
              UnMapViewOfFile(sharedata);  
              closehandle(maphandle);  
        end;  
        procedure     setsharedata(value:Tsharedata);stdcall;   //从程序中读入直到文件中  
        begin  
                sharedata^:=value;  
   
        end;  
        function   getsharedata:Tsharedata;stdcall;     //从文件中取出直  
        begin  
              result:=sharedata^;  
        end;  
        procedure   DllEntrypoint   (reason:dword);   //入口函数,目的是把文件映射到内存或取消内存影射文件  
        begin  
              case   reason   of  
              Dll_PROCESS_ATTACH:opensharedata;  
              Dll_PROCESS_DETACH:closesharedata;  
              end;  
        end;  
   
  end.  
 

如果你看得满意就给我点分吧  
 

TMapFile

posted @ 2008-09-23 09:36 delphi2007 阅读(643) | 评论 (0)编辑 收藏

DLL中的Forms问题,大家来看一下啊!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208104302104.html
我在窗口的panel中调用了一个dll文件中的窗口,调用是一切正常的,但要加  
  Panel1.updatecontrolstate窗口才能正常的显示出来。如果我的dll窗体中用了pagecontrol,问题就出现了,当按上面的tab切换时,   panel的显示不会发生变化,除非再次调用Panel1.updatecontrolstate。   关键是这个语句怎么加,加在什么地方?大家可以尝试一下。  
   
 

你跟踪以下就知道了,Panel1.updatecontrolstate,实际上是给vcl发送消息,  
  updatecontrolstate发送的是cm_base+25;  
   
  所以要么你在本地窗口切换的时候sendmessage,要么在dll窗口中的onpaint事件里  
  写入.  
   
  //不知道对不对,楼主看看

我的子窗口代码:  
  function   CreateDLLForm(myAPP:TApplication;myScr:TScreen):TForm;  
  begin  
    Application:=myApp;  
    Screen:=myScr;  
    application.CreateForm(TfrmDllForm,frmDllForm);  
    result:=frmDllForm;  
  end;  
   
  我的主窗口代码:  
  myHandle:=LoadLibrary('dllproj.dll');  
  if   myHandle<>0   then  
      begin  
          @myProc:=GetProcAddress(myHandle,'CreateDLLForm');  
          if   assigned(myProc)   then  
                begin  
                    DLLForm:=myProc(Application,Screen);  
                    DllForm.Parent:=Panel1;  
                    DLLform.Show;  
                    Panel1.UpdateControlState;  
                end;  
      end;  
   
  我尝试过了,dll窗口的pagecontrol发生变化的时候,主窗口好像无法感知。

可以通过发消息的办法和主窗体通信!  
  SENDMESSAGE(APPLICATION。MAINFORM。HANDLE,WM-XXXX,XX,XX);  
  然后主窗体在对应的消息处理函数里面执行相应的操作!

前提是DLL要用主程序的APPLICATION

带包编译(vcl70.bpl,   rtl70.bpl)

to:newfang(传说中的MIC)  
  我本来想在dll窗口的pagecontrolchange中用sendmessage,结果,主程序根本就没收到,问题确实如你所说,主程序的application句柄得不到啊,所以这个发消息的动作写在什么地方还没研究出来

另外,我处理消息的过程是在主form中定义的,好像消息传给应用程序也不行,要传给form的句柄。

 
  在创建Dllform的时候把applicaton.handle作为DLLForm单元中的全局变量。  
  (或者直接传递panel1的handle);这样就可以给application或者panel1发送消息直接通信了。  
   
  消息在pagecontrol的onchange事件里发送即可。

现在的问题变成了DLL子窗口发消息时怎样知道主窗口的句柄,不是应用程序的,  
 

posted @ 2008-09-23 09:36 delphi2007 阅读(289) | 评论 (0)编辑 收藏

显示分辨率问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207231528105.html
如何列举当前显示器所能支持的分辨率及刷新率   ?

//沙发先  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
    i               :   Integer;  
    DevMode   :   TDevMode;  
  begin  
    i:=0;  
    while   EnumDisplaySettings(nil,i,DevMode)   do   begin  
        with   Devmode   do  
          ListBox1.Items.Add  
            (Format('%dx%d   %d   Colors',  
            [dmPelsWidth,dmPelsHeight,1   shl   dmBitsperPel]));  
        Inc(i);  
    end;  
  end;  
   
 

//刷新率为dmDisplayFrequency    
  procedure   TForm1.FormCreate(Sender:   TObject);  
  var  
      I:   Integer;  
      vDevMode:   TDevMode;  
  begin  
      I   :=   0;  
      while   EnumDisplaySettings(nil,   I,   vDevMode)   do  
      begin  
          ListBox1.Items.Add(Format('%dx%d   %d   Colors   %d   Hz',   [  
              vDevMode.dmPelsWidth,   //   宽  
              vDevMode.dmPelsHeight,   //   高  
              1   shl   vDevMode.dmBitsperPel,   //   颜色  
              vDevMode.dmDisplayFrequency   //   刷新率  
          ]));  
          Inc(I);  
      end;  
  end;  
 

答案都出来了  
   
   
  ^_^,看样来晚了,呵呵

谢谢。

posted @ 2008-09-23 09:36 delphi2007 阅读(96) | 评论 (0)编辑 收藏

NT/XP 下如何知道系统从一开始起动总共运行了多少进程? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207185040106.html
在PrcView中有这样的功能:“  
   
  NT/XP   下如何知道系统从一开始起动总共运行了多少进程?”  
   
  自己分析了一个,原来是在用户的目录下(‘C:\Documents   and   Settings\loxu’)有个“ntuser.dat”文件是PRCVIEW中用到的,但不知道怎么打开,其格式又是什么呢。。。。。。。。。。急!  
   
 

你这个“总共运行了多少进程”指的是什么呢??  
   
 

是指,系统从一开始启动到完全启动到WIN界面。。。所有运行的程序。。

posted @ 2008-09-23 09:36 delphi2007 阅读(90) | 评论 (0)编辑 收藏

关于线程插入函数如何用的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207182656107.html
我现在掌握了不用dll也能代码注入的技术  
   
  就是有一个inject函数   把要插入进程的句柄和要插入的函数名前加一个"@"  
  当作参数传递过去就行了,如下:  
  procedure   Inject(ProcessHandle:   longword;   EntryPoint:   pointer);  
   
  本来是很好用的  
   
  但是我这里有一份带窗体的程序的代码     想让它插到某个pid里  
  原来的dpr文件是这样的:  
   
  program   server;  
   
  uses  
        Forms,  
      mainserve   in   'mainserve.pas'   {ServerForm};  
   
  begin  
      Application.Initialize;  
      Application.CreateForm(TServerForm,   ServerForm);  
      Application.Run;  
  end.  
   
  我改成了:  
   
  program   server;  
   
  uses  
        Forms,windows,  
      mainserve   in   'mainserve.pas'   {ServerForm};  
   
  procedure   main();  
   
  begin  
      Application.Initialize;  
      Application.CreateForm(TServerForm,   ServerForm);  
      Application.Run;  
  end;  
   
   
  var  
  ProcessHandle,   PID:   longword;  
   
  begin  
   
  PID:=1252;//当前我运行的某个IE的PID  
  ProcessHandle   :=   OpenProcess(PROCESS_ALL_ACCESS,   False,   PID);//打开进程  
  Inject(ProcessHandle,   @Main);//插入代码  
  CloseHandle(ProcessHandle);//关闭线程句柄  
  end.  
   
   
   
  那个mainserve.pas没作改动  
   
  编译没错       一运行就出错说   某个内存引用的某个内存不能为writen   结果IE就关了  
   
   
  我的改动并没错呀??  
   
  我怀疑这个错误和程序里有窗体有关       但是用到了timer     是不是就不能去掉窗体??  
   
  我的怀疑正确吗????  
 

说明一下       我修改时已把inject的定义加上了       只是上面的代码没体现出来

不用DLL   注入   的方法我也想知道哦..  
  aphex的不用DLL远程注入是  
  GetWindowThreadProcessId(FindWindow('Shell_TrayWnd',   nil),   @Pid);  
  //获取Exp进程的PID码,Shell_TrayWnd为类名,相关的需用SPY++来查看  
   
  ProcessHandle   :=   OpenProcess(PROCESS_ALL_ACCESS,   False,   Pid);   //打开进程  
   
  hModule   :=   Pointer(GetModuleHandle(nil));  
  //这里得到的值为一个返回一个指针型变量,指向内容包括自身映像的基址和长度  
   
  Extent   :=   PImageOptionalHeader(Pointer(integer(hModule)   +   PImageDosHeader(hModule)._lfanew   +   SizeOf(dword)   +   SizeOf(TImageFileHeader))).SizeOfImage;  
  //得到内存映像的长度  
   
  VirtualFreeEx(ProcessHandle,   hModule,   0,   MEM_RELEASE);  
  //在Exp进程的内存范围内分配一个足够长度的内存  
   
  hModule_News   :=   VirtualAllocEx(ProcessHandle,   hModule,   Extent,   MEM_COMMIT   or   MEM_RESERVE,   PAGE_EXECUTE_READWRITE);  
  //确定起始基址和内存映像基址的位置  
   
  WriteProcessMemory(ProcessHandle,   hModule_News,   hModule,   Extent,   Size);  
  //确定上面各项数据后,这里开始进行操作  
   
  CreateRemoteThread(ProcessHandle,   nil,   0,   @Download,   hModule,   0,   ThreadId);  
  //建立远程线程,至此注入过程完成  
   
  CloseHandle(ProcessHandle);  
   
   
  偶把我的程序定义成个过程   然后用他这样的方法去注入.   结果跟LX一样...    
  高手详细说下吧..  
 

楼上的是同道中人  
   
  实际上我们插入一个小过程可以成功     哪怕这个过程调用其它自定义的过程  
   
  但是把一个程序的原代码里dpr文件里的主程序定义为过程   再插入这个过程就会报错  
   
  因为什么??

请高手现身

关注

请高手献身

请高手献身

人工置顶

还没有人来么?  
  我现在也有段代码   他定义的过程注入没问题..我自己写个过程   注入都出错.     郁闷

人工置顶

人工置顶

posted @ 2008-09-23 09:36 delphi2007 阅读(112) | 评论 (0)编辑 收藏

动态库调用问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207153631108.html
在DELPHI中调用时用  
    Function   MyMax   (   X   ,   Y   :   integer   )   :   integer   ;   stdcall   ;   external   'Project1.dll'   ;shenming  
   
  有谁知道在VC中怎样调用

typedef       int   WINAPI(T_MyMax)(int   i,int   j);       //声明函数类型        
   
  HINSTANCE       gLib=NULL;       //DLL句柄        
  T_MyMax           MyMax;               //声明函数指针  
   
   
  gLib=LoadLibrary("Project1");   //load   dll          
           
  MyMax=(T_MyMax)GetProcAddress(gLib,"MyMax");     //获取函数的地址        
   
  MyMax(1,2);//这样调用  
 

哦,那个函数类型可能不对,要不这样  
   
  typedef   int   WINAPI   (*T_MyMax)(int   i,int   j);   //加个*  
  typedef   int   (WINAPI   *T_MyMax)(int   i,int   j);   //或者winapi放在括号中,  
   
  呵呵,记不太清了

posted @ 2008-09-23 09:36 delphi2007 阅读(141) | 评论 (0)编辑 收藏

关于读exe文件问题! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207141713109.html
现我要实现这样的操作:写一个小程序,功能是:要读自己生成的exe文件的尾部几行?(exe文件的尾部这几行是另外的程序添加的),请问如何实现?
posted @ 2008-09-23 09:36 delphi2007 阅读(67) | 评论 (0)编辑 收藏

求api发E-mail的代码? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207132645110.html
求api发E-mail的代码?

http://my.houhai.com/blog.php?do=showone&tid=372

赶紧揭帖,给分

呵~~

强烈鄙视问题解决后不结贴的人!  
  强烈鄙视技术问题解决后把贴子转移到非技术区的人!  
  鄙视你们!  
   
  http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659

posted @ 2008-09-23 09:36 delphi2007 阅读(115) | 评论 (0)编辑 收藏

关于注册表的问题? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207112527111.html
是不是只要再标准用户下(或非administrator)任何程序(指自己编的)都不能对注册表进行操做(包括读写),即使是用api也不行.是不是这样的?谢谢啦

自己顶一下

不是的

但是我发现用api无法修改注册表,比如用RegSetvalueEx()就无法修改(在标准用户下),只用在超级用户下才行。

偶没有直接用API读写过注册表....  
  一直是用delphi里封装好的Tregistry类.....

用tregistry类也是一样的。

不是啊  
      什么用户都可以操作注册表的,除了受限用户

不会吧!(不过我用的电脑C盘是NTFS格式的,是windows2000)  
  你试试编个成序修改注册表的某一键值,在标准用户下运行看看有没有用。

普通用户只能操作HKEY_CURRENT_USER下的值,可以读写。   其他键值,只能读。

posted @ 2008-09-23 09:36 delphi2007 阅读(116) | 评论 (0)编辑 收藏

twebbrowser无法屏蔽flash的右键?? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207070837112.html
我试过很多方法,   HOOK是可以的,但会出现其它问题,例如自定菜单无法响应点击.  
   
  http://www.delphibbs.com/keylife/iblog_show.asp?xid=10961  
  可以监控到其它HTML-tag的消息,但对flash无效??   我想获取flash的点击事件(无URL链接所以用不到其它方法)    
 

HOOK是因为跨进程而不得不使用的方法,  
  TWEBBROWSER是在你自己的应用程序进程里啊!  
  TWERBROWSER所有响应MOUSE事件都是通过应用程序的消息传给它的,  
  哪用得着那些麻烦的方法,  
  你筛选一下应用程序的右键消息就行了.  
 

是activeform

哦...你是ACTIVEFORM上面加FLASH??  
 

csdn在凌晨的时候经常都不能发贴(超时)   ,真奇怪.  
   
  http://community.csdn.net/Expert/topic/5212/5212367.xml?temp=.210232  
  对啊.    
   
  http://www.gzyd.net/lael/w.rar  
  //   MSHTMLEvents   {   generated   by   EventSinkImp   utility   }    
  现在问题是如果用   onclick   事件,对   flash   无效,所以只好用   mousedown(发生在onclick事件前),   但它没有button参数,不知点左键还是右键,   所以左右键都会出现菜单(代码里先去掉注释).  
   
  mousedown   事件能在flash上面发生,这时显示一个菜单就可以屏掉flash的菜单了,   怎么区分左右键.   TMouse区分不了吗?

mark

1,mousedown事件TMouseButton类型的参数,它是个枚举型,可以用来判断是左键还是右键按下.  
      TMouseButton   =   (mbLeft,   mbRight,   mbMiddle);  
   
 

flash   控件可以简单地取消右键

MSHTMLEvents   的mousedown事件只有一个参数   sender:TObject   ,   大家可以先看看例子.  
  跟普通控件的事件是不同的

cangwu_lee(小橙子)   :   我不是用控件,   我是在webbrowser里显示的flash.   右键菜单的关于是不能简单取消的

搞定了  
  终于看明白事件了  
   
      EventObj   :=   (TMSHTMLHTMLDocumentEvents(Sender).Source   as  
                                IHTMLDocument2).parentWindow.event;  
      EventObj.button//这个是鼠标

mark

posted @ 2008-09-23 09:36 delphi2007 阅读(321) | 评论 (0)编辑 收藏

一个派生于 TCollectionItem 类 的 TbsButtonBarItem 类 然后 怎么给 TbsButtonBarItem 增加一个 onMouseDown 事件 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207005242113.html
TbsButtonBarItem   一个皮肤控件的类,只有   oclick   事件。   我想   给它增加一个  
  OnmouseDown   事件    
   
  我派生了一个TbsButtonBarItem   类   TbsBarItem   然后加入了  
   
  消息   捕捉过程  
  procedure   WMLBUTTONDOWN(var   Message:   TMessage);   message   WM_LBUTTONDOWN;  
   
  为什么   这个  
   
  procedure   TbsBarIte.WMLBUTTONDOWN(var   Message:   TMessage);  
  begin  
    showmessage('test');     ///这个为什么不发生呢???  
    NowIndex:=self.index;  
  end;  
   
  为什么捕捉不到消息呢,   点击控件的时候  
   
  end;  
   
  这个控件来自   TbsSkinButtonsBar   ,TbsButtonBarItems   类的   子类    
  我想在在右点   这个控件的时候找到它的   index      
  可是没有   OnMouseDown   这个事件   ,   我事件扑捉   怎么没有反映呢,,?!?扑捉不到消息?  
 

TCollectionItem及其派生类不是控件类,无法直接接受消息,所以不能简单地添加一个消息,必须首先得到所属控件的消息过程才行,既然TbsButtonBarItem类有一个OnClick事件,它必然截留了它所属的控件的消息过程,参照其方法实现你的事件!

posted @ 2008-09-23 09:36 delphi2007 阅读(222) | 评论 (0)编辑 收藏

请问如何关闭正在打开的文件。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207003028114.html
请问如何关闭正在打开的文件。这个文件是其他程序打开的,现在检测到这个文件已经打开,需要强行的将他关闭。如何操作?

你如何检测到的?    
  如果是自己写的两个程序   应该可以同时打开同一个文件的

posted @ 2008-09-23 09:36 delphi2007 阅读(247) | 评论 (0)编辑 收藏

关于视频网络传输的 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207002859115.html
第一次用delphi  
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,vfw,jpeg,   ExtCtrls,   StdCtrls,   IdBaseComponent,   IdComponent,  
      IdUDPBase,   IdUDPClient;  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          Button2:   TButton;  
          Panel1:   TPanel;  
          IdUDPClient1:   TIdUDPClient;  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
          CapWnd:THandle;   //定义捕捉窗句柄  
          CapParms:TcaptureParms;   //用于设置设备属性的结构变量  
          BMPINFO:TBitmapInfo;   //BMP图像信息  
   
  implementation  
   
  {$R   *.dfm}  
  function   FrameCallBack(hWnd:   HWND;   lpVHdr:   PVIDEOHDR):   LongInt;stdcall;  
    var  
          hd:Thandle;  
          jpg:TJpegImage;  
          memStream   :TMemoryStream;  
          Bitmap:TBitmap;  
          begin   //将数据显在Image,  
          Bitmap:=TBitmap.Create;  
          Bitmap.Width   :=BMPINFO.bmiHeader.biWidth;  
          //   New   size   of   Bitmap  
          Bitmap.Height:=BMPINFO.bmiHeader.biHeight;  
          hd:=   DrawDibOpen;  
          DrawDibDraw(hd,Bitmap.Canvas.Handle,0,0,BMPINFO.bmiHeader.biwidth,BMPINFO.bmiheader.biheight,  
          @BMPINFO.bmiHeader,lpVHdr.lpData,0,0,BMPINFO.bmiHeader.biWidth,BMPINFO.bmiHeader.biheight,0);  
          DrawDibClose(hd);  
          //发送数据  
          memStream   :=   TMemoryStream.Create;  
          jpg   :=   TJpegImage.Create;  
          jpg.Assign(Bitmap);  
          jpg.CompressionQuality   :=   10;  
          //jpg压缩质量  
          jpg.JPEGNeeded;  
          jpg.Compress;  
          jpg.SaveToStream(memStream);  
          jpg.Free;  
          //因为UDP数据包有大小限制,这里如果超出部分,就没有传输,完全可以发几次发出去  
          Form1.IdUDPClient1.BroadcastEnabled:=true;//用广播功能  
          if   memStream.Size>Form1.IdUDPClient1.BufferSize   then  
          //向192.168.0.X网段广播,端口   9001  
          Form1.IdUDPClient1.SendBuffer('192.168.0.255',9001,memStream.Memory^,Form1.IdUDPClient1.BufferSize)  
          else  
          Form1.IdUDPClient1.SendBuffer('192.168.0.255',9001,memStream.Memory^,memStream.Size);  
          memStream.Free;  
          Bitmap.Free;  
          end;  
   
   
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
    CapWnd   :=   capCreateCaptureWindow('我的窗口',   WS_VISIBLE   or   WS_CHILD,//窗口样式  
          0,   //X坐标  
          0,   //Y坐标  
          panel1.Width,   //窗口宽  
          panel1.Height,   //窗口高  
          panel1.handle,   //窗口句柄  
          0);   //通常为0  
          if   CapWnd   =   0   then   exit;   //定义帧捕捉回调函数  
          CapSetCallbackOnFrame(CapWnd,FrameCallBack);  
          CapParms.dwRequestMicroSecPerFrame:=1;  
          CapParms.fLimitEnabled:=FALSE;  
          CapParms.fCaptureAudio:=FALSE;  
          CapParms.fMCIControl:=FALSE;  
          CapParms.fYield:=TRUE;  
          CapParms.vKeyAbort:=VK_ESCAPE;  
          CapParms.fAbortLeftMouse:=False;  
          CapParms.fAbortRightMouse:=FALSE;   //让设置生效  
          CapCaptureSetSetup(capWnd,@CapParms,sizeof(TCAPTUREPARMS));  
          CapPreviewRate(capWnd,33);   //设置预览视频的频率  
          CapCaptureSequenceNoFile(capWnd);   //如果要捕捉视频流,则要使用函数来指定不生成文件,不然会自动生成AVI文件  
          CapDriverConnect(CapWnd,0);   //连接摄像头设备,第二个参数是个序号,当系统中装有多个显示驱动程序时,其值分别依次为0到总个数如果有多个摄像头,那么就是0->1->2   capGetVideoFormat(capWnd,   @BMPINFO,sizeof(TBitmapInfo));   //取得视频图像数据头  
          CapPreviewScale(capWnd,TRUE);   //是否缩放  
          CapOverlay(capWnd,true);   //指定是否使用叠加模式,true为使用,否则为false   CapPreview(capWnd,true);end;procedure   TForm1.Button2Click(Sender:   TObject);  
          begin   capCaptureAbort(CapWnd);   //停止捕捉  
          capDriverDisconnect(CapWnd);   //将捕捉窗同驱动器断开  
          end;  
  end;  
  编译出错如下:  
   
  [警告]   Unit1.pas(66):   Return   value   of   function   'FrameCallBack'   might   be   undefined  
  [错误]   Unit1.pas(80):   Incompatible   types:   'Cardinal'   and   'Integer'  
  [错误]   Unit1.pas(101):   Declaration   expected   but   end   of   file   found  
  [致命错误]   Project1.dpr(6):   Could   not   compile   used   unit   'Unit1.pas'  
   
  能帮改改吗!

TcaptureParms   这个结构变量哪来的   你有无自己定义  
   
  你用的别人封装好的控件   有没有把厂方提供DLL安装啊      
  ActiveX控件有无把环境变量加载进去   有无安装OCX控件

这个不是控件  
  是microsoft   提供的video   for   windows     ,  
  即vfw.pas.  
  TcaptureParms   结构变量来自   vfw.pas  
  而且用TcaptureParms   CapParms   编译也是通过的,  
   
   
  因为在bcb中   #include   vfw.h  
 

VFW不好用的  
  都淘汰的  
  现在是DirectShow的  
   
  一般用TCP外加速度控制,效果不错~  
  UDP太麻烦的

posted @ 2008-09-23 09:36 delphi2007 阅读(248) | 评论 (0)编辑 收藏

软件项目外包 (一起上搜网)http//www.173so.com/softepiboly.php Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061206194050116.html
软件项目外包   (一起上搜网)http//www.173so.com/softepiboly.php
posted @ 2008-09-23 09:36 delphi2007 阅读(126) | 评论 (0)编辑 收藏

腾讯QQ, MsgEx.db 格式 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061206182856117.html
QQ消息库文件   MsgEx.db   58.2M,就算我删除了很多消息,该文件还是不变小,似乎只是对消息标记为删除了。有没有工具可以减小该文件的体积?

试试先导出所有数据,删除MsgEx.db   ,然后进行导入操作。  
  做试验前先备份好MsgEx.db。

曾经有很多陌生人与我有大量的聊天记录,现在已经不在我的好友与陌生人名单中。QQ的导出消息功能,不会导出这些人的聊天记录,而只能导出名单中存在的。如果删除MsgEx.db,那么这些隐藏的消息将会丢失。

up

没办法,TX自己格式的DB  
  没提供压缩  
  要自己导出,导入来压缩

posted @ 2008-09-23 09:36 delphi2007 阅读(380) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 26 27 28 29 30 31 32 33 34