delphi2007 教程

delphi2007 教程

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

#

如何转换memo中指定的字符串 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206155151263.html
比如memo中的文本为:  
  fasd[林]safad[清]ddfd[霞]  
   
  要实现的效果是转化为  
  fasd[周]safad[星]ddfd[驰]  
   
  转换的个数未知。

使用StringReplace来替换

已經使用了,  
  我用的是RzDBMemo來显示数据,RzDBMemo的SetText事件都不触发,实现不了把文本转换存到数据库.不知道有没什么其他的解决方案?

在SQL语句中StringReplace来替换不可以吗

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

posted @ 2009-04-22 10:44 delphi2007 阅读(220) | 评论 (0)编辑 收藏

请教如何在onshow事件里退出. Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206144507264.html
本人用delphi   6写了一个dll,dll里创建了名为frm_user_defined_report_forms的from。本人想在这个from的onshow事件做个判断然后符合件就退出。代码如下:  
  procedure   Tfrm_user_defined_report_forms.FormShow(Sender:   TObject);  
  begin  
      inherited;  
      Init;  
      BtnOpenClick(BtnOpen);  
      if   fa=1   then  
          begin  
              if   Assigned(frm_user_defined_report_forms)   then  
              frm_user_defined_report_forms.Close;  
          end;      
  end;  
  结果能退出,但再进去或退出这个系统时出现地址端口栏错误。本人也试用freeandnil()函数去清空,但仍然不行。请教各位如何修改这段onshow事件的代码令到它能在onshow事件里退出。

halt(0)

halt(0)开始我也想过用,但是它是退出整个系统,而我只是想退出这个dll并清空它再进去不会出现地址端口错误,所以这个halt(0)不合适.

在窗体的Destory事件里写代码释放掉不可以吗

先D顺便JF

FreeAndNil(frm_user_defined_report_forms);  
  退出是最安全的,窗体内存被释放。  
   
  不过,不知道你从DLL外面如何创建的窗体。这个也是后面可能会出错的地方呢。因为这一次退出时释放了资源,那么下一次进入时创建不正确就会出错。

楼主你思路不对。   为什么非要在他已经SHOW后才判断它。  
  将没SHOW之前就判断它。  
  buttonOnclick()  
  begin  
        if   not   Assigned(frm_user_defined_report_forms)   then  
        frm_user_defined_report_forms.show;  
  end;

最好的解决办法是象楼上说的一样,从设计上就避免这样的情况.

想法上的问题。  
       
  --------------------------------------------------------------  
  程序,犹如人生。  
 

既然都已经show了,为什么非要在onshow的时候退出呢?  
   
  程序设计有问题

这个窗口能打开么?

在OnShow的时候Post一个Message,WM_QUIT  
  PostMessage(Handle,   WM_QUIT,   0,   0);

posted @ 2009-04-22 10:44 delphi2007 阅读(338) | 评论 (0)编辑 收藏

memo显示问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206113439266.html
 
  问题是从   SQL   语句   SELECT   出来   的时候     是0.80185000,但是在fastreport中memo打印出来的时候是0.8018,请问怎么得到0.80185啊?后面的三位就不要了,小弟先谢谢了。  
 

是不是问题太过简单了,无人做答啊。我都找遍了FASTREPORT中MEMO的属性栏位,好象没有这里显示小数点这方面的设置啊。

吃饭去了,希望下午过来之前有贵人帮助,谢谢啦!

结帖

posted @ 2009-04-22 10:44 delphi2007 阅读(109) | 评论 (0)编辑 收藏

怎样使原先为"0""1"的数据转为"无""有"显示? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206105919267.html
朋友提了很多建议,可是我还是用不成功.比如说ongettext事件怎么得到呢?具体该怎么实现我想要的功能?新手跪求

不明白你的意思,能否详细的说一下?

onGetText:      
   
  右击Table(或query),选择fields   editer-->add   fields,把要处理的字段添加后,看一下属性/方法页,是不是有了?!

注意onGetText是字段的方法(TableFieldOnGetText)  
                                                      ~~~~   ~~~~   ~~~~~~~~~

就是我在设计表结构的时候用了bit类型,我想实现"1"表示"有","0"表示"无",那直接用BDE连接时,DBGIRD显示的是从数据表获取的"0""1",我该怎么实现前台显示"有""无"

我试试看.谢谢lihuasoft

楼主,你这个问题反复发了好几个贴子,   我个人认为在这样一个界面小事情上花费这多精力,真是不值得,   况且,前几个贴子里,有人已经给你解决方案了...现在问题是你不知onGetText在哪里找是吧?   上面我也告诉你了....

请问新手是不是还不能发帖子啊?

主要是我解决不了啊!没办法.麻烦大家了

不能发帖子就在这里说好了,请路过的大哥帮帮忙。  
  问题是从   SQL   语句   SELECT   出来   的时候     是0.80185000,但是在fastreport中memo打印出来的时候是0.8018,请问怎么得到0.80185啊?后面的三位就不要了,小弟先谢谢了。

楼上的,自己去发贴!(发贴需要到小类版块,然后在页面右上角有"提问",点它)

谢谢啦,我试试看哈

posted @ 2009-04-22 10:44 delphi2007 阅读(149) | 评论 (0)编辑 收藏

