给大家拜个晚年:大家新年好!下面是我在寒假做程序时遇到的问题,都是难了我一个假期的东西,有一定难度,各位在帮忙解答时,用大写一二表示大题号,用小写12表示内部小问题。谢谢了!//==================================================================
一、小弟想做一个实用小程序,有如下的一些内容(见下)   ……
   {S1}+{V1}+{V2}+{S2}:3,1.321819e-003%
   ……
   {S1V}+{V1}+{V2}+{S2}:1,4.406063e-004%
   ……  程序是这样的:冒号后面有个数字,首先求出所有数字的和,然后用每一行的数字去除这个总和,得到就是逗号后面的百分数。  我想用RichEdit组件实现这个功能,构思是:一行一行的取,先从头取出一行,然后用strstr(line_content.c_str(),":"来判断是否有冒号,如果有的话,就取出后面的数字加到总和中去;如果没有则继续下一行。取出总和后,然后再运行求百分比程序,每求出一行,就在该行的后面加上这个百分数,并将他写道另一个RichEdit中,RichEdit_2->Lines->Add()。  可是我遇到的问题是:1。如何取出一行并转到下一行?2。如果第一个问题解决了,那么如何取出冒号后的数字?  当然了,如果大家有好的方法,请不吝赐教,小弟不胜感激!//=================================================================
二、 如何找到光盘的磁盘?
   小弟做了一个软件,想做成光盘出售,为了保护版权,小弟决定通过用光盘的磁盘号加密来实现软件的保护,即:先取出光盘的磁盘号,然后进行加密,加密后得到的字符串就是软件的安装序列号,这样可以防止用户的光盘拷贝了。
 
   遇到的问题:
   1. 光盘未刻录以前的序列号和刻录之后的序列号是否一致?
   2. 如何用程序自动找到光盘驱动磁盘并取出盘符,如:F:,并进行光盘是否插入的判断?//==================================================================
三、 如何将一个DBGrid分别导出为Excel和网页两种形式?//==================================================================
四、关于dll文件的几点疑问:   1. dll文件如何动态装入?(我看过几篇文章,都没有实现,您能否给详细的解释一下?)
   2. 如果我想将一个事件装入dll,如:Button1Click 装入dll,其中包含了本窗体和其他窗体的一些内容,这样的话我该怎样实现?//==================================================================
五、事件能否共用?   有些事件,如Button1与Button2的Click事件可能一样,如果在它们的OnClick事件中都写上一样的内容的话,程序就会显得臃肿,有没有简便的方法?如函数的直接调用?//==================================================================
六、如何自动生成组件?    做一个课程输入表单,可是有的学期是六门课,有的学期是七门,如何根据数字——6或者7来自动生成edit组件,如果是6,那就定义6个edit组件,如果是7就定义7个edit组件,如何实现?//------------------------------------------------------------------
小弟电子邮件是:[email protected],如果有好的程序例子,希望能给小弟发一份,谢谢!最后,非常感谢大家的热心与帮助,谢谢!

解决方案 »

  1.   

    一:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      int Pos1,Pos2,Number;
      AnsiString Line;
      for (int I = 0; I < RichEdit1->Lines->Count; I++)
      {
        Line = RichEdit1->Lines->Strings[I];
        Pos1 = Line.AnsiPos(";");
        Pos2 = Line.AnsiPos(",");
        if ((Pos1 != 0)&&(Pos2 != 0)&&(Pos2 > Pos1))
        {
          Number = StrToInt(Line.SubString(Pos1+1, Pos2-Pos1-1));
          ShowMessage(IntToStr(Number));
        }
      }
    }—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    二:
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      String Drive;
      for (char A = 'A'; A <= 'Z'; A++)
      {
        Drive = String(A) + String(':');
        if (GetDriveType(Drive.c_str()) == DRIVE_CDROM)
        {
          ShowMessage(A);
          if (_chdrive(A-64) != 0)
          {
            ShowMessage("未准备好");
          }
        }
      }
    }
    —————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  3.   

    三:自己写代码了
    四:搜索一下,这样的例子很多
    五:可以共用。在Button2的OnClick中选择Button1OnClick行了—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  4.   

    一个人连续回复不能超过三次。
    六:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      I,Count,L: Integer;
    begin
      Count := 6;
      L := 0;
      for I := 1 to Count do
      begin
        with TEdit.Create(Self) do
        begin
          Name := 'Edit' + IntToStr(I);
          Parent := Self;
          Inc(L,100);
          Left := L;
          Top := 30;
          Width := 50;
        end
      end;
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————