会计凭证输入ActiveX控件是本人用Delphi 6.0做出来的一个控件,在Delphi下使用一切正常,但本人不会VC,会用Activex控件的进来看一下,这个会计凭证控件在VC下能不能用正常使用:
1)、控件使用了4个自定义事件On_GetAccText(取会计科目代码对应的科目名称),On_GetCy(取科目核算币别),On_GetRate(取科目汇率),On_validCy(验证科目有否核算指定币别),在VC下如何使用,其中On_GetAccText在Delphi 6.0代码如下:
procedure TForm1.CNPZGridPro1_GetAccText(Sender: TObject;
  const sAccID: WideString; var sResult: WideString);
begin
        sResult:=sAccID+' 会计科目';//作用是在用户输入的科目代码后加上科目名称,这里以' 会计科目'代替;
end;
On_GetAccText在VC6.0代码如下:
void CTest04Dlg::OnGetAccTextCnpzgridpro1(LPCTSTR sAccID, BSTR FAR* sResult) 
{
// TODO: Add your control notification handler code here
         //sResult:=sAccID+' 会计科目' 用VC怎么写?
}
4个事件的VC代码,能写一个的得25分;
2)、控件DEMO下有用Delphi6.0写的DEMO,能用VC重写的另开贴独得200分。
控件下载地址:http://www.delphifans.com/SoftView/SoftView_610.html
谢谢各位,分数先搞定的先得,绝不食言!!!

解决方案 »

  1.   

    CString strTmp;
    strTmp = sAccID;
    strTmp += "会计科目";
    *sResult = strTmp.AllocSysString(这个函数具体名字忘了)
    C语言的字符串操作比较麻烦
      

  2.   

    新建一个对话框工程,在对话框上插入一个ActiveX控件,即你的CNPZGRID控件,在控件上点鼠标右键,选择“添加事件处理程序”,利用VC类向导添加事件处理,“消息类型”选择“_GetAccText”,默认的函数处理程序名称为“_GetAccTextCnpzgrid1”,“类列表”中选择你的对话框类,然后点击“添加编辑”,在代码中void CA...lg::_GetAccTextCnpzgrid1(LPCTSTR sAccID, BSTR* sResult)
    {
        // TODO: 在此处添加消息处理程序代码
        CString strResult;
        CString strAccID(sAccID);
        if (strAccID == "1001")
            strResult = _T("1001 现金");
        else if (strAccID == "1002")
            strResult = _T("1002 转帐");
        else
            strResult = _T("错误");    *sResult = strResult.AllocSysString();
    }
      

  3.   

    to Mackz(在相互) 
    哇,看来你对会计还挺熟的,我是注册会计师,有会计方面问题可以交流一下^_^
      

  4.   

    谢谢楼上的二位,对VC的字符串操作有点感觉了,同时贴出另三个自定义事件的DELPHI码,以兑现承诺。procedure TForm1.CNPZGridPro1_GetCy(ASender: TObject;
      const sAccID: WideString; var sResult: WideString);//sAccID为会计科目代码
    begin
            sresult:='RMB';
            if upperCase(copy(sAccID,1,1))='W' then //代码首位为W则可以核算外币,否则只能核算人民币
                    sresult:='USD';
    end;procedure TForm1.CNPZGridPro1_GetRate(ASender: TObject;
      const sCy: WideString; var fResult: Double);//sCy为币别
    begin
            fresult:=1;//RMB VS 记账本位币 为1
            if uppercase(sCy)='USD' then fresult:=8.2767;USD VS RMB 为8.2767
    end;procedure TForm1.CNPZGridPro1_ValidCy(ASender: TObject; const sAccID,
      sCy: WideString; var bResult: WordBool);
    begin
            bresult:=false;
            if uppercase(sCy)='RMB' then bresult:=true;//所有科目均可核算RMB
            if  upperCase(copy(sAccID,1,1))='W' then //W开头的科目可核算USD
                if uppercase(sCy)='USD' then
                            bresult:=true
                    else
                            bresult:=false;
    end;