??

解决方案 »

  1.   

    我不知道你的具体情况,所以只能写一个通用的示例,具体情况可能要改变一些
    如 getmask 的返回参数
    原理:
     用DBGrid,edit或许能实现,但有更好的maskedit组件能帮你解决问题;
     1 把数据读入到maskedit中,并设置好相应的的editmask属性,这是重点
     2 保存maskedit的text到数据库中,要注意加上一个临时变量,否则可能无法保存
    具体实现
     这里我假设有一个表的第一个字段为编号类型为字符型,需要的宽度为6位,而前两位不能编辑,而其他4位可以编辑
    加上一个database组件,指向你的数据库,一个table组件,指向你的表,一个datasource,一个EditMask,一个Button名为save,一个DBGRID(为了让你看到效果)
    下面是全部代码
    -------------------------------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Mask, DB, DBTables, ExtCtrls, DBCtrls, Grids, DBGrids;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Database1: TDatabase;
        Table1: TTable;
        MaskEdit1: TMaskEdit;
        saveBtn: TButton;
        procedure DataSource1DataChange(Sender: TObject; Field: TField);
        procedure saveBtnClick(Sender: TObject);
      private
        { Private declarations }
      public
      function getmask(maskstr:string):string;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
     //getmask函数是取格式,具体的情况你可以修改result的返回值.
    function TForm1.getmask(maskstr: string): string;
    begin
    result:='\'+maskstr[1]+'\'+maskstr[2]+'cccc;1;_';
    end;
    //数据源的事件中更改editmask的maskedit属性和tex属性的值
    //让maskedit能正常显示数据,并产生不可修改的位
    procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin
    maskedit1.EditMask:=getmask(table1.Fields[0].AsString);
    maskedit1.Text:=table1.Fields[0].AsString;
    end;
    //由于editmask并非数据感知组件,你得用下面过程保存数据
    //注意temp的用法;
    procedure TForm1.saveBtnClick(Sender: TObject);
    var temp:string;
    begin
    temp:=maskedit1.Text;
    table1.Edit;
    table1.Fields[0].AsString:=temp;
    table1.Post;
    end;end.
    ------------------------------------------------------
    具体的实现你得了解editmask属性,如果不熟,请参考Help
    !!别忘记把20分全给我!!!
      

  2.   

    你说得好像和我的不相符阿,我的意思是假设edit.text=001110的话,
    我想让001不可编辑,而110可以修改,与数据库无关的。
      

  3.   

    那就更简单了,
    maskedit的editmask为   \0\0\1!ccc;1;_  就可以了
    对了,与数据库无关你为会什么会加上DBedit?
      

  4.   

    呵呵,在我的程序中与数据库有关的
    不过\0\0\1!ccc;1;_  什么意思?能具体解释一下,我在程序中用得不是
    edit 而是dbedit
      

  5.   

    用MaskEdit.\0\0\1!ccc;1;_  是你设置的输入的格式.
      

  6.   

    我也遇到过,如果可以了,也通知一声!
    我后来没办法,只能用edit代替dbedit了
      

  7.   

    如果你再不加分的话我将没兴趣继续回答了。
    首先你得用TMaskEdit代替TDbedit组件 
    此组件的EditMask属性可完成任务
    \0\0\1代表前三位001不可修改,
      

  8.   

    !ccc;1;_  代表后三位可修改
    你可以研究一下我的例程,你建一个数据库再建一个新程序试一下就知道了
    EditMask属性你得参考帮助