在程式中將ipo定義為整型integer,即ipo:integer,現有一窗體名為frmShow;我的語句如下:
ipo:=frmShow.ShowModal;就這一條語名,原意是想將窗體frmShow的顯示類型號碼賦給ipo,但結果出錯,這樣怎樣修改才能達到我的目的。謝謝!

解决方案 »

  1.   

    ShowModal没问题啊。例如下面的代码
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      with TForm2.Create(Self) do
        try
          i := ShowModal;
        finally
          Free;
        end;//end of try
      ShowMessage(IntToStr(i));
    end;
    --------------------
    楼主是不是忘记Create了
      

  2.   

    dulei115() ( ) 信誉
    用你的方法,加了create,還是一樣,錯誤提示為:
    Access Violation at address 0078DA1E in module '程式名.exe',Read of address 00000000,請指教,謝謝!
      

  3.   

    你确定是因为ipo:=frmShow.ShowModal;导致的出错么?
      

  4.   

    整段代碼如下:
    procedure TfrmDetailProvidePurchase.accOpenExecute(Sender: TObject);
    var
    iProviderID:integer
    begin
      inherited;
    iProviderID:=frmProviderFilter.showmodal;
    if iProviderID>0 then
    begin
    if QinfoBase.Locate('fId',iProviderID,[]) then
       dsInfoBase.Enabled :=True;
    with pProvidePurchase do
    begin
    Parameters.ParamByName('@ProviderID').Value := iProviderID;
    Parameters.ParamByName('@BeginDate').Value := DateTimePicker1.Date ;
    Parameters.ParamByName('@EndDate').Value := DateTimePicker2.Date ;
    if active then Requery  else Open;
    end;
    end;
    end;
      

  5.   

    上面的代码,两个地方有问题,frmProviderFilter.showmodal前一定要有create:
    frmProviderFilter := frmProviderFilter.create(selef);
    用完后还要frmProviderFilter.Free;看代码,楼主是想用showmodal返回一个整形的值ProviderID,那你frmProviderFilter里面怎样给showmodal赋值的?
    正确方法是在frmProviderFilter中写:ModalResult := 9999;//返回9999示例:
    Form1中:
    use Unit2procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      with TForm2.Create(Self) do
        try
          i := ShowModal;
        finally
          Free;
        end;//end of try
      ShowMessage(IntToStr(i));
    end;
    -------------------------------------------
    Form2中:
    procedure TForm2.Button1Click(Sender: TObject);
    begin
      ModalResult := 9999;
    end;
      

  6.   

    dulei115() ( )
    很感謝你的幫助,用你所說的方法我試過,還是不行,一樣的出錯信息,真不知那裡有問題?這應該與繼承窗體沒多大的關系吧,我的FORM2是第三層繼承。
      

  7.   

    应该不关继承的事,你按F7一步步调试看看错误在哪。可能根本就不是ShowModal的错,一般情况下Delphi中直接运行时,如果Form2中某个地方出读地址错,Delphi显示报错的地方都会停在Form2.ShowModal;这条语句处,而不是Form2的代码中。
      

  8.   

    首先,把你要显示的对话框的按钮的modalresult设置为mrOK,mrCancel等值,然后调用create创建窗体,然后使用你的ipo:=frmshow.showmodal()
    判断ipo=mrOK
    就OK了