delphi2007 教程

delphi2007 教程

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

#

关于TdxTreeList控件中如何判断点CHECK标题是否已经选中或取消自己的问题? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225101425137.html
在TdxTreeList控件中我增加了一个TdxTreeListCheckColumn,但是在点标题事件中判断是否选中的时候老是TRUE,代码如下:  
  procedure   TForm1.coIfCheckedToggleClick(Sender:   TObject;  
      const   Text:   String;   State:   TdxCheckBoxState);  
  var  
      lcNode:   TdxTreeListNode;  
      lbSelect:   Boolean;  
      begin  
        lcNode   :=   dxTreeList.FocusedNode;  
        if   Assigned(lcNode)   then  
        begin  
            lbSelect   :=   lcNode.Values[coIfChecked.Index];  
            if   lbSelect   then  
          showmessage('true')  
        else   showmessage('false');  
      end;  
  end;
posted @ 2008-09-19 13:43 delphi2007 阅读(525) | 评论 (0)编辑 收藏

WebBrowser怎么在BeforeNavigate2获得完整的URL VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225094005138.html
我的url地址类似http://www.my.com/isis/a.htm?args=abc  
  在WebBrowserBeforeNavigate2   中参数传入的URL只有http://www.my.com/isis/a.htm这一段,?号后后面的无法获得,我要用不同的参数区分不同的地址,请问哪位高手知道怎么获得http://www.my.com/isis/a.htm?args=abc这个完整的URL地址吗  
  我要在BeforeNavigate2事件获得这个url然后调用不同的程序。

