生成MAC地址的小工具:

{*------------------------------------------------
生成mac地址
@author
@version 2015.7.2
2015.10.22修改
步长最大长度为256,必须为2的n次方
长度不超过5位数
-------------------------------------------------}
unit frmSaveMac; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, math; type
TSaveMacForm = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
SaveDialog1: TSaveDialog;
SaveButton: TButton;
ExitButton: TButton;
Edit7: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit8: TEdit;
Memo1: TMemo;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
btn_clear: TButton;
btn_show: TButton;
Memo2: TMemo;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure ExitButtonClick(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit7KeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure btn_clearClick(Sender: TObject);
procedure btn_showClick(Sender: TObject);
private
{ Private declarations }
procedure CheckIsEmpty;
function CheckStepOrLen: Boolean;
procedure ShowData();
Procedure SaveData();
public
{ Public declarations }
end; var
SaveMacForm: TSaveMacForm; implementation {$R *.dfm}
{*------------------------------------------------
文本框只能输入十六进制数、删除键和回车键
@param
@param
-------------------------------------------------}
procedure TSaveMacForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', 'A'..'F', 'a'..'f', #8, #13]) then
begin
Key := #0;
Application.MessageBox ('只能输入十六进制的数字!', '提示消息', MB_OK + MB_ICONERROR);
end;
end; procedure TSaveMacForm.ExitButtonClick(Sender: TObject);
begin
Close;
end; {*------------------------------------------------
文本框按键事件
@param
@param
-------------------------------------------------}
procedure TSaveMacForm.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i,j : integer;
begin
/// 输入最大长度
for i := 0 to self.ComponentCount -1 do begin // 循环每个Edit控件 设置最大长度为2 2015.10.22修改
if self.Components[i] is TEdit then begin
(self.Components[i] as TEdit).MaxLength := 2;
end;
if Sender = Edit7 then Edit7.MaxLength := 3;
if Sender = Edit8 then Edit8.MaxLength := 5; // 长度不超过5位数 2015.10.22修改
end; /// 将光标移到最后
for j := 0 to ComponentCount - 1 do begin
if Components[j] is TEdit then begin
(Components[j] as TEdit).SelStart := Length((Components[j] as TEdit).Text);
end;
end; /// 按回车触发
if key = 13 then
begin
if (sender = Edit1) and (length(Edit1.Text) >= 2) then
Edit2.SetFocus;
if (Sender = Edit2) and (length(Edit2.Text) >= 2) then
Edit3.SetFocus;
if (Sender = Edit3) and (length(Edit3.Text) >= 2) then
Edit4.SetFocus;
if (Sender = Edit4) and (length(Edit4.Text) >= 2) then
Edit5.SetFocus;
if (Sender = Edit5) and (length(Edit5.Text) >= 2) then
Edit6.SetFocus;
if (Sender = Edit6) then
Edit7.SetFocus ;
if (Sender = Edit7) then
Edit8.SetFocus;
end;
ExitButton.Enabled := True;
SaveButton.Enabled := True;
end; {*------------------------------------------------
步长只能输入0到9的数字
@param
@param
-------------------------------------------------}
procedure TSaveMacForm.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9', #8]) then
Key := #0;
end; procedure TSaveMacForm.FormCreate(Sender: TObject);
var
j: integer;
C: Double;
begin
SaveButton.Enabled := False;
ExitButton.Enabled := False;
RadioButton1.Checked := True; /// 默认输出格式 memo2.Lines.Add('256以内的2的n次方:');
for J := 1 to 8 do
begin
C := power(2, J); /// 2的I次方
memo2.Lines.Add(FloatToStr(C));
end;
end; procedure TSaveMacForm.CheckIsEmpty;
begin
if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') or (Edit4.Text = '') or (Edit5.Text = '') or (Edit6.Text = '') then
begin
Application.MessageBox('输入框必须是12个16进制的数!', '提示', mb_OK + MB_ICONSTOP);
exit;
end; if (length(Edit1.Text )< 2) or (length(Edit1.Text) < 2) or (length(Edit1.Text )< 2) or (length(Edit1.Text) < 2) or (length(Edit1.Text) < 2) or (length(Edit1.Text) < 2) then
begin
Application.MessageBox('每个输入框必须是2个数字!', '提示', MB_OK + MB_ICONERROR);
exit;
end; if (Edit7.Text = '') then
begin
Application.MessageBox('步长不能为空!', '提示', mb_OK);
Edit7.SetFocus;
exit;
end;
if (Edit8.Text = '') then
begin
Application.MessageBox('长度不能为空!', '提示', mb_OK);
Edit8.SetFocus;
exit;
end;
end; function TSaveMacForm.CheckStepOrLen: Boolean;
var
step, L, code, J : integer;
isnot: Boolean;
C: Extended;
begin
result := False;
if Edit7.Text <> '' then begin // 2015/10/24 增加,之前没判断,若为空时 会出现系统错误
step := StrToInt(Edit7.Text);
L := StrToInt(Edit8.Text);
if step > 256 then
begin
Application.MessageBox('步长最大长度为256,请重新输入!', '提示', mb_OK);
Edit7.SetFocus;
exit;
end;
end; // 判断长度
if L >= 100000 then
begin
Application.MessageBox('长度太长,请重新输入!', '提示', mb_OK);
Edit8.SetFocus;
exit;
end; for J := 1 to 8 do
begin
C := power(2, J); /// 2的I次方
if (step = C) or (step = 1) then
begin
result := True;
end;
end; /// 判断步长是否满足条件
if result = False then
begin
Application.MessageBox('步长只能为2的n次方,请重新输入', '提示消息', mb_OK + MB_ICONERROR);
Edit7.SetFocus;
exit;
end;
end; procedure TSaveMacForm.btn_showClick(Sender: TObject);
begin
ShowData();
end; procedure TSaveMacForm.ShowData;
var
SaveFile: string;
value: Integer;
temp, S: string;
I, M1, M2, M3, M4, M5, M6, J : Integer;
C: Extended;
begin
CheckIsEmpty; // 判断是否为空 if CheckStepOrLen = True then begin
Self.Memo1.Lines.Clear;
M1 := StrToInt('$' + Edit1.Text); /// 直接把edit里的数据变成16进制 (是由十进制To十六进制)
M2 := StrToInt('$' + Edit2.Text);
M3 := StrToInt('$' + Edit3.Text);
M4 := StrToInt('$' + Edit4.Text);
M5 := StrToInt('$' + Edit5.Text);
M6 := StrToInt('$' + Edit6.Text);
if RadioButton1.Checked then
Self.Memo1.Lines.Add(IntToHex(M1, 2) + IntToHex(M2, 2) + IntToHex(M3, 2) + IntToHex(M4, 2) + IntToHex(M5, 2) + IntToHex(M6, 2)); /// 将十六进制To十进制
if RadioButton2.Checked then
Self.Memo1.Lines.Add(IntToHex(M1, 2) + IntToHex(M2, 2) + IntToHex(M3, 2) + ':' + IntToHex(M4, 2) + IntToHex(M5, 2) + IntToHex(M6, 2));
if RadioButton3.Checked then
Self.Memo1.Lines.Add(IntToHex(M1, 2) + '-' + IntToHex(M2, 2) + '-' +IntToHex(M3, 2) + '-' + IntToHex(M4, 2) + '-' + IntToHex(M5, 2) + '-' + IntToHex(M6, 2));
for I := 1 to StrToInt(Edit8.Text) do
begin
temp := '0' ;
if M6 < 16 then /// 小于F,则加个0
begin
M6 := StrToInt('$' + IntToStr(M6));
M6 := StrToInt(temp + IntToHex(m6, 2));
end;
if M5 < 16 then
begin
M5 := StrToInt('$' + IntToStr(M5));
M5 := StrToInt(temp + IntToHex(m5, 2));
end;
if M4 < 16 then
begin
M4 := StrToInt('$' + IntToStr(M4));
M4 := StrToInt(temp + IntToHex(m4, 2));
end;
if M3 < 16 then
begin
M3 := StrToInt('$' + IntToStr(M3));
M3 := StrToInt(temp + IntToHex(m3, 2));
end;
if M2 < 16 then
begin
M2 := StrToInt('$' + IntToStr(M2));
M2 := StrToInt(temp + IntToHex(m2, 2));
end;
if M1 < 16 then
begin
M1 := StrToInt('$' + IntToStr(M1));
M1 := StrToInt(temp + IntToHex(m1, 2));
end;
M6 := M6 + StrToInt(Edit7.Text); /// 加步长
if M6 >= 256 then /// 若大于等于FF则进位
begin
M5 := M5 + 1;
M6 := M6 - 256;
end;
if M5 >= 256 then
begin
M4 := M4 + 1;
M5 := M5 - 256;
end;
if M4 >= 256 then
begin
M3 := M3 + 1;
M4 := M4 - 256;
end;
if M3 >= 256 then
begin
M2 := M2 + 1;
M3 := M3 - 256 ;
end;
if M2 >= 256 then
begin
M1 := M1 + 1;
M2 := M2 - 256;
end;
if M1 >= 256 then
Application.MessageBox('超出范围', '提示消息', mb_OK + MB_ICONERROR);
if RadioButton1.Checked then
Self.Memo1.Lines.Add(IntToHex(M1, 2) + IntToHex(M2, 2) + IntToHex(M3, 2) + IntToHex(M4, 2) + IntToHex(M5, 2) + IntToHex(M6, 2));
if RadioButton2.Checked then
Self.Memo1.Lines.Add(IntToHex(M1, 2) + IntToHex(M2, 2) + IntToHex(M3, 2) + ':' + IntToHex(M4, 2) + IntToHex(M5, 2) + IntToHex(M6, 2));
if RadioButton3.Checked then
Self.Memo1.Lines.Add(IntToHex(M1, 2) + '-' + IntToHex(M2, 2) + '-' +IntToHex(M3, 2) + '-' + IntToHex(M4, 2) + '-' + IntToHex(M5, 2) + '-' + IntToHex(M6, 2));
end;
end;
end; procedure TSaveMacForm.SaveData;
var
SaveFile: string;
begin
if CheckStepOrLen = True then begin
/// 保存
SaveDialog1.Filter := '*.txt|*.txt'; //'txtFile( *.txt)|*.txt'; /// txt格式
SaveDialog1.DefaultExt := '*.txt'; /// 默认格式
SaveDialog1.Title := '保存MAC地址';
if SaveDialog1.Execute then
begin
SaveFile := SaveDialog1.FileName;
Memo1.Lines.SaveToFile(SaveFile); /// 保存memo里数据
end;
end;
end; procedure TSaveMacForm.SaveButtonClick(Sender: TObject);
begin
ShowData();
end; procedure TSaveMacForm.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i: integer;
begin
if length(Edit1.Text) >= 2 then
Edit2.SetFocus;
if length(Edit2.Text ) >= 2 then
Edit3.SetFocus;
if length(Edit3.Text ) >= 2 then
Edit4.SetFocus;
if length(Edit4.Text ) >= 2 then
Edit5.SetFocus;
if Length(Edit5.Text ) >= 2 then
Edit6.SetFocus;
(* for i := 0 to ComponentCount - 1 do begin
if Components[i] is TEdit then
if Length((Components[i] as TEdit).Text) >= 2 then
end;*)
end; procedure TSaveMacForm.btn_clearClick(Sender: TObject);
var
i: integer;
begin
for i := 0 to self.ComponentCount -1 do begin
if self.Components[i] is TEdit then begin
(self.Components[i] as TEdit).Text := '';
end;
end;
Edit1.SetFocus;
end; end.

delphi 生成网卡MAC地址的更多相关文章

  1. 修改网卡MAC地址后出现问题:device eth0 does not seem to be present, delaying initialization

    修改网卡MAC地址后出现问题:device eth0 does not seem to be present, delaying initialization   1.修改网卡对应的文件,将配置文件中 ...

  2. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  3. Python 获取 网卡 MAC 地址

    /*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: ...

  4. Linux 下修改网卡MAC地址

    Linux下修改网卡MAC地址 by:授客 QQ:1033553122 例子:修改网卡接口eth0的mac地址 #停用网卡接口,比如eth0 # ifconfig eth0 down #编辑对应的网卡 ...

  5. 获取CPU序列号、网卡MAC地址、硬盘序列号

    <pre name="code" class="csharp"> using System; using System.Collections; u ...

  6. linux/Centos下查看和修改网卡Mac地址(ifconfig命令)

    本文转载自http://www.169it.com/article/14360294838474691537.html linux/Centos下查看网卡Mac地址,输入命令: #ifconfig - ...

  7. Java/JSP获得客户端网卡MAC地址的三种方法解析

    java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向13 ...

  8. 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载   获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...

  9. Centos下查看和修改网卡Mac地址

    linux/Centos下查看网卡Mac地址,输入命令: #ifconfig -a eth0 Link encap:Ethernet HWaddr 00:e4:56:2E:D8:20 00:e4:56 ...

随机推荐

  1. Python复习笔记-字典和文件操作

    抽时间回顾2年前自己做过的python工具,突然感觉不像自己写的,看来好久没用过python的字典和文件操作了,查询资料和网页,整理如下: 一.字典 键值对的集合(map) 字典是以大括号“{}”包围 ...

  2. JS语法(二)

    JS变量 var 变量名 = 变量值://自己会判断什么类型 一个好的编程习惯是,在代码开始处,统一对需要的变量进行声明. var name = “xiaosan”, age = 22, addres ...

  3. java web项目获取各种路径

    1.可以在servlet的init方法里 String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径 例如 ...

  4. MSsql 服务器之间远程及其链接查询

    先指定端口1433(SQL,协议里面设置) 然后启用 菜单-程序-外围服务应用配置-服务和连接时外围应用配置 试试远程连接 成功连接OK 下面示例链接服务器.上面远程是必须走的一步动作. --创建链接 ...

  5. Easyui CSS式样重写

    <link rel="stylesheet" type="text/css" href="../../themes/default/easyui ...

  6. htmL5 html5Validate

    http://www.zhangxinxu.com/wordpress/2012/12/jquery-html5validate-html5-form-validate-plugin/

  7. C#十种语法糖

    语法糖 指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.需要声明的是"语法糖" ...

  8. Ajax 结构及使用

    AJAX AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 JavaSc ...

  9. Dijkstra 最短路算法(只能计算出一条最短路径,所有路径用dfs)

    上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为"多源最短路".本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做&q ...

  10. Unity(二)生命周期LifetimeManager

    描述:Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理. //创建一个Unit ...