用 Delphi 做个发信机

     hai,大家好,我是梦寻,说来这应算是我的第二次发帖了,这回小梦给大家带来的是一个发信机,不知大家喜不喜欢。如果不满意的话,不要紧,您就狠狠的训梦寻一顿。Ok,如果您认为还可以的话请别忘了投梦寻一票哦,小梦先在这说声谢谢了。^_^

    ok,还是那句老话,转入正题,现在我们就来做一个发信机。

首先我们应在工程中加入以下元件。

组件名 caption           关联的组件
Label1 邮件服务器地址:    Edit1
Label2 帐号名:           Edit2
Label3 端口号:           Edit3
Label4 收信群体服务器地址:Edit4
Label5 收信者名称:       ComboBox1
Label6 信件主题信息:     Edit5
Label7 所要发送信件:     Edit6
Label8 信件附件路径:     ListBox1
Label9 发信显示的信息名:  Edit8
Label10 发信人 Email 地址:Edit9
CheckBox1 穷举式发信 
Button1 开始发信 
Button2 读入字典文件 
Button3 ...               Edit6
Button4 增加/             ListBox
Button5 清除              ListBox
Panel1  
Panel2  
StatusBar1  
OpenDialog1  
NMSMTP1  
ListBox1  

好的,当我们加完了以上所有的组件后,并编好位置后,接下来我们就可以把以下代码以覆盖的形式拷入Delphi 的代码编辑栏中。

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Psock, NMsmtp, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    NMSMTP1: TNMSMTP;
    Panel1: TPanel;
    Label9: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Label10: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit6: TEdit;
    Edit5: TEdit;
    Button3: TButton;
    Button4: TButton;
    Panel2: TPanel;
    Label1: TLabel;
    Label4: TLabel;
    Edit4: TEdit;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    CheckBox1: TCheckBox;
    Label5: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    StatusBar1: TStatusBar;
    OpenDialog1: TOpenDialog;
    ListBox1: TListBox;
    Edit1: TEdit;
    Button5: TButton;
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure NMSMTP1Success(Sender: TObject);
    procedure NMSMTP1Failure(Sender: TObject);
    procedure SendNextmail(var datteinc:integer);
    procedure Button1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure NMSMTP1ConnectionFailed(Sender: TObject);
    procedure NMSMTP1ConnectionRequired(var Handled: Boolean);
    procedure NMSMTP1InvalidHost(var Handled: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Edit8KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit9KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit6KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit5KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit4KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure helpshow;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  sendsuc,sendfal,cursennum,totaco:integer;
  connal,startsen:boolean;
implementation

{$R *.DFM}
procedure TForm1.helpshow;
begin
showmessage(
#13+'┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓'+#13+
'┃  在使用本发信机发信时,应先作完以下几项:                     ┃'+#13+
'┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫'+#13+
'┃    1 在收信地址栏中输入收信群体的地址                        ┃'+#13+
'┃      例:收信体为 xxx@yyy.nnn 则应在其中填入:yyy.nnn          ┃'+#13+
'┃                                                              ┃'+#13+
'┃    2 由于本发信机仅是个范例故而不具备有穷举发信功能,因此您应┃'+#13+
'┃      在收信栏中手动输入收信者名或读入一字典文件,格式举例如下┃'+#13+
'┃      例,发给 xx1、xx2   则每输完一个,按回车键一次)          ┃'+#13+
'┃                                                              ┃'+#13+
'┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫'+#13+
'┃    本发信机仅做为一个范例,如果您用它来做一些不合法的事情,  ┃'+#13+
'┃ 一切后果自行负责.                                            ┃'+#13+
'┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛'+#13+
'      Copy(R)ight by hhq,2001.02.07     HomePage:www.suye.8u8.com');
end;

procedure TForm1.SendNextmail(var datteinc:integer);
begin
if ComboBox1.Items.Count>cursennum then
   begin
   inc(datteinc);
   statusbar1.Panels[0].Text:='总发送了('+inttostr(sendsuc+sendfal)+')次';
   statusbar1.Panels[1].Text:='成功发送('+inttostr(sendsuc)+')封';
   statusbar1.Panels[2].text:='当前正发送:'+combobox1.Items.Strings[cursennum]+'@'+edit4.Text;
   ComboBox1.text:=ComboBox1.items.strings[cursennum];
   inc(cursennum);
   NMSMTP1.PostMessage.Attachments.AddStrings(listbox1.Items);
   NMSMTP1.PostMessage.ToAddress.Add(combobox1.Items.Strings[cursennum]+'@'+edit4.Text);
   NMSMTP1.SendMail;
   end else
   begin
   startsen:=false;
   button1.Caption:='开始发信';
   showmessage('请读入新发信进程以便进行信件发送。'+#13+'       (按 F1 键可获得帮助信息)');
   edit1.Enabled:=true;
   edit2.Enabled:=true;
   edit3.Enabled:=true;
   edit4.Enabled:=true;
   combobox1.Enabled:=true;
   button2.Enabled:=true;
   button1.Enabled:=false;
   edit4.SetFocus;
   end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if opendialog1.Execute then
    begin
    edit6.text:=opendialog1.FileName;
    NMSMTP1.PostMessage.Body.LoadFromFile(edit6.text);
    end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if opendialog1.Execute then
  begin
  ListBox1.Items.Add(opendialog1.filename);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if opendialog1.Execute then
begin
button1.Caption:='开始发信';
button1.Enabled:=true;
startsen:=false;
sendsuc:=0;
sendfal:=0;
cursennum:=0;
ComboBox1.Items.LoadFromFile(opendialog1.FileName);
ComboBox1.text:=ComboBox1.items.strings[0];
totaco:=combobox1.Items.Count;
statusbar1.Panels[3].text:='总共('+inttostr(totaco)+')封';
end
  else
   begin
   showmessage('由于您未选择字典文件,因此请您在收信栏中手工填加。');
   combobox1.SetFocus;
   end;
end;

procedure TForm1.NMSMTP1Success(Sender: TObject);
begin
if  startsen then SendNextmail(sendsuc);
end;

procedure TForm1.NMSMTP1Failure(Sender: TObject);
begin
if  startsen then SendNextmail(sendfal);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if edit4.text='' then
  begin
  showmessage('请在收信服务器栏中填入收信群体的服务器'+#13+
              '  例如:要寄到 xxx@yyy.nnn 则填入 yyy.nnn');
  edit4.SetFocus;
  end
   else
    if combobox1.text='' then
    begin
    showmessage('请读入地址字典文件。');
    button2.SetFocus;
    button2.Click;
    end
else
begin
if startsen then
   begin
     startsen:=false;
     button1.Caption:='继续发信';
     edit1.Enabled:=true;
     edit2.Enabled:=true;
     edit3.Enabled:=true;
     edit4.Enabled:=true;
     combobox1.Enabled:=true;
     button2.Enabled:=true;
     end
    else
      begin
      edit1.Enabled:=false;
      edit2.Enabled:=false;
      edit3.Enabled:=false;
      edit4.Enabled:=false;
      combobox1.Enabled:=false;
      button2.Enabled:=false;
      startsen:=true;
      NMSMTP1.Host := Edit1.Text;
      NMSMTP1.Port := StrToInt(Edit3.Text);
      NMSMTP1.UserID := Edit2.Text;
     button1.Caption:='暂停发信';
{if not connal then
  begin
  NMSMTP1.Connect;
  connal:=true;
  showmessage('yes');
  end;}
  NMSMTP1.PostMessage.FromAddress := Edit9.Text;
  NMSMTP1.PostMessage.FromName := Edit8.Text;
  NMSMTP1.PostMessage.Subject := Edit5.Text;
  SendNextmail(sendsuc);
end;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  NMSMTP1.Abort;
end;

procedure TForm1.NMSMTP1ConnectionFailed(Sender: TObject);
begin
 ShowMessage('连接失败');
   connal:=false;;
end;

procedure TForm1.NMSMTP1ConnectionRequired(var Handled: Boolean);
begin
  If MessageDlg('您还未连线是否进行连接', mtConfirmation, mbOkCancel, 0) = mrOk then
  Begin
    Handled := TRUE;
    NMSMTP1.Connect;
  End;

end;

procedure TForm1.NMSMTP1InvalidHost(var Handled: Boolean);
var
tmpstr:string;
begin
  If InputQuery('输入邮件服务器地址!', '请输入邮件服务器地址:',tmpstr) then
  Begin
    NMSMTP1.Host := tmpstr;
    edit1.text:=tmpstr;
    Handled := TRUE;
  End;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 connal:=false;
 startsen:=false;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
tmpstr:string;
begin
    tmpstr:=edit1.text;
    NMSMTP1.Host := tmpstr;
 end;
procedure TForm1.Edit2Change(Sender: TObject);
begin
  NMSMTP1.UserID := Edit2.Text;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
ListBox1.Clear;
end;

procedure TForm1.Edit8KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_return then edit9.SetFocus;
end;

procedure TForm1.Edit9KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_return then edit5.SetFocus;
end;

procedure TForm1.Edit6KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_return then edit1.SetFocus;
end;

procedure TForm1.Edit5KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_return then button3.SetFocus;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_return then edit2.SetFocus;

end;

procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_return then edit4.SetFocus;
end;

procedure TForm1.Edit4KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (key=vk_return)then if (combobox1.Items.Count=0) then button2.SetFocus else button1.setfocus;
end;

procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (key=vk_return) and (comboBox1.Text<>'') then
begin
ComboBox1.Items.Add(ComboBox1.text);
ComboBox1.text:='';
totaco:=combobox1.Items.Count;
statusbar1.Panels[3].text:='总共('+inttostr(totaco)+')封';
end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=vk_f1 then form1.helpshow;
end;

end.

好了,完成以上几步后,接下来我们只要为各个组件联系到各自所对应的事件,那吗我们用 Delphi 所做的发信机也就几呼完成了。当然您也可以对它进行修改,以让它更符合您的口味。虽然步骤多了点,不过至少我们做出了自己的一个发信机。

最后偷偷的告诉您一下,您想偷懒吗,如果是,那吗,嘿嘿,那就..

快找小梦要完整的程序代码,可要快哦,不然小梦过几天就跑掉了哦。小梦的伊妹儿是:su_ye@163.net,主页 www.suye.8u8.com

http://www.f225.com/149846.html 短波单边带收发信机原理 简要介绍 作者:张毓华 出版:北京航空航天大学出版社 - 1988年出版 分类:TN832 尺寸:26cm 书号:7-81012-075-1 定价:$3.35 形态:310 页 - 66 章节 阅读:获取图书 - 相关文献 全文目录 第一章 单边带通信概述 §1-1单边带通信的机理 第二章 频率合成器概述 第三章 数字式频率合成器 第四章 单边带信号的产生 第五章 单边带信号的搬频与解调 第六章 收信机中的放大器和AGC系统 第七章 发射机中单边带信号的放大 第八章 收发信机的控制系统 第九章 单边带收发信机主要指标测量 §1-2单边带信号数学表达式及波形 §1-3单边带波的分类 §1-4 单边带发射机的输出功率 §1-5单边带制和调幅制的比较 §1-6单边带发信机概述 §1-7单边带收信机概述 §1-8全固态单边带收发信机的特点 §2-1引言 §2-2频率合成的方法 §2-3数字式锁相环的性能分析 §2-4频率合成器的性能要求 §2-5单边带发射机中的频率合成器实例 §2-6单边带收信机中的频率合成器实例 §2-7参考频率源 §2-8标频系统 §2-9 辅助频率源 §3-1数字式频率合成器的组成和工作原理 §3-2双环数字式频率合成器的实际电路 §3-3鉴相器 §3-4压控振荡器 §3-5可变分频器概述 §3-6程序分频器的工作原理 §3-7吞脉冲程序分频器的工作原理 §3-8 用编程控制的数字频率合成器EX1001实例 §4-1单边带调制器 §4-2边带滤波器 §4-3单边带发射机的信道部分 §4-4 发射机的移频通信部分 §5-1搬频 §5-2混频器 §5-3混频器的非线性干扰 §5-4变频比的选择 §5-5搬频电路举例 §5-6单边带收信机的解调 §6-1高中频放大部分的组成和要求 §6-2输入电路 §6-3高、中频放大电路 §6-4 高、中频放大部分实际电路举例 §6-5单边带收信机中的AGC系统 §6-6AGC控制电路 §6-7AGC被控制电路 §7-1 宽频带放大器 §7-2线性功率放大器工作状态的分析和计算 §7-3单边带信号放大器互调失真的分析 §7-4线性放大电路举例 §7-5 强放级改善线性的措施 §7-6强放级的输出电路 §7-7强放级的调整 §8-1发射机的供电系统 §8-2发射机的保护电路 §8-3 收信机的微机控制系统 §9-1测量中注意事项 §9-2指标测试前的准备工作 §9-3发信机主要技术指标的测量方法 §9-4 收信机主要指标的测量 参考文献 TN832 相关图书 1. 短波单边带收发信机原理与调测, ,人民邮电出版社, ,TN832 北京航空航天大学出版社 出版图书 1. 疲劳性能试验设计和数据处理——直升机金属材料疲劳性能可靠性手, 高镇同,北京航空航天大学出版社,7-81012-861-2,V275 2. Fortran PowerStation 4.0使用与编程,桂良进,北京航空航天大学出版社,7-81012-900-7,TP312FO 3. Visual FoxPro 6.0程序设计技术,陈海清,北京航空航天大学出版社,7-81012-854-X,TP312FO 4. 中文Visual FoxPro6.0函数与命令参考大全,焦敏杰,北京航空航天大学出版社,7-81012-849-3,TP312FO 5. 计算机等级考试(二级)FoxBASE+程序设计题类分析,张森, 北京航空航天大学出版社,7-81012-872-8,TP312FO 6. 中文Visual FoxPro6.0程序设计基础,李东,北京航空航天大学出版社,7-81012-850-7,TP312FO 7. 中文Visual FoxPro6.0属性 事件 控件及方法,吴克杰,北京航空航天大学出版社,7-81012-844-2,TP312FO 8. 计算机等级考试(一级)(DOS环境)教程,冯伟昌,北京航空航天大学出版社,7-81012-871-X,TP316 9. Visual C++6.0编程基础,张然,北京航空航天大学出版社,7-81012-885-X,TP312C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值