本人刚开始打算用delphi调用surfer绘制等值线,后来由于在delphi中有些功能做不出来,而VB可以。所以想通过VB过度下。希望大侠帮忙解答下

解决方案 »

  1.   

     对你的观点完全不赞同,DELPHI做不出VB能做的东西?这句话应该说反了吧?
    在DELPHI作画可以用画布CANVAS对象 画出你想得到要画的东西,高级点的可以直接使用D3D;另外你调用DLL不成功大多都是参数类型问题,自己去看看还有就是在D中调用DLL函数需要再后面加上STDCALL;
      

  2.   

    楼上的误解我了,我知道delphi的功能很强大的,而且绘图比VB强大。现在我是调用surfer绘图(一种绘图软件),该软件的是用VB写的。在delphi中转换时感觉有的做不出来。具体问题你帮忙看看。
    var
      Form1: TForm1;
      CustomLevels:array[0..6]of double;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var
      SurferApp,plot,shapes,ContourMap,ContourMapFrame1,Levels:Variant;
      i:integer;
    begin
      SurferApp:=CreateOleObject('surfer.Application');//打开Surfer
      ......
      CustomLevels[0]:=33;
      CustomLevels[1]:=47;
      CustomLevels[2]:=56;
      CustomLevels[3]:=67;
      CustomLevels[4]:=83;
      CustomLevels[5]:=91;
      CustomLevels[6]:=0;
      Levels:=ContourMap.Levels;//取得等值线等级
      Levels:=VarArrayCreate([0,11], varVariant);
      for i:=0 to 6 do
      begin
        levels.set(Levels[i]:=CustomLevels[i]);
      end;
    end;
    end.
    此处“levels.set(Levels[i]:=CustomLevels[i]);”报错
    “[Error] tianjiaz.pas(68): Type not allowed in Variant Dispatch call”
    因为之前已将Levels定义了,所以赋值肯定出问题。而这个功能在VB中就能很好的实现。所以现在想通过VB过度下