fastreport3分组脚本问题,急,急,急 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206105106268.html
现有一数据表如下:  
  a1         大连     234  
  a2         旅顺     567  
  a2         北京     213  
  a3         天津     987  
  我想分组为如下表:  
  -------------  
    大连     234  
  ------------  
        a2  
  -------------  
    旅顺     567  
    北京     213  
  ----------------  
              小计     780  
  ----------------  
    天津     987  
  ----------------  
   
  procedure   MasterData1OnBeforePrint(Sender:   TfrxComponent);  
  begin  
    if   [LINE#]>1   then  
      begin  
        GroupFooter1.Visible:=True  
      end  
        else  
      begin  
          GroupFooter1.Visible:=False;  
      end;  
   
   
  end;  
   
  begin  
   
  end.为何运行出错,提示出错']'expected  
 

这个脚本是在FastReport里面写的,不是在Delphi里写的

如何在FastReport里面写,请帮忙.

在FastReport的设计界面里,你选择主数据项,各种属性里有一个OnBeforePrint事项,点出后,在里面写代码

我也是按你所说的去做可是老出错.提示:']'expected

注意是Fr的脚本!!!!  
  不在Delphi中写的,如果不明白,你看Fr的帮助(有中文的帮助,自己到网上查一下)

我实在太笨了,在FastReport的设计界面里,我选择主数据项,在OnBeforePrint事项里写代码,就是出错.  
 

up  
 

up

把[LINE#]改成<LINE#>   试试  
 

posted @ 2009-04-22 10:44 delphi2007 阅读(281) | 评论 (0)编辑 收藏

请指点一下,讨论也可以,顶也有分 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206091917269.html
先说我一直以来的观点,不知对错。  
   
  多线程的同步有三个方法,建互斥锁,Synchronize和消息。前两个我不说了,只说消息。  
   
  我作的消息同步就是把需要同步的操作放到主窗体的消息响应事件中。  
  即:  
  procedure   TfrmMain.DO_USERMSG(var   Message:   TMessage);   message   WM_USERMSG;  
  begin  
      //do   something  
  end;  
   
  每个线程在满足条件时会给主窗体发消息。  
   
  这样DO_USERMSG函数是在主线程中执行的函数,应该不存在并发问题。但是实际上不是这样的,比如把函数改为:  
   
  procedure   TfrmMain.DO_USERMSG(var   Message:   TMessage);   message   WM_USERMSG;  
  begin  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
       
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
      Memo1.Lines.Add(format("收到线程%d消息",[Message.LParam]));  
  end;  
   
  Memo1中的内容是混杂在一起的。  
   
  我在函数中加了互斥量,问题才解决了,为什么是这样呢,判各位指点。

线程的消息同步不是WIN系统的Postmessage   或   SendMessage    
   
  《WINDOWS核心编程》仔细看看,绝对值得购买。

帮顶   消息是队列。。。

同步还有临界区的方式,但只能用在同步同一个进程的多个线程,但它的速度最快,占用资源最少。  
   
 

我不理解的主要是DO_USERMSG函数好像是并发执行的。

不是并发,但是memo处理的响应速度不及时,导致看起来像并发,界面完成一个消息的工作是需要时间的,不然Delphi的线程也不会有这段提示了:  
  {   Important:   Methods   and   properties   of   objects   in   VCL   or   CLX   can   only   be   used  
      in   a   method   called   using   Synchronize,   for   example,  
   
              Synchronize(UpdateCaption);  
   
      and   UpdateCaption   could   look   like,  
   
          procedure   xxxx.UpdateCaption;  
          begin  
              Form1.Caption   :=   'Updated   in   a   thread';  
          end;   }

晕,这样的问题才叫基础问题?

发送消息的时候用PostMessage不用SendMessage

posted @ 2009-04-22 10:44 delphi2007 阅读(96) | 评论 (0)编辑 收藏

关于指针 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206091612270.html
在C++中:  
  int   *p;  
  请问p[1]在delpi中怎么表示.

C++里的int   *   p   ;是定义了一个整型指针  
  在delphi里就是   var   p:^integer;  
  p[1]-----有意义吗?我不知道.

我现在有一段VC++的代码,里面就有这样的用法。

如果说下标是0,还可以理解为&p   ==   &p[0]  
   
  但是p[1],已经越界了

那请你看一下这段段码怎么园为Delphi代码:  
  static   void   idctrow(short   *blk)  
  {  
      int   x0,   x1,   x2,   x3,   x4,   x5,   x6,   x7,   x8;  
   
      /*   shortcut   */  
      if   (!((x1   =   blk[4]<<11)   |   (x2   =   blk[6])   |   (x3   =   blk[2])   |  
                  (x4   =   blk[1])   |   (x5   =   blk[7])   |   (x6   =   blk[5])   |   (x7   =   blk[3])))  
      {  
          blk[0]=blk[1]=blk[2]=blk[3]=blk[4]=blk[5]=blk[6]=blk[7]=blk[0]<<3;  
          return;  
      }  
   
      x0   =   (blk[0]<<11)   +   128;   /*   for   proper   rounding   in   the   fourth   stage   */  
   
      /*   first   stage   */  
      x8   =   W7*(x4+x5);  
      x4   =   x8   +   (W1-W7)*x4;  
      x5   =   x8   -   (W1+W7)*x5;  
      x8   =   W3*(x6+x7);  
      x6   =   x8   -   (W3-W5)*x6;  
      x7   =   x8   -   (W3+W5)*x7;  
       
      /*   second   stage   */  
      x8   =   x0   +   x1;  
      x0   -=   x1;  
      x1   =   W6*(x3+x2);  
      x2   =   x1   -   (W2+W6)*x2;  
      x3   =   x1   +   (W2-W6)*x3;  
      x1   =   x4   +   x6;  
      x4   -=   x6;  
      x6   =   x5   +   x7;  
      x5   -=   x7;  
       
      /*   third   stage   */  
      x7   =   x8   +   x3;  
      x8   -=   x3;  
      x3   =   x0   +   x2;  
      x0   -=   x2;  
      x2   =   (181*(x4+x5)+128)>>8;  
      x4   =   (181*(x4-x5)+128)>>8;  
       
      /*   fourth   stage   */  
      blk[0]   =   (x7+x1)>>8;  
      blk[1]   =   (x3+x2)>>8;  
      blk[2]   =   (x0+x4)>>8;  
      blk[3]   =   (x8+x6)>>8;  
      blk[4]   =   (x8-x6)>>8;  
      blk[5]   =   (x0-x4)>>8;  
      blk[6]   =   (x3-x2)>>8;  
      blk[7]   =   (x7-x1)>>8;  
  }

我不懂这些位移是怎么回事,有点晕了....帮你顶....

要看p指向的内存了,在C中,指针和数组有很大的相似性  
  如p=(int   *)malloc(10   *   sizeof(int));   p指向一个数组  
  c也不检查数组越界,内存访问逻辑是否正确,全凭自己

posted @ 2009-04-22 10:44 delphi2007 阅读(133) | 评论 (0)编辑 收藏

SQL中使用日期筛选的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206090307271.html
procedure   TForm4.BitBtn1Click(Sender:   TObject);  
  begin  
  adoquery1.Close;  
  adoquery1.SQL.Clear;  
  adoquery1.ConnectionString:=('Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=zysb.mdb;Persist   Security   Info=False');  
  adoquery1.sql.add('select   日期   as   Tdate,姓名   as   Tname,积休事由   as   jxsy,积休天数   as   ts');  
  adoquery1.sql.add('   from   jxj');  
  adoquery1.sql.add('where   str(日期)>='+#39+datetimetostr(DateTimePicker2.date)+#39+'   and   str(日期)<='+#39+datetimetostr(DateTimePicker3.date)+#39+'   order   by   日期');  
  adoquery1.Open;  
   
  if   adoquery1.Recordcount=0   then  
  showmessage('报表中没有可用数据!')  
  else  
  RvProject1.Execute;  
  end;  
  ///////其中"日期"是acess中的日期时间型,每次都选择不到自己的需要的日期范围内的数据,前面的日期大于后面的时,还能取到数据!!/////////////////  
 

ACCESS取日期是需要在日期两边加   #  
  即   #   #

具体怎么弄??????????????????

posted @ 2009-04-22 10:44 delphi2007 阅读(161) | 评论 (0)编辑 收藏

高分送上->编辑.exe文件,恢复被病毒感染的文件。 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061206005440272.html
很不幸,我中毒了。感染了几乎全部的.exe程序文件和.scr屏保文件。杀毒后这些文件都不能用了。  
   
  但我用16进制编辑器比较中毒的文件和未中毒的文件时,发现这个病毒就只在我的.exe和.scr文件前面加入了相同的61347个字节的数据。把这61347个字节删了就可以恢复成原来的可使用的文件了。用16进制编辑器一个个改不是个办法。  
  请问用Delphi怎样编一个能打开并能修改.exe和.scr文件的程序。  
   
  要求打开,修改,保存,比较。  
   
  高分送上!!!谢谢!!!

楼主也准备做病毒,害人?  
   
  ^_^

晕死   关注   ~~~

文件修改的   几个方式  
  1   内存流  
  2   delphi   内部函数  
  3   api  
  推荐用内存流   来修改

小弟初来,好象还不能发帖子,楼主不好意思啦  
  不能发帖子就在这里说好了,请路过的大哥帮帮忙。  
  问题是从   SQL   语句   SELECT   出来   的时候     是0.80185000,但是在fastreport中memo打印出来的时候是0.8018,请问怎么得到0.80185啊?后面的三位就不要了,小弟先谢谢了。  
 

这病毒够业余的,直接把自己写到前面。

使用   TFileStream   好了,帮助里面都有例子

那是不是   都先运行文件的前面几个字节,再运行下面的阿??????

晕!!!!!!有点意思!!!!!  
   
  研究研究!

解病毒不是说去掉前面多余的字节就完事了的,病毒已经修改了程序运行的出入口,文件长度等,不然病毒怎么发作,怎么传染?以前DOS下我研究并成功解除过文件感染性病毒的,Windows下的病毒我没研究过,不过原理应该相通吧

你不会是中了威金把,貌似症状有点像啊,也是所有exe都完了!

maozefa(阿发伯)  
  他说他手工去掉前面就可以,什么文件头不文件尾的。  
   
  照我说  
  搜索硬盘所有EXE,  
  放到内存流里面,COPY     61347   字节   后面部分再写回文件即可。

我靠,跟我的一样啊,不过我已经搞定了!呵呵  
        我找了所有的杀毒软件,居然杀不了,气死我了,然后跟楼主一样,研究了一下被感染的文件,发现就是在前面加了一些代码,所以就写了一个清除的,自己杀了!  
        呵呵!  
        代码在下面的地方:  
        http://etomahawk.popo.blog.163.com/blog/static/9196448200691175644463/  
      楼主,希望对你有用!  
      祝你好运!  
      让该死的病毒滚蛋!

呵呵~  
  还是自己分析啦

posted @ 2009-04-22 10:44 delphi2007 阅读(189) | 评论 (0)编辑 收藏

怎样给TMainMenu添加mousemove事件? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205235216273.html
我自己想给TMainMenu加一个mousemove事件,如下:  
  unit   Menu;  
   
  interface  
   
  uses  
   
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      Shellapi,   StdCtrls,   ExtCtrls,   Menus;  
   
  type  
      TMenu   =   class(TMainMenu)  
   
  private  
  {   Private   declarations   }  
      FOnMouseMove:   TNotifyEvent;  
      procedure   FSetOnMouseMove(value:   TNotifyEvent);  
   
  protected  
  {   Protected   declarations   }  
      procedure   wmmousemove(var   Msg:   TMessage);   message   WM_MOUSEMOVE;  
   
  public  
  {   Public   declarations   }  
      constructor   Create(AOwner:   TComponent);   override;  
      destructor   Destroy;   override;  
   
  published  
  {   Published   declarations   }  
      property   OnMouseMove:   TNotifyEvent   read   FOnMouseMove   write   FSetOnMouseMove;  
   
  end;  
   
  implementation  
   
  procedure   Register;  
  begin  
      RegisterComponents('Samples',   [TMenu]);  
  end;  
   
  {   TMenu   }  
   
  procedure   TMenu.wmmousemove(var   Msg:   TMessage);  
  begin  
      if   Assigned(FOnMouseMove)   then  
          FOnMouseMove(Self);  
  end;  
   
  constructor   TMenu.Create(AOwner:   TComponent);  
  begin  
      inherited;  
   
  end;  
   
  destructor   TMenu.Destroy;  
  begin  
   
      inherited;  
  end;  
   
  procedure   TMenu.FSetOnMouseMove(value:   TNotifyEvent);  
  begin  
      if   @FOnMouseMove   <>   @value   then  
          FOnMouseMove   :=   Value;  
  end;  
   
  end.  
     
   
  但用install   component居然不让install!?(就是install那个按钮是灰的)是哪个地方写错了吗?以前没做过这种东西。

TMenu是一个已经存在的类  
 

改成别的名字还是不行啊

install那个按钮是灰的  
  ====================================================================================  
  你的Delphi系统有毛病,我们的都不是灰的,这与"哪个地方写错了"是两回事.但是TMenu确实是已经存在的,是TMainMenu的祖先类,还有就是主菜单是不能简单加事件的,它是Windows系统控制的,Delphi只不过包装了一下

posted @ 2009-04-22 10:44 delphi2007 阅读(147) | 评论 (0)编辑 收藏

delphi pi怎么得到? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205223540274.html
我想在delphi里用pi计算,请问有函数直接调用吗?  
  难道我还要自己写一个常量pi=3.141592653

不知道math.pas里有常量定义吗?俺这里没装delphi急啊...

有这个常量  
  PI  
  system单元  
 

怎么调用啊?讲具体点

哦,原来在那个单元啊,  
   
  楼主,你直接在uses里引用那个单元就行了啊

怎么我在uses里添加system  
  'redeclared:'System'   '错误啊

呵呵,那说明已经uses   了,不用再uses了  
   
  直接用PI常量试试看看可用了不  
   
  showmessage(floattostr(PI));

不行 还回是0  
  到底怎么回事呢?

楼主,我刚刚安装delphi6,也试了,完全可以..  
  如果你还没有解决,那就贴代码

PI约等于3.14159265358979323846264338327950288  
  呵...这是我以前背诵的

OK

posted @ 2009-04-22 10:44 delphi2007 阅读(178) | 评论 (0)编辑 收藏

在dbgriddrawCell中怎样写转化语句 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205222508275.html
在dbgriddrawCell是不是可以写转化语句,使原先为"0""1"的数据转为"无""有"显示?  
 

//参考如下代码:  
   
  procedure   TForm1.Table1AfterOpen(DataSet:       TDataSet);        
  begin        
      TNumericField(DataSet.FieldByName('性别')).DisplayFormat   :=   '"女";"女";"男"';        
  end;

procedure   TForm1.ADOQuery1AfterOpen(DataSet:   TDataSet);        
  begin        
      TNumericField(DataSet.FieldByName('结贴')).DisplayFormat   :=   '"无";"无";"有"';        
  end;  
 

procedure   TDataModule2.DepartAfterOpen(DataSet:   TDataSet);  
  begin  
    query1.Close;  
    query1.SQL.Clear;  
      a:='slecet   *from   depart   where   ChinesePro='+''''+inttostr(1)+'''';  
      query1.SQL.Add(a);  
      query1.Open;  
    if   query1.RecordCount>1   then  
      begin  
        TNumericField(Depart.FieldByName('chinesepro')).DisplayFormat:=   '"有"';  
      end  
    else  
      begin  
        TNumericField(Depart.FieldByName('chinesepro')).DisplayFormat:=   '"无"';  
      end;  
  end;  
   
  帮忙看看这段代码有什么问题啊?!

procedure   TDataModule2.DepartAfterOpen(DataSet:   TDataSet);  
  begin  
      TNumericField(DataSet.FieldByName('chinesepro')).DisplayFormat   :=   '"无";"无";"有"';  
  end;  
   
  //这样用有什么问题吗?

这样我运行之后,原先"0"显示"有",是"1"显示"无"

我上面的代码,是想通过查询数据库实现的.这个想法对么?

TNumericField(DataSet.FieldByName('chinesepro')).DisplayFormat   :=   '"无";"无";"有"';  
   
  这个后面显示的顺序怎么理解?

如果你的DBGrid只是查询不做修改,那么可以将查询方到打开Depart的语句中  
  select   *,   (select   count(*)   from   depart   where   chinesepro   =   a.chinesepro)   as   cnt  
  from   TableName   as   a  
   
  整数;负数;零

posted @ 2009-04-22 10:44 delphi2007 阅读(126) | 评论 (0)编辑 收藏

写查询语句出现的问题.显示查不到的数据出错,帮忙看看 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205203545276.html
if(form4.RBdepno.Checked)     then  
            begin  
              if   Trim(Edit1.Text)=''   then  
                  begin  
                      MessageDlg('科室编号不能为空!',mtWarning,[mbOK],0);  
                      exit;  
                  end  
                else  
                  begin  
              s:='select   *   from   Depart   where     departID='+edit1.Text;  
              if   (s='')   then  
                    begin  
                          Application.MessageBox('数据库表格指定字段未发现记录!','未发现记录',MB_OK);  
                      end  
                    else  
                    query1.SQL.Add(s);  
                    query1.Open;  
                    end;  
   
   
    if   (s='')   then  
                    begin  
                          Application.MessageBox('数据库表格指定字段未发现记录!','未发现记录',MB_OK);  
  关于这段代码书写,我的本意是想如果查询不到匹配字段,提示"数据库表格指定字段未发现记录!",可运行始终出错,帮忙看看哪里问题该怎么改?

if   (s='')   then  
                    begin  
                          Application.MessageBox('数据库表格指定字段未发现记录!','未发现记录',MB_OK);  
                      end  
  //上面这个判断根本就是多余,因为s绝对不是''----因为你已经在前面赋值了!  
   
   
  应该在query1.open之后写:  
  if   query1.recordcount   <   1   then     未发现记录!

再有,query1.sql.add()之前,应该至少写上:  
  query1.close;  
  query1.sql.clear;

问题解决了,谢谢~

OK,你太利索了!祝贺你!结贴吧!

没想到你结贴也这么快!这是一种好的作风!我喜欢!

query1.close;  
  query1.sql.clear;这个我写在了查询操作之前的..呵呵~谢谢你~  
  因为是新手很多问题都不知道的.所以麻烦你们多帮帮忙了

posted @ 2009-04-22 10:44 delphi2007 阅读(112) | 评论 (0)编辑 收藏

关于数据显示转化 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205193606277.html
我现在在做一个科室医生管理系统,在做表结构设计的时候,对于"有无中医专家""有无西医专家"均设成bit类型(SQL),想以1表示有,0表示无.但是转到前台的显示时,直接连接显示是"1""0"的.有什么办法能在DBGRID里显示照我的想法显示成有无呢?请指教

http://community.csdn.net/Expert/topic/5179/5179169.xml?temp=.4592401

在table(或query)的相应字段的OnGetText事件中这样写:  
   
  if   sender.Value=1   then   Text:='有'  
                                      else   Text:='无';

我用BDE连接数据库的,然后我在table中怎么没找到有OnGetText事件啊!!?

SQL查詢的時候直接CASE轉換不行麼?

我用BDE连接数据库的,然后我在table中怎么没找到有OnGetText事件啊!!?  
   
  ------------------------  
   
  不是数据集的事件,   是Field的事件

procedure   TForm1.TableLoachqz207GetText(Sender:   TField;   var   Text:   String;  
      DisplayText:   Boolean);  
  begin  
      if   Sender.Value   =   1   then  
          Text:='有中医'  
      else  
          Text:='无中医';  
   
      DisplayText   :=   True  
  end;

用DBGRIDEH

如果需要我有,lsl0201@126.com

总结:1)在SQL   select   的时候用Case  
                2)Dbgrid的时候用OnDrewCell重写

老冯..不好意思,是新手,我想问下procedure   TForm1.TableLoachqz207GetText(Sender:   TField;   var   Text:   String;  
      DisplayText:   Boolean);  
  这个句柄怎么得到?我还是不知道怎么寻找onGetText事件

问题解决了.谢谢大家~

我是新手,不好意思啦,楼主大哥  
  不能发帖子就在这里说好了,请路过的大哥帮帮忙。  
  问题是从   SQL   语句   SELECT   出来   的时候     是0.80185000,但是在fastreport中memo打印出来的时候是0.8018,请问怎么得到0.80185啊?后面的三位就不要了,小弟先谢谢了。  
 

哈..楼上这位怎么到处提问啊

不会啊,但是又想知道答案,当然到处问啦,呵呵

寄居蟹...呵呵

是不是要多回复了一定的数量才能发自己的帖子?

我已经告诉你发贴的方法了,你还不去自己发贴...你这样在别人的贴子上提问,很难得到别人回答

请问楼上的何为小类版块?这里不能发贴吗?

posted @ 2009-04-22 10:44 delphi2007 阅读(103) | 评论 (0)编辑 收藏

我的字符串比较函数没起作用???? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205175922278.html
最近老师要求我们模拟页面置换的先进先出,在进行页面置换的时候,我希望先对页面名称进行比较,一样的话,就没必要进行置换.  
   
  procedure   TForm1.Button3Click(Sender:   TObject);  
      var   h,m:integer;   flag:boolean;  
  begin  
   
            flag:=true;  
            for   h:=1   to   listbox1.ItemIndex   do  
            //   h作为新进页面与已有页面的比较的控制循环变量  
              begin  
                    if     sametext(edit2.Text,listbox1.Items[h])then  
                              begin  
                              flag:=false;   //   物理块中存在与新进页面一样的页面  
                              end  
                    else  
                              begin  
                              flag:=true;//新进页面在物理块中没有  
                                end;  
                end;  
          if   flag=false   then  
                  begin  
                  showmessage('页面已存在,不需要置换');  
                  edit2.Clear;  
                  edit2.SetFocus;  
                  end  
        else  
                  begin           //根据fifo算法   进行替换  
                  m:=i   mod   strtoint(edit1.Text);  
                  listbox1.Items[m]:=edit2.Text;  
                  edit2.Clear;  
                  edit2.SetFocus;  
                  i:=i+1;  
                  end;  
   
   
  end;  
   
  但是无论我输入什么变量,他会进行置换,不管是不是存在相同的页面,然而我也怀疑是sametext相同的话,返回的值是false,试过也不行,也用过(<>),和另外一个函数,但是都没用,感觉好像没进行比较这一步....???     请问大家这是怎么回事,多谢!!!!

//你的代码风格太差,难道你们老师就没说过你?  
  //你照着VCL里的代码风格编写  
  //这个问题关键是在循环中赋值又没有退出循环,那当然flag值就是最后一条判断出来的值  
  //参考如下代码:  
   
      flag   :=   True;  
      for   h   :=   0   to   Listbox1.ItemIndex   do  
      //   h作为新进页面与已有页面的比较的控制循环变量  
      begin  
          if   SameText(Edit2.Text,   Listbox1.Items[h])then  
          begin  
              flag   :=   False;   //   物理块中存在与新进页面一样的页面  
              Break;   //   <<<<<<<<<<<<<<<<<退出循环  
          end;  
      end;  
 

for   h:=1   to   listbox1.ItemIndex   do    
   
  -----------------------------------  
   
  你的问题是程序没有执行h作为新进页面与已有页面的比较的控制循环变量,而Flag的初始值为True,为什么没有执行呢,你把循环按下面改一下就可以了.  
   
  for   h:=0   to   pred(listbox1.Items.count)   do

谢谢你们   照你们的改后,程序可以达到我预期的效果了   zswang   :关于代码风格的问题,我以后会注意的   你的代码很精简,从中我也看出了我的问题.但是在循环控制的那个部分也要照sanmaotuo的改       呵呵,经过你们俩的指导,我学到了东西,谢谢

posted @ 2009-04-22 10:44 delphi2007 阅读(140) | 评论 (0)编辑 收藏

fastreport分组脚本问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205174746279.html
 
   
  现有一数据表如下:  
  a1         大连     234  
  a2         旅顺     567  
  a2         北京     213  
  a3         天津     987  
  我想分组为如下表:  
  -------------  
    大连     234  
  ------------  
        a2  
  -------------  
    旅顺     567  
    北京     213  
  ----------------  
              小计     780  
  ----------------  
    天津     987  
  ----------------  
   
  如果没有分组头,脚本还是比较好写的,在主数据项中写脚本即可  
      if   [LINE#]>1   then    
      begin  
          GroupFooter.Visible:=True;  
      end   else    
      begin  
          GroupFooter.Visible:=False;  
      end;        
  如果有分组头,就比较难下手了。  
  为何运行出错,提示出错']'expected  
     
   
   
   
   
   
   
       
 

up

up

up

up

posted @ 2009-04-22 10:44 delphi2007 阅读(599) | 评论 (0)编辑 收藏

如何在程序出错后继续运行出错的代码后面的代码? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205174624280.html
比如说    
  第一行  
  第二行  
  第三行  
  ......  
  第N行  
   
  如果在运行第二行的时候出错了,怎样让程序继续运行后面的代码?  
  谢谢!

第一行  
   
  Try  
      第二行  
  Except  
  End;  
   
  第三行  
  ......  
  第N行  
 

具體看看  
  Try   ...   Except   ...   End;  
  與  
  Try   ...   Finally   ...   End;  
   
  的說明文檔

我就是用了   try   和   except  
  但是之外的代码也可能产生异常。而我不想任何一句代码的异常而中断整个过程或是函数。  
  如果每行代码加   try   和   except   太麻烦了。

恐怕除了这种方式没有其他的方式了  
  但是实际工作的时候不可能每一步都会抛出异常把  
  不可能有这样的程序

to     jieguo(天下有眼)  
  可是拿不准哪句会出现错误的。如果那个过程很有多代码。

跟踪   测试..  
  分块   try  
 

可是拿不准哪句会出现错误的。如果那个过程很有多代码。  
   
  ------------------------------------------------------  
   
  那你的程序设计就有大大的问题了.

vividw(vividw)    
  跟踪   测试..  
  分块   try  
  --------------------  
   
  sanmaotuo(老冯)  
  那你的程序设计就有大大的问题了.  
   
  ---------------------  
   
  虽然尽量测试和避免错误的出现,可是难免有观察不到的地方嘛~~~  
  先放下这个问题不说。。。我说的问题能解决吗?

任何事情没有绝对的外部解决办法,从异常处理来说,try...try...except...finally是可以达到你的要求的,当然还可以加上具体异常的捕获处理(ON   XXEXCEPTION).异常的应用应该是一个独立的事务有一个异常处理,但如果你在一个独立事务处理里面到处都是异常处理那就是你的程序设计上有问题了.

谢谢   sanmaotuo(老冯)     的回复。  
  这是   VB   中的一点说明:  
   
  On   Error   Resume   Next   会使程序从紧随产生错误的语句之后的语句继续执行,或是从紧随最近一次调用含有   On   Error   Resume   Next   语句的过程的语句继续运行。这个语句可以置运行时错误于不顾,使程序得以继续执行。可以将错误处理程序放置在错误发生的地方,而不必将控件传输到过程中的其它位置。在调用另一个过程时,On   Error   Resume   Next   语句成为非活动的,所以,如果希望在例程中进行嵌入错误处理,则应在每一个调用的例程中执行   On   Error   Resume   Next   语句。  
   
  注意   当处理在访问其它对象期间产生的错误时,与其使用   On   Error   GoTo   指令,不如使用   On   Error   Resume   Next。每次和对象打交道,在不知道用代码访问哪个对象时,检查一下   Err   都会打消这种疑虑。可以确定是哪个对象产生错误(Err.Source   中指定的对象),也可以确定是哪个对象将错误代码放在   Err.Number   中。  
   
   
   
  --------------------------------------  
  现在我只要弄明白,Delphi中没有类似的语句就会结贴了。  
  当然   ,   Delphi   处理异常的功能比VB6强   ^_^

肯定有的啦~~       try   except   end     当try   except之间发现错误的时候执行   except   end     之间的代码

zuoansuifeng(静下心来好好研究)  
   
  如果   except   end   之间的代码出错呢?再嵌套?

如果   except   end   之间的代码出错呢?  
   
  try  
   
  except  
   
      try  
   
      finally  
   
      end;  
   
  end;

不好意思   打错了  
   
  try  
   
      try  
   
      finally  
   
      end;  
   
  except  
   
  end;  
 

to   zuoansuifeng  
   
  如果保护块内的一行代码出现问题,那么保护块内其他代码也就不能运行了

把程序分解一下,弄成一小块一小块的,出错就到那个出错的模块里找不就得了!!  
 

dovelee()  
   
  有些情况很难预测吧………………

一般来讲,都是用  
  try  
     
      except  
   
  就可以了  
    但是要找到出错的语句,  
    还是跟踪,往上找咯  
 

posted @ 2009-04-22 10:44 delphi2007 阅读(278) | 评论 (0)编辑 收藏

对象有没有类似于ZeroMemory的方法? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205174106281.html
把对象所包含的所有数据清零。  
  之前以为是CleanupInstance,但试了一下,不对。

没有

这么直接呀。。。  
  再考虑考虑?

有!  
   
  Object.free;

然后Object就==   nil了     呵

FillChar(Object,   szieof(Object),   0);

FillChar(Object,   szieof(Object),   0);  
  ----------  
  用了这个后,访问类的成员会出错

把对象所包含的所有数据清零。  
  ==================================================================================  
  都清0当然会出错,我是按搂住要求给的,是符合题意的.Free了就更出错哈,哈

补充,可以说,真正满足楼主要求的,可能就是FillChar,谁还有更直接的方法???

找到办法了  
  var  
      P:Pointer;  
  begin  
      P   :=   Pointer(integer(Obj)   +   4);  
      ZeroMemory(P,Obj.InstanceSize   -   4);  
   
  这样子就OK了,我试了没问题。  
  理由是,delphi里对象存储是头4个字节是虚方法表VMT,再往下才是其成员数据,因此,要清空对象的数据,起始位置是对象的地址偏移4个字节,大小是对象的大小-4

看看李维的<INDIDE   VCL   FRAME>   p46   line   7  
   
  ....Object   Pascal的对象模型会先初始化所有的内存内容为0.  
   
   
  FillChar(Instance^   ,InstanceSize,   0);

<Inside   VCL   FrameWork>

看看李维的<INDIDE   VCL   FRAME>   p46   line   7  
  ===========================================================================  
  老弟连页码行数都记得啊,不简单,哈哈

大哥好.不好意思.我的手边就是这本书.反复阅读着呢.

我给你发了个短信,准备潜水了,可能很长时间来不了了

delphi对象创建后,所有内存都为0,这个我知道。我就是想让对象在已经有了数据情况下,清空所有数据。  
  试了InitInstance方法,也是可以的。  
  不过用这个方法初始化对象时,又把虚方法表建一遍,那倒没必要了。上面的方法应该就够用了。

posted @ 2009-04-22 10:43 delphi2007 阅读(282) | 评论 (0)编辑 收藏

请教如何在窗体加载时指定其大小和位置? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205145939282.html
如题。

procedure   TForm1.FormShow(Sender:   TObject);  
  begin  
      Top:=20;  
      Left:=20;  
      Height:=100;  
      Width:=100;  
  end;

lihuasoft:按你的试了,weight和width都对,但窗体居中了  
  我是用整型赋值的,怎么不行呢?

看一下你窗体的属性:position  
  默认值是poDesigned  
  如果设置为poDesktopCenter,那就是在桌面范围内居中,你可以逐一试一下.

谢谢你,lihuasoft,以后还请都帮助

客气...互相学习

posted @ 2009-04-22 10:43 delphi2007 阅读(171) | 评论 (0)编辑 收藏

关于设置登陆窗口,新手 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205143722283.html
怎样实现系统设计时,用不同的帐户登陆~~简言之实现登陆窗口设计的代码该怎么写?我是新手

有多种方案,我这种算是抛砖引玉了:  
  创建一个工程Project1,两个窗体Form1,Form2。其中form2是登陆窗体,form1是主窗体。(窗体名字我没有改,就用form1,form2,勿笑)  
  --------------------  
  在form2上放一个按钮“登陆”:  
  procedure   TForm2.Button1Click(Sender:   TObject);  
  begin  
        //if   验证信息通过   then  
                  form2.ModalResult:=mrok;//关闭登陆窗,显示主窗体  
  end;  
  -------------------  
  修改工程文件如下:  
  program   Project1;  
   
  uses  
      Forms,  
      Unit1   in   'Unit1.pas'   {Form1},   //Form1   ==   主窗体  
      Unit2   in   'Unit2.pas'   {Form2};   //Form2   ==   登陆窗体  
   
  {$R   *.res}  
   
  begin  
      Application.Initialize;  
      form2:=tform2.Create(application);  
      form2.ShowModal;  
      Application.CreateForm(TForm1,   Form1);  
      form2.Hide   ;  
      form2.Release;  
      Application.Run;  
  end.  
  -------------------------------  
  以上你测试通过后,即可以丰富一下form2的身份验证处理部分了。关于身份验证部分,我就不回答了。

非常感谢~再冒昧地问下.身份验证是不是最初在数据库中要设置身份用户和密码的?

可以,你完全可以按你自己的设想去搞,逐渐积累经验,逐步找到更好的办法...

posted @ 2009-04-22 10:43 delphi2007 阅读(171) | 评论 (0)编辑 收藏

新手求助 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205141547284.html
对于一个系统设计怎样实现多个权限的登陆操作?如管理员和普通用户

搜索一下以前的帖子,很多的

权限设计方案很多的,偷懒的话就用一个数字来区分就可以了

简单的方法就是建立一个基本权限树表和用户权限表.   给你一个实例  
   
  基本权限树表  
   
  FPowerID                                         FPoweEName       FPowerParentID                 FPowerLevel       FUsed  
  00001                                         系统权限 00000                           1           0  
  0000100001                       业务管理 00001                           2           0  
  000010000100001                   基础数据管理 0000100001         3           0  
  00001000010000100001 参营基础数据 000010000100001         4           0  
  0000100001000010000100001 企业基础数据 00001000010000100001     5           0  
   
   
  用户权限表  
  FUserID               FPowerID       FPoweEName       FPowerParentID       FPowerLevel       FUsed  
  99999                     00001             系统权限             00000                 1             1  
 

我刚接触.那要实现窗口设计代码该怎么写呢?

找本基础的实例讲解什么的   先入个门吧  
  如果op也不熟的话   先学一下op语法  
  然后可以看看delphi自带的例子   就ok了

posted @ 2009-04-22 10:43 delphi2007 阅读(93) | 评论 (0)编辑 收藏

文件读写问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205132405285.html
我的文件是这样的  
   
  [配置]  
  00:01     你好  
  00:03     欢迎  
  00:14     光临  
  01:20     OK  
  01:23     BYE  
  [配置1]  
  00:02     你好1  
  00:033     欢迎1  
  00:50     光临1  
  01:22     OK1  
  01:26     BYE   1  
  其中   00:01   是时间   分和秒   怎么按这个指定的时间显示后面的字符了

read(f,s1)读出时间  
  read(f,s1)读出字符  
  readln(f)   换行

posted @ 2009-04-22 10:43 delphi2007 阅读(88) | 评论 (0)编辑 收藏

2个基础问题:如何修改PCHAR? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205132245286.html
1.如何增加字符到PCHAR?如:  
  p:pchar  
  GetWindowText(p....)  
  想在前面加上个'D'如何加?  
  (不要用STRING转换)  
   
  2.Delphi中最大数值类型是什么?  
  n:int64;  
  n:=24*256*256*256+19*256*256+204*256+26  
  编辑报错!!   如何解决?

第2个问题不会抱错,我刚测试了

function   CharAddToPchar(p:pchar;c:char):pchar;  
  var  
        arr:array   of   char;  
        pIndex:integer;  
        pTemp:Pchar;  
  begin  
        setlength(arr,length(p)+1);  
        for   pIndex:=0   to   length(p)-1   do  
                arr[pIndex]:=p[pIndex];  
        arr[length(p)]:=c;  
        result:=@arr[0];  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
        p:pchar;  
  begin  
        p:=pchar('abcdef');  
        showmessage(strpas(CharAddToPchar(p,char('a'))));  
  end;

上面是我对第一个问题的回答。其中,函数内部变量声明了一个pTemp是多余的,请删去。

重新改写了一个:  
  Procedure   CharAddToPchar(var   p:pchar;c:char);  
  var  
        arr:array   of   char;  
        pIndex:integer;  
  begin  
        setlength(arr,length(p)+1);  
        arr[0]:=c;  
        for   pIndex:=1   to   length(p)   do  
                arr[pIndex]:=p[pIndex-1];  
        p:=@arr[0];  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
        p:pchar;  
  begin  
        p:=pchar('abcdef');  
        CharAddToPchar(p,char('D'));  
        showmessage(strpas(p));  
  end;  
   
  与我在前面给出的那个有以下不同:  
  1、按楼主要求,把字符D加在了PCHAR指向的字串的前面;  
  2、使用了引用传值(最选给出的是函数,靠创建一个Pchar副本返回;而现在这个过程是直接改变原Pchar。  
  错误之处,请指正。

1.如何增加字符到PCHAR?如:  
  p:pchar  
  GetWindowText(p....)  
  想在前面加上个'D'如何加?  
  (不要用STRING转换)  
   
  PCHAR是个指向字符的指针,如果它指向一串字符串,那我们操作它所指的值时,可以通过指针访问.  
  如:  
  var  
      p:pchar;  
      str:string;  
  begin  
      str:='test';  
      p:=@str[1];  
      showmessage(p^);//---显示第一个字符  
      inc(p);  
      showmessage(p^);//---显示第二个字符  
  end;  
   
  如果要操作这个串,要用缓冲的办法,因为重新分配内空间才可以........  
  正如这样:(lihuasoft(学习低调做人)   (   )   信誉:100         Blog   所写函数)  
  重新改写了一个:  
  Procedure   CharAddToPchar(var   p:pchar;c:char);  
  var  
        arr:array   of   char;//--这个就是新的缓冲区.....  
        pIndex:integer;  
  begin  
        setlength(arr,length(p)+1);  
        arr[0]:=c;  
        for   pIndex:=1   to   length(p)   do  
                arr[pIndex]:=p[pIndex-1];  
        p:=@arr[0];  
  end;  
   
   
  2.Delphi中最大数值类型是什么?  
  n:int64;  
  n:=24*256*256*256+19*256*256+204*256+26  
  //--24*(2^24)+19*(2^16)+204*(2^8)+26  
  编辑报错!!   如何解决?  
   
  int64         8bytes     表示2的64次方;  
  Int64 -2^63..2^63-1 signed   64-bit

嘎嘎...辣椒...我多日不到群里去了

^__^  
  我也好些日子没有去群里面混了.

谢谢!  
   
  趁机再问1个小问题:(回答后立即结帐)  
  用POP3指令UIDL及RECR得到的MAIL内容好象都是编码后的例如(tbiBAdFOkBz86iTmgAAsd)  
  这种是什么编码方式?   如何解码??

估计是BASE64编码吧

奇怪!  
  为何pwidechar一用strlen就报错?  
  有何解决办法?

建议楼主重新发贴,利于别人回答。  
  因为你的新问题藏在旧贴里,别人很容易看不到。

回贴并不是义务  
  结贴却是一种美德

posted @ 2009-04-22 10:43 delphi2007 阅读(244) | 评论 (0)编辑 收藏

如何绘制类似仓库的平面位置图 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205115218287.html
如何绘制类似仓库的平面位置图,图中的每一个货物位置都是不规则的多边形,点击图中某一货物位置可以调用相应的Form显示不同的货物信息。

完全基于数据库的地图实现技术  
  QQ:4818472

posted @ 2009-04-22 10:43 delphi2007 阅读(137) | 评论 (0)编辑 收藏

请问"="的用法 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205114622288.html
请问"="的用法

??  
  就是等于嘛

就等于嘛  
  这个还要问-_#!

这个问题比较尖端,难道是传说中的"哥德八赫猜想"证明1+1=2?

"="为什么会是是等于

Object   Pascal中"="的用法(有别于   ":="   )!!!!!!!!

Object   Pascal中"="   相当于C++的"=="  
  相当于C++的"="   相当于Object   Pascal中":="

if   a=b   then   ...

=   就是等于  
  :=   赋值

好像有个给变量赋初值,声明枚举什么的

posted @ 2009-04-22 10:43 delphi2007 阅读(95) | 评论 (0)编辑 收藏

怎样读写一个二进制文件 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205105447289.html
怎样读写一个二进制文件,比如     2356EEDF23CDE79OCDEEFXBP     以二进制的形式写入到一个       任意格式的文件中     如       abc.dd     .并成读出来,谁能给个源码,就这些分了,谢谢。

http://delphi.about.com/od/fileio/a/untypedfiles.htm

http://delphi.about.com/od/fileio/a/fileof_delphi.htm  
  Understanding   Typed   Files

看不懂啊,再给一个

其实楼主耐心看一下上面仁兄给的两篇文章,应该能看懂的。即使看不懂,估计你应该能看懂文章中附带的例码。  
  第一篇讲的是用blockread()、blockWrite()读写未知格式(结构)的文件。提供了一部分代码。  
  第二篇讲的是读写一个自定义结构的文件。关于这种文件的操作,下面是我回过的一个贴,你可参考:  
  http://community.csdn.net/Expert/topic/5201/5201027.xml?temp=.578335

posted @ 2009-04-22 10:43 delphi2007 阅读(283) | 评论 (0)编辑 收藏

文本内容处理的问题,请教! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061205001316290.html
我有一个asp的文本文件,要从里面读取一部分内容,格式是固定的  
   
  279行   <a   href="detailInter~classid~1~userID~195005.asp"   target="_blank"   style="font-size:   12px;   font-family:   Verdana;color:   #333333"><strong>SICA</strong></a><br>  
  这行要读取     userID~后到.asp前的     ID号   195005  
   
  283行   <td   height="7"><span   class="companyDepot-01">MANZANA   9,   GALPON   51,   ZOFRI,   IQUIQUE</span></td>  
  这行要读取   <span   class="companyDepot-01"></span>之间的内容MANZANA   9,   GALPON   51,   ZOFRI,   IQUIQUE  
   
  286行   <td><div   align="center"   class="companyDepot-02">Mr.   FRANCISCO   LEE   W.</div></td>  
  这行要读取<div   align="center"   class="companyDepot-02"></dev>之间的内容Mr.   FRANCISCO   LEE   W.  
   
  287   <td><div   align="center"   class="companyDepot-03">ACHIAG@ACHIAG.TIE.CL</div></td>  
  这行要读取<div   align="center"   class="companyDepot-03"></dev>之间的邮址ACHIAG@ACHIAG.TIE.CL  
   
  请问如何处理啊?

if   +字串处理..

能具体一点吗   :)

帮你写一个,其他的自己照样子做吧!  
  var  
          TmpStr   :   String;  
          Start,   End   :   Integer;  
   
          ID   :   String;  
  begin  
          TmpStr   :=   '<a   href="detailInter~classid~1~userID~195005.asp"   target="_blank"   style="font-size:   12px;   font-family:   Verdana;color:   #333333"><strong>SICA</strong></a><br/>';  
           
          Start   :=   Pos   (   TmpStr,   'userID~'   );  
          End       :=   Pos   (   TmpStr,   '.asp'         );  
   
          if   (   Start   >   0   )   and   (   End   >   0   )   then  
                  ID   :=   Copy   (   TmpStr,   Start   +   7,   End   -   Start   );  
   
          .....  
  end;

呵呵,我也帮你写了一个函数,你试一下:  
  function   TForm1.SearchInAsp(AspFileName,StartSunStr,FinishSubStr:string):string;  
  var  
        AspFile:TextFile;  
        TempStr,TempStr2:String;  
  begin  
        result:='';  
        assignfile(aspfile,AspFileName);  
        reset(aspfile);  
        while   not   eof(aspfile)   do  
              begin  
              readln(aspfile,TempStr);  
              if   pos(StartSunStr,TempStr)>0   then  
                    begin  
                    while   (pos(FinishSubStr,TempStr)<1)   and   (not   eof(aspfile))   do  
                                begin  
                                readln(aspfile,TempStr2);  
                                TempStr:=TempStr+TempStr2;  
                                end;  
                    Result:=copy(TempStr,pos(StartSunStr,TempStr)+length(StartSunStr),pos(FinishSubStr,TempStr)-pos(StartSunStr,TempStr)-length(StartSunStr));  
                    end;  
              if   Result<>''   then   break;  
              end;  
        closefile(aspfile);  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
        edit1.Text:=self.SearchInAsp('c:\a.asp','userID~','.asp');  
  end;  
  //注意,在*.asp的html代码里,极可能出现<span>.....</span>等写在多行的情况(本函数已作这种处理)。也极可能出现行首有空格等情况(本函数未处理)。所以,实际应用中,你要考虑各种异常,再改进。

谢谢,这里好人真多,谢谢各位啊     :)

posted @ 2009-04-22 10:43 delphi2007 阅读(88) | 评论 (0)编辑 收藏

只要你做了,就有分了,谢谢大家帮忙了 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061204230319291.html
CSDN的兄弟大哥帮帮忙  
   
  江西省十大文明执法人员开始抽票了,为了我们景德镇瓷都人的荣誉,请投我们家乡人一票,他是9号,环保局的余志华,  
   
  投票地址:  
   
  http://www.jxgdw.com/jxgd/jxtv/huodong/wmzf/wmzfindex.php  
   
  (选足十人才能投票)  
   
  投票有分,一票一分,(一IP只能投一次,如需多投须刷新IP)  
   
 

jf

自己写个投票程序不就可以了      
  3个月前我们技术总监也参加类似的评选      
 

1个IP投一次   你就用代理服务器解决      
  要选10个人的话你让程序其中有一个选你们老总   其他的9个随即选不就可以了吗      
 

这样投票还算文明吗?

自己写个投票程序不就可以了  
  1个IP投一次   你就用代理服务器解决      
  要选10个人的话你让程序其中有一个选你们老总   其他的9个随即选不就可以了吗      
       
   
  3个月前我们技术总监也参加类似的评选     当时我就写了一个

to   :   zuoansuifeng(饭是用来吃的,老婆是用来过日子的,分当然是用来抢的):  
  求技术资料,原代码就更爽了,挖卡卡~~~~~~~~~~~~~~  
 

嘎嘎!@

up

up

jie   fen

局长???  
  俺们……

顶一下

posted @ 2009-04-22 10:43 delphi2007 阅读(93) | 评论 (0)编辑 收藏

请教程序终止问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061204224249292.html
1.新建一个   application   主窗口Form1  
  2.主窗口中放置一个Button,点击该Button,Form1.free,同时显示另外一个窗口Form2  
  3.关闭Form2,程序进程仍然在运行  
   
  我想问的时,怎么样才能关闭Form2的时候,将整个application进程终止。  
  谢谢

//form2.onclose  
  application.terminate;

posted @ 2009-04-22 10:43 delphi2007 阅读(112) | 评论 (0)编辑 收藏

delphi小数位置 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061204220041293.html
TBCD   类型具体怎么用呢?  
  现在我用delphi定义的是double类型,我在excel里面算的时候能显示到小数点后16,17位置,为什么在delphi里就显示10位?  
  大家帮帮忙  
 

试一下这个  
   
  formatfloat('0.0000',   a)     这个是个4位的!!依此类推!!!

posted @ 2009-04-22 10:43 delphi2007 阅读(275) | 评论 (0)编辑 收藏

仅列出标题
共34页: First 2 3 4 5 6 7 8 9 10 Last