请问高手,能不能让edit或者dbedit的固定的几位不能编辑,而其他的可以编辑? ?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我不知道你的具体情况,所以只能写一个通用的示例,具体情况可能要改变一些如 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;beginresult:='\'+maskstr[1]+'\'+maskstr[2]+'cccc;1;_';end;//数据源的事件中更改editmask的maskedit属性和tex属性的值//让maskedit能正常显示数据,并产生不可修改的位procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);beginmaskedit1.EditMask:=getmask(table1.Fields[0].AsString);maskedit1.Text:=table1.Fields[0].AsString;end;//由于editmask并非数据感知组件,你得用下面过程保存数据//注意temp的用法;procedure TForm1.saveBtnClick(Sender: TObject);var temp:string;begintemp:=maskedit1.Text;table1.Edit;table1.Fields[0].AsString:=temp;table1.Post;end;end.------------------------------------------------------具体的实现你得了解editmask属性,如果不熟,请参考Help!!别忘记把20分全给我!!! 你说得好像和我的不相符阿,我的意思是假设edit.text=001110的话,我想让001不可编辑,而110可以修改,与数据库无关的。 那就更简单了,maskedit的editmask为 \0\0\1!ccc;1;_ 就可以了对了,与数据库无关你为会什么会加上DBedit? 呵呵,在我的程序中与数据库有关的不过\0\0\1!ccc;1;_ 什么意思?能具体解释一下,我在程序中用得不是edit 而是dbedit 用MaskEdit.\0\0\1!ccc;1;_ 是你设置的输入的格式. 我也遇到过,如果可以了,也通知一声!我后来没办法,只能用edit代替dbedit了 如果你再不加分的话我将没兴趣继续回答了。首先你得用TMaskEdit代替TDbedit组件 此组件的EditMask属性可完成任务\0\0\1代表前三位001不可修改, !ccc;1;_ 代表后三位可修改你可以研究一下我的例程,你建一个数据库再建一个新程序试一下就知道了EditMask属性你得参考帮助 全局钩子拦截系统待机消息,如何判断拦截的消息是否待机消息 请问一个在文件中查找日期时间的问题 散分,头100人有效! COM GetOleString() 多线程序进行数据库操作的问题,大家帮忙啊。。。。。 关于数据库取数问题 如何访问共用一个IP上网的局域网中的机子? 如何用带参数的查询方法查询SQL SERVER中的表时间类型字段 请教各位,DELPHI+SQL2000用ADO,哪种连接方式最方便,请大家谈一谈。 如何设置鼠标滑动的速度? [...CSDN程序员登陆名称剖析...] 问两个问题
如 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分全给我!!!
我想让001不可编辑,而110可以修改,与数据库无关的。
maskedit的editmask为 \0\0\1!ccc;1;_ 就可以了
对了,与数据库无关你为会什么会加上DBedit?
不过\0\0\1!ccc;1;_ 什么意思?能具体解释一下,我在程序中用得不是
edit 而是dbedit
我后来没办法,只能用edit代替dbedit了
首先你得用TMaskEdit代替TDbedit组件
此组件的EditMask属性可完成任务
\0\0\1代表前三位001不可修改,
你可以研究一下我的例程,你建一个数据库再建一个新程序试一下就知道了
EditMask属性你得参考帮助