procedure TSG_Form.SpeedButton1Click(Sender: TObject); 
begin 
  CurrentSGWave := (Sender as TSpeedButton).Tag; 
  SetupWavePara_Btn.Enabled := True;   ReDraw_timer.Enabled := False; 
  if (CurrentSGWave = 0) or (CurrentSGWave = 6) or (CurrentSGWave = 7) then 
  begin 
    SetupWavePara_Btn.Enabled := False; 
    ReDraw_timer.Enabled := True; 
  end; 
  if SGSendWave then 
  begin 
    DownLoad; 
    DrawWave(Wave_Pic); 
  end 
  else 
    DrawWave(Wave_Pic); 
end; procedure TSG_Form.TrigerType_CBChange(Sender: TObject); 
begin 
  case TrigerType_CB.ItemIndex of 
    0: SGSetConByte := SGSetConByte and $fb;    // 1111 1011  内触发 
    1: SGSetConByte := SGSetConByte or $06;      // 0000 0110  外触发上升沿 
    2: begin 
        SGSetConByte := SGSetConByte or $04; 
        SGSetConByte := SGSetConByte and $fd;  // 1111 1101  外触发下降沿 
      end; 
  end; 
  SetCON(SGSetConByte, 0); 
end; procedure TSG_Form.Frequency_EditExit(Sender: TObject); 
begin 
  try 
    SGFrequency := StrToFloat(Frequency_Edit.Text); 
    if SGSendWave then 
    begin 
      DownLoad; 
      DrawWave(Wave_Pic); 
    end 
    else 
      DrawWave(Wave_Pic); 
  except 
    Frequency_Edit.SetFocus; 
    Frequency_Edit.Text := FloatToStr(SGFrequency); 
    Application.MessageBox('请输入正确的频率!', '输入错误', MB_OK + MB_ICONERROR); 
  end; 
end; procedure TSG_Form.Frequency_EditKeyDown(Sender: TObject; var Key: Word; 
  Shift: TShiftState); 
begin 
  if key = 13 then (Sender as TEdit).OnExit(Sender); 
end; procedure TSG_Form.Amplitude_EditExit(Sender: TObject); 
begin 
  try 
    SGAmplitude := StrToFloat(Amplitude_Edit.Text); 
    if SGSendWave then 
    begin 
      DownLoad; 
      DrawWave(Wave_Pic); 
    end 
    else 
      DrawWave(Wave_Pic); 
  except 
    Amplitude_Edit.SetFocus; 
    Amplitude_Edit.Text := FloatToStr(SGAmplitude); 
    Application.MessageBox('请输入正确的幅度!', '输入错误', MB_OK + MB_ICONERROR); 
  end; 
end; procedure TSG_Form.YOffset_EditExit(Sender: TObject); 
begin 
  try 
    SGYOffset := StrToFloat(YOffset_Edit.Text); 
    if SGSendWave then 
    begin 
      DownLoad; 
      DrawWave(Wave_Pic); 
    end 
    else 
      DrawWave(Wave_Pic); 
  except 
    YOffset_Edit.SetFocus; 
    YOffset_Edit.Text := FloatToStr(SGYOffset); 
    Application.MessageBox('请输入正确的Y轴偏移!', '输入错误', MB_OK + MB_ICONERROR); 
  end; 
end; procedure TSG_Form.SingleWave_RBClick(Sender: TObject); 
begin 
  if (Sender as TCheckBox).Checked then 
    SGSetConByte := SGSetConByte or $01    //单波 
  else 
    SGSetConByte := SGSetConByte and $fe;  //多波 
  SetCON(SGSetConByte, 0); 
end; procedure TSG_Form.UpDown1Click(Sender: TObject; Button: TUDBtnType); 
var 
  i: integer; 
