delphi 中可以做到记住用户名吗?

解决方案 »

  1.   

    写入注册表,或者INI文件里面.
      

  2.   

    写到INI文件里面 每次读取最后登录的那个 不就可以了? 
      

  3.   

    delphi操作注册表
    一、创建和释放TRegistry对象
    1.创建TRegistry对象。为了操作注册表,要创建一个TRegistry对象:ARegistry:=TRegistry.Create;
    2.释放TRegistry对象。对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy。 
    二、指定要操作的键
    操作注册表时,首先应指定操作的主键:先给属性RootKey赋值以指定根键,然后用方法OpenKey来指定要操作的主键名。
    1.指定根键(RootKey)。
    根键是注册表的入口,也注册表信息的分类,其值可为:
    HKEY-CLASSES-ROOT:存储整个系统对象类信息,如ActiveX对象注册、文件关联等信息。
    HKEY-CURRENT-USER:存储当前用户的配置信息。为属性RootKey的默认值。
    HKEY-LOCAL-MACHINE:存储当前系统的软硬件配置信息。应用程序自己的信息可以存储在该根键下。
    HKEY-USERS:存储所有用户通用的配置信息。
    还可以是HKEY-CURRENT-CONFIG、HKEY-DYN-DATA。
    2.指定要操作的主键。
    FunctionOpenKey(constKey:string;CanCreate:Boolean):Boolean;
    constKeyKey:主键名,是键名全名中除去根键的部分,如Software。
    CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。
    返回值True表示操作成功。
    3.关闭当前主键。
    在读取或存储信息之后,应及时将关闭当前主键:procedureCloseKey。三、从注册表中读取信息
    Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。
    1.Read系列方法。
    functionReadString(constName:string):string;
    读取一个字符串值,Name为字符串名称。
    functionReadInteger(constName:string):Integer;
    读取一个整数值,Name为整数名称。
    functionReadBinaryData(constName:string;varBuffer;BufSize:Integer):Integer;
    读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。
    其它方法还有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。
    2.读取信息一例(显示Windows的版本)。
    在HKEY-LOCAL-MACHINE下,有三个字符串值Version、VersionNumber和SubVersionNumber,用于记录当前Windows的版本号。
    {请在Uses中包含Registry单元}
    procedureTForm1.Button1Click(Sender:TObject);
    var
    ARegistry:TRegistry;
    begin
    ARegistry:=TRegistry.Create;
    //建立一个TRegistry实例
    withARegistrydo
    begin
    RootKey:=HKEY-LOCAL-MACHINE;//指定根键为HKEY-LOCAL-MACHINE
    //打开主键Software
    ifOpenKey(′Software′,false)then
    begin
    memo1.lines.add('Windows版本:′+ReadString(′Version′));
    memo1.lines.add('Windows版本号:′+ReadString(′VersionNumber′));
    memo1.lines.add(′Windows子版本号:′+ReadString(′SubVersionNumber′));
    end;
    CloseKey;//关闭主键
    Destroy;//释放内存
    end;
    end;四、向注册表中写入信息
    Write系列方法将信息转化为指定的类型,并写入注册表。
    1.Write系列方法。
    procedureWriteString(constName,value:string);
    写入一个字符串值,Name为字符串的名称,value为字符串值。
    procedureWriteInteger(constName:string;value:Integer);
    写入一个整数值。
    procedureWriteBinaryData(constName:string;varBuffer;BufSize:Integer);
    写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。
    其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。
    2.写入信息一例。
    下面程序使Delphi随Windows启动而自动运行。
    var
    ARegistry:TRegistry;
    begin
    ARegistry:=TRegistry.Create;
    //建立一个TRegistry实例
    withARegistrydo
    begin
    RootKey:=HKEY-LOCAL-MACHINE;
    ifOpenKey(′Software′,True)then
    WriteString(′delphi′,′C:Files.exe′);
    CloseKey;
    Destroy;
    end;
    end;五、键值维护
    除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。
    1.创建新主键:functionCreateKey(constKey:string):Boolean。
    Key即为主键名,返回值True表示操作成功。
    2.删除主键:functionDeleteKey(constKey:string):Boolean。
    Key即为主键名,返回值True表示操作成功。/////////////////////////////////aregistry := tregistry.Create;
       with aregistry do
    begin
        rootkey:=HKEY_LOCAL_MACHINE;
        if openkey('\software\abc\b\',false) then
         begin
         // if hassubkeys then
              movekey('a','c',FALSE);     //打开主键,MOVEKEY的第一个参数是由主键的任一子键做参数,子键权复制
              showmessage('操作成功');
         end;
         closekey;
         destroy;
    end;
    end;////////////////////////////////
    3.复制或移动主键:procedureMoveKey(constOldName,NewName:string;Delete:Boolean)。
    OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。
    复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。
    4.判断指定主键是否存在,其下是否有主键,并获取主键名称。
    KeyExists用于判断指定主键是否存在:
    functionKeyExists(constKey:string):Boolean;//返回值为True表示主键存在。
    HasSubKeys用于判断指定主键下是否有子键:functionHasSubKeys:Boolean;
    返回值为True表示主键下有子键。
    GetKeyNames用于获取子键名称:procedureGetKeyNames(Strings:TStrings);
    Strings用于返回当前主键下各子键的名称。
    5.获取主键下的数据值名称:procedureGetvalueNames(Strings:TStrings)。
    Strings用于返回当前主键下各数值名称。
    如要获取当前系统中的拨号连接名称,可利用获取主键HKEY-USERS
    .DEFAULT下的数值名称的方法来进行。
    6.判断数值名称存在、数值名称改名。
    valueExists用于判断数值名称是否存在:
    functionvalueExists(constName:string):Boolean;
    返回值为True表示数值名称存在。
    Renamevalue用于数值名称改名:
    procedureRenamevalue(constOldName,NewName:string); 
      

  4.   


    MyReg := TRegistry.Create; 
    MyReg.RootKey := HKEY_LOCAL_MACHINE; 
    try 
    if MyReg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',FALSE) then 
    if not MyReg.ValueExists('tm') then 
    begin 
    MyReg.WriteString('tm',Application.ExeName); 
    end 
    finally 
    MyReg.Free; 
    end;
      

  5.   

    三种办法,前面提到了两种
    一个是用ini文件
    通过引用IniFiles
    还有就是注册表
    引用Registery
    再有就是借助数据库了实际第一种用的比较多,具体怎样实现,前面都回答,在此不再赘述了
      

  6.   

    写哪都可以,Ini文件,注册表,数据库
    想怎么写就怎么写,自己写代码记住用户名
      

  7.   

    用ini文件保存吧,应该是最简单的方法