//可以得到这个URL  
  //你是怎么测试的?  
   
  procedure   TForm1.WebBrowser1BeforeNavigate2(Sender:   TObject;  
      const   pDisp:   IDispatch;   var   URL,   Flags,   TargetFrameName,   PostData,  
      Headers:   OleVariant;   var   Cancel:   WordBool);  
  begin  
      Caption   :=   URL  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      WebBrowser1.Navigate(http://www.my.com/isis/a.htm?args=abc');  
  end;  
 

这样是可以,如果你装载一个叫index.htm的页面,然后这个页面中有这样一个连接,你点击的时候就获得不了

我需要用页面做一个导航,URL是一个页面中的连接,不是用WebBrowser的Navigate方法发出的

use   linkes   to   javascript   functions  
  http://www.delphidabbler.com/articles?article=22&part=3

需要拦截的url一半有一定的规则,比如包含插件名http://a/a.dll?cccc  
  先定义一个类变量   string   f_CurrStatusText,   在WebBrowserStatusTextChange中给它赋值  
  然后在WebBrowserBeforeNavigate2中使用f_CurrStatusText处理,不使用原来的URL即可

posted @ 2008-09-19 13:43 delphi2007 阅读(2008) | 评论 (0)编辑 收藏

帮帮看看错在哪里了~~~~~~~~~~~~` VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225092214139.html
adoquery3.SQL.Add('select   *   from   daa   a,oil   b   where     b.年月='''+trim(f_ny.combobox1.text)+'''   and   a.mz   =c.名称   and   c.含水>0.4   ');  
  daa表  
  mc             yczmc      
  name1       nn  
   
  oil表  
  名称           年月               含水  
  name1         20061131       0.501  
   
  我就是查询   某一年月中含水   大于0.4   的jh   yczmc  
  查询的结果含有的   字段     :jh       yxzmc       含水  
   
  我象上面那样写查询结果怎么不对啊

c.名称,C是什么?

是不是需要把C改成B

哦   刚刚写错了   啊    
  把   c都改成   b

呵呵,有理,上面都没有c对应的表,你的c哪里来的啊??  
  c改成b应该是对的

jh字段这两个表里看不到呀,你是不是少关联了个表呀

哦   忘记说了啊    
  那个是我新创建的   表(字段名字改了一下)  
  他就是     mc      
  mc       yxzmc       含水

SQLSTR:='select   a.*,b,b.*   from   daa   a,oil   b   where   a.mc=b.mc   and     b.年月='''+trim(f_ny.combobox1.text)+'''   and   a.mz   =c.名称   and   c.含水>0.4   '  
  你当中的C就不清楚是什么了,总之你的数据库设计的问题大大呀

up

哦   对不起了   各位写的时候   没有仔细看看啊

adoquery3.SQL.Add('select   mc,       yxzmc,       含水   from   daa   a,oil   b   where     b.年月='''+trim(f_ny.combobox1.text)+'''   and   a.mz   =b.名称   and   b.含水>0.4   ');

adoquery3.SQL.Add('select   *   from   daa   a,oil   b   where     b.年月='''+trim(f_ny.combobox1.text)+'''   and   a.mz   =b.名称   and   b.含水>0.4   ');  
   
  mc     yczmc       含水

无天   那你那样我也有试过    
  但   结果总是不对  
  含水   下面的值总是比   0.4   小而且都是一样   的

adoquery3.SQL.Add('select   mc,       yxzmc,       含水   from   daa   a,oil   b   where     b.年月='''+trim(f_ny.combobox1.text)+'''   and   a.mc   =b.名称   and   b.含水>0.4   ');  
  把mz改成mc

无语,见鬼了。   仔细检查一下表结构吧,估计是表格结构的问题。

我的是dbf表  
  看查询结果   跟本不是选择的那个年月下的结果~~~  
  还有就是   俩个表关联的也就是   mc和名称     字段了啊   其他的字段没有相同的值,

建议字段名字不要用中文。

posted @ 2008-09-19 13:43 delphi2007 阅读(144) | 评论 (0)编辑 收藏

文件流不能读到动态数组?. VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226161917101.html
为什么文件流不能读到动态数组?   代码以下  
  procedure   tform1.ComeBackData();  
          var   filespath:string;  
              tFile:TFileStream;  
              tsize,i:longint;  
              tempArr:array   of   byte;  
   
          begin  
                    if   openDialog1.Execute   then  
                        filespath:=openDialog1.FileName   ;   //取得打开的文件名  
                    if   filespath=''   then  
                        exit;  
                    tFile:=TFileStream.Create(filespath,fmOpenRead);       //   创建二进制文件  
                    tsize:=tfile.Size;   //取得总的长度  
   
                    SetLength(tempArr,tsize);     //计算动态数组的长度  
                    //分配动态数组的空间  
                    GetMem(temparr,   tsize   *   SizeOf(byte));  
   
                  tfile.Read(temparr,tsize);  
   
                    FreeMem(temparr,   tsize*SizeOf(byte));  
          end;  
   
  以上代码文件流不能读到动态数组,但可以读到静态数组里,请问为什么?

procedure   tform1.ComeBackData();  
          var   filespath:string;  
              tFile:TFileStream;  
              tsize,i:longint;  
              tempArr:array   of   byte;  
   
          begin  
                    if   openDialog1.Execute   then  
                        filespath:=openDialog1.FileName   ;   //取得打开的文件名  
                    if   filespath=''   then  
                        exit;  
                    tFile:=TFileStream.Create(filespath,fmOpenRead);       //   创建二进制文件  
                    tsize:=tfile.Size;   //取得总的长度  
   
                    SetLength(tempArr,tsize);     //设置(而不是计算)动态数组的长度  
                    tfile.Read(tempArr[0],tsize);  
          end;

//分配动态数组的空间  
                    GetMem(temparr,   tsize   *   SizeOf(byte));  
   
  这个不需要的

procedure   tform1.ComeBackData();  
          var   filespath:string;  
              tFile:TFileStream;  
              tsize,i:longint;  
              tempArr:array   of   byte;  
   
          begin  
                    if   openDialog1.Execute   then  
                        filespath:=openDialog1.FileName   ;   //取得打开的文件名  
                    if   filespath=''   then  
                        exit;  
                    tFile:=TFileStream.Create(filespath,fmOpenRead);       //   创建二进制文件  
                    tsize:=tfile.Size;   //取得总的长度  
   
                    SetLength(tempArr,tsize);     //计算动态数组的长度  
                    //分配动态数组的空间  
                    //GetMem(temparr,   tsize   *   SizeOf(byte));  
                    tFile.Position:=0;  
                  tfile.Read(temparr[0],tsize);  
   
                  //   FreeMem(temparr,   tsize*SizeOf(byte));  
          end;  
 

posted @ 2008-09-19 13:42 delphi2007 阅读(309) | 评论 (0)编辑 收藏

如何在 listbox中每行中添加图标 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226161818102.html
如何在   listbox中每行中添加图标

procedure   TfrmMain.lbLanmuDrawItem(Control:   TWinControl;   Index:   Integer;  
      Rect:   TRect;   State:   TOwnerDrawState);  
   
  begin  
      with   Control   as   TListBox   do   begin  
          Canvas.FillRect(Rect);  
          ilType.Draw(Canvas,Rect.Left,Rect.Top+2,index+1);   //绘图,ilType-TImageList  
          Canvas.TextOut(Rect.Left+ilType.Width+4,Rect.Top+8,Items.Strings[index]);  
      end;  
  end

假设我已经把ico放在了imagelist中了呢?

先将ListBox的Style属性设为lbOwnerDrawFixed  
   
  procedure   TForm1.ListBox1DrawItem(Control:   TWinControl;   Index:   Integer;  
      Rect:   TRect;   State:   TOwnerDrawState);  
  var  
      AColor:   TColor;  
  begin  
      with   TListBox(Control)   do  
      begin  
          Canvas.Brush.Color   :=   Color;  
          Canvas.Brush.Style   :=   bsSolid;  
          Canvas.FillRect(Rect);  
          ImageList1.Draw(Canvas,   Rect.Left,   Rect.Top,   0);  
          AColor   :=   ColorToRgb(Color)   xor   $FFFFFF;  
          Canvas.Font.Color   :=   AColor;  
          Canvas.TextOut(ImageList1.Width   +   2,   Rect.Top,   Items[Index]);  
      end;  
  end;

posted @ 2008-09-19 13:42 delphi2007 阅读(710) | 评论 (0)编辑 收藏

suiDBGrid如何让它的当前行上下移动 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226161533103.html
suiDBGrid如何让它的当前行上下移动
posted @ 2008-09-19 13:42 delphi2007 阅读(155) | 评论 (0)编辑 收藏

如何动态的向IMAGELIST中加图片 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226152817104.html
请问大家.有谁做过向IMAGELIST中动态的加图片吗?

var  
        Pic   :   TBitMap;  
  begin  
        Pic   :=   TBitMap.Create;  
        Pic.LoadFromFile('c:\a.bmp');  
        ImageList1.Add(Pic,Pic);  
        Pic.Free;  
  end;

my

To   :  
  lihuasoft(学习低调做人)    
   
   
  var  
        Pic   :   TBitMap;  
  begin  
        Pic   :=   TBitMap.Create;  
        Pic.LoadFromFile('c:\a.bmp');  
        ImageList1.Add(Pic,Pic);  
        Pic.Free;  
  end  
   
   
  ImageList1.Add(pic,pic);  
  在这里你的第个参数是有啥用?

有的图片这样可以成功,有的会提示invalid   image   size

To   楼上:   没必要回答了,楼主已经闪人了。  
   
  发表时间:     2006-12-26   15:28:17      
  NOW     :     2007-02-11。。。。。

先要清楚:ImageList1设定的大小要与Pic的大小一致,否则:invalid   image   size  
   
  var  
        Pic   :   TBitMap;  
  begin  
        Pic   :=   TBitMap.Create;  
        Pic.LoadFromFile('c:\a.bmp');  
        ImageList1.Add(Pic,Pic);  
        Pic.Free;  
  end;

posted @ 2008-09-19 13:42 delphi2007 阅读(1107) | 评论 (0)编辑 收藏

关于OleVariant类型的疑问??? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226151543105.html
我在remotedatamodule中创建了一个这样的过程(类似于策略模式中"上下文"类)  
  申明:  
  procedure   StrategyTrans(var   Stgy:   OleVariant);   safecall;  
  实现:  
  procedure   TSvQueueRDM.StrategyTrans(var   Stgy:   OleVariant);  
  begin  
          CxQuStgy   :=   Stgy.Create();//将具体的策略类对象传递给抽象类对象;  
  end;  
   
  其中,CxQuStgy为一基类抽象对象,而Stgy是我希望获得的基类的子类对象  
  但从另外一个地方传来的(var   Stgy:   OleVariant)参数是字符串类型的(这个字符串的内容是某个子类的类型名称).请问要怎样才能将Stgy字符串转换为类的对象?????????

怎么没有人来帮个忙哦

需要一数组对类进行维护,  
  arr:   array   of   TClass;  
  然后类加入到数组。  
  类似下面,或者生命数组常量  
      SetLength(arr,   Length(arr)   +   1);  
      arr[High(arr)]   :=   TClass1;  
      全部加入到数组  
   
   
  procedure   TSvQueueRDM.StrategyTrans(var   Stgy:   OleVariant);  
  begin  
      for   i:=0   to   high(arr)   do  
          if   arr[i].ClassNameIs(Stgy)   then  
          begin  
              CxQuStgy   :=   arr[i].Create;  
              break;  
          end;  
  end;  
   
 

posted @ 2008-09-19 13:42 delphi2007 阅读(306) | 评论 (0)编辑 收藏

关于窗口最小化问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226141648106.html
我想在点击窗口最小化按钮时触发某个事件,请教我该怎么做???

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs;  
   
  type  
      TForm1   =   class(TForm)  
          ApplicationEvents1:   TApplicationEvents;  
          procedure   ApplicationEvents1Minimize(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.ApplicationEvents1Minimize(Sender:   TObject);  
  begin  
  //这里写  
  end;  
   
  end.

可以用一个时间控件,判断是否被最小化,就行了...

public  
          {   Public   declarations   }  
          procedure   WMSysCommand(var   Msg:   TWMSysCommand);   message   WM_SYSCOMMAND;  
   
   
  procedure   TForm1.WMSysCommand(var   Msg:   TWMSysCommand);  
  begin  
      if   (Msg.CmdType   =   SC_MINIMIZE)   or   (Msg.CmdType   =   SC_MAXIMIZE)   then  
      begin  
          //   your   code   ............  
          showmessage('hello');  
      end;  
      DefaultHandler(Msg);  
  end;

madyak的方法好像不行,可能是我这边程序的问题,用hongqi162的方法搞定了,感谢各位!

给分

ApplicationEvents1  
  是控件面板上additional上的一个组件

posted @ 2008-09-19 13:42 delphi2007 阅读(223) | 评论 (0)编辑 收藏

求助XP下的Panel透明问题???? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226140633107.html
SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_LAYERED);  
  SetLayeredWindowAttributes(Handle,0,alpha,LWA_ALPHA);  
  在XP下能不能用这两条语句将Panel透明...
posted @ 2008-09-19 13:42 delphi2007 阅读(293) | 评论 (0)编辑 收藏

求救,十万火急!在线等答案! VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226132901108.html
dbgrid1中有下面的记录:  
  id gp10 gp12 gp45 gp20 rf20 fr20 ot20  
  09 1 1 1 1  
  09 11 0 10 110  
  09 0 0 0 0  
   
  dbgrid2中要求dbgrid1中的每列数据加起来的和。  
  id gp10 gp12 gp45 gp20 rf20 fr20 ot20  
  10               12                 1                 11               111  
  怎么样才能得到dbgrid1每一列的和阿?  
  请指教!

可以用SQL直接取得列的汇总结果  
  也可以循环遍历DBGRID1所连接数据集,累加

没有简单的方法吗?最好给点代码参考。谢谢!  
 

1.循环计算  
  2.dbgrid2重新select   sum(*)  
  3.dbgrid1select的时候完全可以弄一个和在最后  
  另:没用过DBgrid,我都是用ListView显示。

posted @ 2008-09-19 13:42 delphi2007 阅读(63) | 评论 (0)编辑 收藏

菜鸟问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226125822109.html
edit控件取值我可能用edit.text来取,请问checkbox控件取值用代码怎么写

checkbox.checked      
   
  =   false   or   true

checkbox.checked  
  checkbox.caption  
  checkbox.tag  
  ......  
   
  要什么取什么

我知道你的意思,可是我在inset语句中这样写不能运行,语句如下;  
  adoquery1.SQL.Add('insert   int   cg   (me01,me02)values('''+checkbox1.checked+''','''+checkbox2.checked+''')');

checkbox1.checked是一个Boolean值,不是字符串,调试都通不过。  
  要转换成字符串,用function   BoolToStr(B:   Boolean;   UseBoolStrs:   Boolean):   string;  
  adoquery1.SQL.Add('insert   int   cg   (me01,me02)values('''+   BoolToStr(checkbox1.checked,   True)   +''','''+   BoolToStr(checkbox2.checked,   True)   +''')');

还是不行

什么不行,编译错误?还是存的结果有问题?你要保存的字段数据类型是什么?

[Error]   Unit1.pas(148):   Illegal   character   in   input   file:   '('   ($A3A8)  
  是这个提示  
  我要保存的是字符型

adoquery1.FieldByName('me16').asstring:=BoolToStr(checkbox1.checked   ,trun);  
  我这样写也不行

'('括号不对啊,智能全拼的,应该‘(’

晕死,不是中午字符的说。

中文

先看书,再调试,实在不行再发问!

adoquery1.SQL.Add('insert   int   cg   (me01,me02)values(:me01,:me02)');  
  adoquery1.Parameters.ParamByName('me01').value:=   checkbox1.checked;  
  adoquery1.Parameters.ParamByName('me02').value:=   checkbox2.checked;  
   
  不过建议使用DBCheckBox,少写N行代码

posted @ 2008-09-19 13:42 delphi2007 阅读(131) | 评论 (0)编辑 收藏

报表问题~~只有这么多分了~~~~-_-~ VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226124437110.html
用的是acreport,有两个数据集,adoquery1(主表),bill_sf(从表)  
  现在在设计报表时想实现这样的功能,在报表中要添加这两个数据集,  
                                                                      表头  
  户号:|   000001               |       年度:     |     2006     |     月份:       |           11              
  --------------------------------------------------------------------------  
  户名:|   张三                   |       地址:     |   城东路23号                        
  --------------------------------------------------------------------------  
  上月止数   |   本月止数   |   加减水量   |   总水量   |   用水类型   |   用水量   |   水价   |   水费  
  --------------------------------------------------------------------------  
        123       |       150         |         5           |       32       |     生活用水|       10       |   1.1     |   11  
  --------------------------------------------------------------------------  
                    |                     |                     |                 |     特殊用水|       22       |   1.5     |   33  
  --------------------------------------------------------------------------  
        222       |       250         |                     |       28       |     工业用水|       28       |   1.6     |44.8    
  -------------------------------------------------------------------------  
  从左边到总水量,这里的字段是adoquery1,一条记录表示一个水表,从用水类型开始往右则是bill_sf.表示的是该水表的具体用水情况,上面的例子就是两个水表,其中一块表有两种用水类型,而另一块只有一种用水类型~~~  
  要达到这样的效果,可以实现一对一,或是一对多的关系,我不懂ACREPORT要怎么设,试着用交叉报表,可又不行,交叉的区域无法确定,也许ACREPORT真的无法实现吧,哪位能大概说一下FASTREPORT和其它报表的使用方法呢?  
  如果修改数据结构是可以的.....只是太麻烦了..而且设计起来太不灵活了~~~~  
 

接分的人都没~~~

别急,等等就有人来了嘛

人呢???????用fastreport要如何设置才能有这样的效果啊~???

如果用fastreport,可以设置成主从表。主表是户号、户名等,从表是上月止数   |   本月止数   |   加减水量   |   总水量   |   用水类型   |   用水量   |   水价   |   水费,然后用户号作关联。  
  建一个MasterData,上面放主表的内容,再为这个Band建一个Child,指向从表,可以实现你的报表

fastreport用很简单,用主从就可以了

用grid++report也可以轻松实现.

可是,这两个本来就是主从表.户号,户名,上月止数,本月止数.加减水量,总水量.这些字段是主表中的,用水类型.用水量,水价,水费.则是从表的..关键是主表中的字段和从表中的字段会出现在行一行中,........这样可行吗??我用FASTREPORT搞了老半天也没搞好~~~

~~

posted @ 2008-09-19 13:42 delphi2007 阅读(140) | 评论 (0)编辑 收藏

安装Ehlib 组件问题,提示Require package 'vcl' not found VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226121239111.html
用的是Delphi6,   以前系统是Win2000   server,安装Ehlib正常,系统更换成Winxp   Pro后,怎么在Delphi6上安装Ehlib组件,提示Require   package   'vcl'   not   found,无法正确安装,望高手赐教!

文件不全?

修改下Options里面的Build   control   的选项看一下  
 

posted @ 2008-09-19 13:42 delphi2007 阅读(523) | 评论 (0)编辑 收藏

DBGridEh 画线的问题? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226115751112.html
原使用   Ehlib   3.6   时,该控件如果   FooterRowCount   设为1以上时,可将表格直线画到底部。  
   
  现使用 Ehlib   4.1 时,中间的线不画了,留着一大块空白,真是难看。  
   
  有 Ehlib   源码,应当如果改?(DBGridEh.pas)

不知道3.6和4.1设置FooterRowCount是什么样子.

偶还在用3.3   的。不知道4.1什么样子

不明白,帮顶。

posted @ 2008-09-19 13:42 delphi2007 阅读(184) | 评论 (0)编辑 收藏

有哪些在d7下能够使用的好一点的报表控件哦(免费或者有注册码的)? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226100718113.html
如题,请留下下载地址哦!

fast   report

fast   report    
   
      ftp://ftp.51delphi.com/fr32.rar  
  非常好用

fast   report   3.0

RM

posted @ 2008-09-19 13:42 delphi2007 阅读(150) | 评论 (0)编辑 收藏

大家帮助我好吗很急,不知怎么办..... VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061226091416114.html
怎么调用word中定义的宏  
   
  给你段可用的代码好吗,谢谢

Sub   Macro1()  
  '  
  '   Macro1   Macro  
  '   宏在   2002-2-1   由   yzhshi   录制  
  '  
          Selection.Find.ClearFormatting  
          Selection.Find.Replacement.ClearFormatting  
          With   Selection.Find  
                  .Text   =   "讨论"  
                  .Replacement.Text   =   "研讨"  
                  .Forward   =   True  
                  .Wrap   =   wdFindContinue  
                  .Format   =   False  
                  .MatchCase   =   False  
                  .MatchWholeWord   =   False  
                  .MatchByte   =   True  
                  .MatchWildcards   =   False  
                  .MatchSoundsLike   =   False  
                  .MatchAllWordForms   =   False  
          End   With  
          Selection.Find.Execute   Replace:=wdReplaceAll  
  End   Sub  
  2、 精简宏代码。通常,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要  
  做的就是如何找到我们需要的代码。此时我们查看具体的代码,剔除明显没有用途的代码,然后光  
  标停留在宏上面,按F5执行,看是否实现功能,逐步精简,得到最小代码。此步骤可参考Word的  
  VBA帮助来判断代码是否有用。  
   
  如上例,精简下来,剩下以下代码。  
  Sub   Macro1()  
          Selection.Find.ClearFormatting  
          Selection.Find.Replacement.ClearFormatting  
          With   Selection.Find  
                  .Text   =   "讨论"  
                  .Replacement.Text   =   "研讨"  
          End   With  
          Selection.Find.Execute   Replace:=wdReplaceAll  
  End   Sub  
   
  3、 转换成Delphi代码。这一步其实很简单,对于VBA代码,只需要在前面添加Word的句柄或者  
  文档的句柄或者文档的句柄.Application就可以直接操作了。  
  例:逐句翻译:(Word_Handle是Word的句柄)  
  (VB)           Selection.Find.ClearFormatting  
  (Delphi)     Word_Handle.Selection.Find.ClearFormatting;  
   
  (VB)           Selection.Find.Replacement.ClearFormatting  
  (Delphi)     Word_Handle.Selection.Find.Replacement.ClearFormatting;  
  以上两句简单添加上Word的句柄就可以了。  
   
  (VB)           With   Selection.Find  
                              Text   =   "讨论"  
                              Replacement.Text   =   "研讨"  
  End   With  
  (Delphi)     Word_Handle.Selection.Find.Text   :=   '讨论';  
      Word_Handle.Selection.Find.Replacement.Text   :=   '研讨';  
  以上几句因为Delphi不支持Variant的With结构,所以分开写。同时转换成Delphi语法。  
   
  (VB)         Selection.Find.Execute   Replace:=wdReplaceAll  
  (Delphi)   Word_Handle.Selection.Find.Execute(Replace:=2);  
  上面一句存在一个小技巧,如何找到常量wdReplaceAll的数值为2?  
  这里有几个办法,  
  一:直接use   Word2000或者word97单元,那么直接使用常量wdReplaceAll就可以了;  
  二:到Word2000.pas或者Word97.pas里面查找wdReplaceAll的数值;  
  三:直接使用VBA代码见wdReplaceAll的数值显示出来。办法是写一个小过程,然后执行,如下:  
  Sub   ShowValue()  
      MsgBox   wdReplaceAll  
  End   Sub  
   
  最后补充一下,很多关于Word的东西可以从Word的VBA帮助里面获得。具体文件在  
  ?:\Program   files\Microsoft   Office\Office10\2052(XP)下,VBAWD10.CHM,其他版本路径基本类似。  
 

我想要的是调用word中写好的宏,而不是改写  
  如果是改写能实现下面的问题吗?  
   
  我想设置word到顶的边距为8.11cm  
  但delphi中只认象数,CM到象数的转换又没有标准所以只能在word中写好宏,用delphi调用

posted @ 2008-09-19 13:42 delphi2007 阅读(122) | 评论 (0)编辑 收藏

如何从文件中提取指定位置的数据???? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225204715115.html
数据如下:  
      BEGIN   OF   EPOCH   (GPS   /   UTC)   :   172800.0       2006   12   12     0     0     0.0  
    PLH   (DDMMSS.SS)   Clk   ZTD   (m)   :   385508.36127     -770358.37552     40.803     -191.177     0.095  
                                            XYZ   (m)   :   1112188.769     -4842946.925     3985349.484  
        Satellites   tracked   /   used   :   8     8  
          GDOP   PDOP   HDOP   VDOP   TDOP   :   2.3     2.0     1.1     1.7     1.1  
                        Sigma   PLH   Clk   (m)   :   1.700     1.254     3.432     58.702  
          END   OF   EPOCH   (GPS   /   UTC)   :   172800.0       2006   12   12     0     0     0.0  
   
      BEGIN   OF   EPOCH   (GPS   /   UTC)   :   172830.0       2006   12   12     0     0   30.0  
    PLH   (DDMMSS.SS)   Clk   ZTD   (m)   :   385508.34732     -770358.35977     41.236     -191.708     0.095  
                                            XYZ   (m)   :   1112189.274     -4842947.432     3985349.421  
        Satellites   tracked   /   used   :   9     8  
          GDOP   PDOP   HDOP   VDOP   TDOP   :   2.3     2.0     1.1     1.7     1.1  
                        Sigma   PLH   Clk   (m)   :   1.203     0.887     2.439     1.869  
          END   OF   EPOCH   (GPS   /   UTC)   :   172830.0       2006   12   12     0     0   30.0  
   
      BEGIN   OF   EPOCH   (GPS   /   UTC)   :   172860.0       2006   12   12     0     1     0.0  
    PLH   (DDMMSS.SS)   Clk   ZTD   (m)   :   385508.34119     -770358.34916     41.441     -192.052     0.095  
                                            XYZ   (m)   :   1112189.586     -4842947.645     3985349.403  
        Satellites   tracked   /   used   :   9     8  
          GDOP   PDOP   HDOP   VDOP   TDOP   :   2.3     2.0     1.1     1.7     1.1  
                        Sigma   PLH   Clk   (m)   :   0.982     0.725     2.000     1.559  
          END   OF   EPOCH   (GPS   /   UTC)   :   172860.0       2006   12   12     0     1     0.0  
  需要从以上的数据中提取PLH   (DDMMSS.SS)   Clk   ZTD   (m)   :   后面的3个值,即第1段的385508.36127     -770358.37552     40.803这三个值,数据中很很多这样的小段,面需要从每一段中取出这三个值来,怎么才能实现呢?  
  最好有源码,谢谢了。。

procedure   ReadLn([   var   F:   Text;   ]   V1   [,   V2,   ...,Vn   ]);

READLN把数据读上来后,怎么判断哪个是我要的数据呢,能说的详细点吗

我的做法可能比较笨(借助TStringList类和Pos、Copy函数)  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
        SList,   SLtemp   :   TStringList;  
        I   :   integer;  
        S,   sTemp   :   string;  
  begin  
        S   :=   'PLH   (DDMMSS.SS)   Clk   ZTD   (m)   :   '   ;   //这是标志串,前面没有空格,如有,则要另加处理  
        SList   :=   TStringList.Create;                         //创建两个StringList--SList和SLtemp  
        SLtemp   :=   TStringList.Create;                       //  
        SList.LoadFromFile('c:\src.txt');               //把c:\src.txt的内容导入SList  
   
        for   I   :=   0   to   SList.Count-1   do  
                if   Pos(S,SList[I])   >   0   then                 //如果一行中有标志串则做以下处理  
                      begin  
   
                      {   把此行的标志串去掉后赋值给sTemp这个字符串   }  
                      sTemp   :=   StringReplace(SList[I],S,'',[rfReplaceAll]);  
   
                      {   把sTemp   串中的双空格替换为换行符,然后把sTemp赋值给字符串列表SLtemp   }  
                      SLtemp.Text   :=   StringReplace(sTemp,'     ',#10,[rfReplaceAll]);  
   
                      {   输出SLtemp   中前三个值到一个memo里   }  
                      memo1.Lines.Add(   SLtemp[0]   +   ','   +   SLtemp[1]   +   ','   +   SLtemp[2]   );  
                      end;  
        SLtemp.Free;//释放用过的两个字符串列表  
        SList.Free;  
  end;  
   
  注意,前提是你的文本数据要有一定的格式,如:三个数字串之间都需要是用两个空格做间隔。  
  另外,我假设你是把数据存放在了一个TXT文件中。  
  楼主测试时,如果失败,就从一些细节上找原因(如空格问题)  
   
  我的输出结果是:  
  385508.36127,-770358.37552,40.803  
  385508.34732,-770358.35977,41.236  
  385508.34119,-770358.34916,41.441  
 

lihuasoft(学习低调做人)   谢谢了,你的方法可以实现。  
  分已送出,请查收。。

分已收到.   也谢谢楼主,   因为你是一个负责任的人.   虽然已暗下决心2007年不再抢分,   但仍然对似你这样及时结贴的人表示敬意

posted @ 2008-09-19 13:42 delphi2007 阅读(281) | 评论 (0)编辑 收藏

取日期、星期、时间 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225185327116.html
想得到以下格式:代码如何写?  
  2006年12月25日     星期一     (最好用label.caption)  
  DBgrid中,想让数据居中,用哪个?  
 

1、返回格式日期,用FormatDateTime()函数:  
   
          ShowMessage(FormatDateTime('yyyy"年"mm"月"dd"日"   dddd',now));   //Delphi6  
          据说在Delphi7中,可以把年月日两边的双引号去掉。  
   
  2、DBgrid居中,没有研究过。

啊,没遵守楼主的要求,我改一下:  
   
  Label.caption   :=   FormatDateTime('yyyy"年"mm"月"dd"日"   dddd',now);

2.   dbgrd1.Columns[i].Alignment   :=   taCenter;

还有星期,

难道按我的格式,没有星期输出吗?

Uses   DateUtils;  
   
  ....  
   
   
      Label1.Caption   :=   IntToStr(YearOf(Now))   +   '年'   +   IntToStr(MonthOf(Now))   +   '月'   +  
          IntToStr(DayOf(Now))   +   '日   星期'   +   IntToStr(DayOfWeek(Now));

我明上班才能试啊,请问是我要的格式吗?     "星期X"

呵~~原来楼主没试啊....  
  等明天楼主试试不就放心了吗?

posted @ 2008-09-19 13:42 delphi2007 阅读(309) | 评论 (0)编辑 收藏

使用TIdHTTP获取网页的中文乱码问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225174956117.html
我用TIdHTTP得到网页的文本数据后,发现里面的中文全部是乱码,请问如何能将乱码转换正常?

没有大哥肯回答吗?

改编码类型试试,不知道idhttp里面有没有

什么网页?给个地址看看!  
  idHTTP中没有编码设置吧!

取得的文件用IE打开看看是不是正常

哪个网页?你也不举个例子  
  如果网页采用的是UTF8格式你需要转换一下  
   
  Utf8ToAnsi()  
 

posted @ 2008-09-19 13:42 delphi2007 阅读(1692) | 评论 (0)编辑 收藏

怎样用调用资源管理器explore.exe打开指定的文件夹 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225173448118.html
怎样用代码调用windows的explore.exe打开指定的文件夹。如c:\MyDoc,调用explore.exe后自动打开c:\MyDoc

WinExec('C:\Program   Files\Internet   Explorer\iexplore.exe   d:\',SW_SHOW)

//   路过捡分  
   
  WinExec('explorer   D:\',   SW_SHOW);

uses   ShellAPI;  
   
  ShellExecute(0,   nil,   'D:\',   nil,   nil,   SW_SHOW);

posted @ 2008-09-19 13:42 delphi2007 阅读(1204) | 评论 (0)编辑 收藏

有关一个公用的BPL的问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225161840119.html
我在一个公用的BPL中修改部分代码,build后重新install了,为什么我其他模块调用他的时候,里面内容还是没有发生变化,感觉上还是再调用了老的BPL啊~~

有谁帮偶呀,刚接触delphil,迷茫啊~~~

先remove以前的bpl,然后build,最后install--add

已经试过了,还是一样的结果,我也检查过了其他地方没有这个同名文件

把所以旧的bpl干掉,把所有以前的引用干掉,把library里的路径也都干掉,再试试。反正肯定是有什么地方还用到了以前的东西。

呵呵,电脑重起就好了~~~~超级郁闷

posted @ 2008-09-19 13:42 delphi2007 阅读(160) | 评论 (0)编辑 收藏

怎么取的DBGrid当前显示的区域数据,既只是屏幕上看到的一部分数据 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061225161258120.html
 
    怎么取的DBGrid当前显示的区域数据,既只是屏幕上看到的一部分数据

参考  
  http://community.csdn.net/Expert/TopicView.asp?id=5224151

你可以使用分页显示,每次显示几条记录,写几个函数就行

posted @ 2008-09-19 13:42 delphi2007 阅读(192) | 评论 (0)编辑 收藏

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