begin 
  if Button = btNext then 
  begin 
    try 
      i := StrToInt(YOffset_Edit.Text); 
      if i < 10000 then 
        YOffset_Edit.Text := IntToStr(i + 1); 
      YOffset_Edit.OnExit(YOffset_Edit); 
    except 
      YOffset_Edit.SetFocus; 
      YOffset_Edit.Text := FloatToStr(SGYOffset); 
      Application.MessageBox('请输入正确的Y轴偏移!', '输入错误', MB_OK + MB_ICONERROR); 
    end; 
  end; 
  if Button = btPrev then 
  begin 
    try 
      i := StrToInt(YOffset_Edit.Text); 
      if i > -10000 then 
        YOffset_Edit.Text := IntToStr(i - 1); 
      YOffset_Edit.OnExit(YOffset_Edit); 
    except 
      YOffset_Edit.SetFocus; 
      YOffset_Edit.Text := FloatToStr(SGYOffset); 
      Application.MessageBox('请输入正确的Y轴偏移!', '输入错误', MB_OK + MB_ICONERROR); 
    end; 
  end; 
end; procedure TSG_Form.Knob1Change(Sender: TObject); 
var 
  tpos, ttag: integer; 
  r: real; 
begin 
  SGSendWave := false; 
  tpos := (Sender as TKnob).Position; 
  ttag := (Sender as TKnob).Tag; 
  if tpos > ttag then 
  begin 
    try 
      r := StrToFloat(Frequency_Edit.Text); 
      if r < 12000000 then 
        Frequency_Edit.Text := format('%8.0f', [r+1]); 
    except 
      Frequency_Edit.SetFocus; 
      Frequency_Edit.Text := FloatToStr(SGFrequency); 
      Application.MessageBox('请输入正确的频率!', '输入错误', MB_OK + MB_ICONERROR); 
    end; 
  end; 
  if tpos < ttag then 
  begin 
    try 
      r := StrToInt(Frequency_Edit.Text); 
      if r > 1 then 
        Frequency_Edit.Text := format('%8.0f', [r-1]); 
    except 
      Frequency_Edit.SetFocus; 
      Frequency_Edit.Text := FloatToStr(SGFrequency); 
      Application.MessageBox('请输入正确的频率!', '输入错误', MB_OK + MB_ICONERROR); 
    end; 
  end; 
  (Sender as TKnob).Tag := (Sender as TKnob).Position; 
end; procedure TSG_Form.Knob2Change(Sender: TObject); 
var 
  r: real; 
  tpos, ttag: integer; 
begin 
  SGSendWave := false; 
  tpos := (Sender as TKnob).Position; 
  ttag := (Sender as TKnob).Tag; 
  if tpos > ttag then 
  begin 
    try 
      r := StrToFloat(Amplitude_Edit.Text); 
      if r < 10.0 then 
        Amplitude_Edit.Text := format('%2.3f', [r+0.007]); 
    except 
      Amplitude_Edit.SetFocus; 
      Amplitude_Edit.Text := FloatToStr(SGAmplitude); 
      Application.MessageBox('请输入正确的幅度!', '输入错误', MB_OK + MB_ICONERROR); 
    end; 
  end; 
  if tpos < ttag then 
  begin 
    try 
      r := StrToFloat(Amplitude_Edit.Text); 
      if r > 0.007 then 
        Amplitude_Edit.Text := format('%2.3f', [r-0.007]); 
    except 
      Amplitude_Edit.SetFocus; 
      Amplitude_Edit.Text := FloatToStr(SGAmplitude); 
      Application.MessageBox('请输入正确的幅度!', '输入错误', MB_OK + MB_ICONERROR); 
    end; 
  end; 
  (Sender as TKnob).Tag := (Sender as TKnob).Position; 
end; procedure TSG_Form.Knob2MouseUp(Sender: TObject; Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer); 
begin 
  SGSendWave := true; 
  Amplitude_Edit.OnChange (Amplitude_Edit); 
end; procedure TSG_Form.Knob1MouseUp(Sender: TObject; Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer); 
begin 
  SGSendWave := true; 
  Frequency_Edit.OnChange (Frequency_Edit); 
end; end.

解决方案 »

  1.   

    这些是delphi的form里的控件事件,vc里没有机制可以这么简单的对应的,除非把它作为需求用vc重新写一遍如果转为c++builder还差不多,只是语言的转换
      

  2.   

    把这改成一个动态库给VC去调 或做成一个OCX给VC去调用就省事多了
      

  3.   

    在delphi下把上面的内容封装成DLL,在C++中调用
      

  4.   

    一个一个转,用mfc添加事件写贝!
      

  5.   

    转成VC代码只能一个一个转了,转成C++Builer就直接编译pas文件到hpp就可