USWLMSELECTDA单元;
{$ s-,w-,r-}
{$ c PRELOAD}
界面
用途
Windows,Messages,Sysutils,类型,类,图形,控件,STDCTRLS,表单,表单,
Strutils,数学,Adodb,TflatButtonunit,USWLMSTYLEEDIT;
类型
teditdatatype =(sdstring,sdinteger,sdfloat,sdmoney,sddate);
TVAlignment =(TVatoPjustify,TVACENTER,TVABOTTOMJUSTIFY);
tdatastyle =(DSBM,DSZJ,DSMC);
类型
tselectda = class(tcustomControl)
私人的
fpen:tpen;
fbrush:tbrush;
ffont:tfont;
fcaption:string;
fbmText:字符串;
fzjtext:string;
fmctext:string;
FDATATYPE:TEDITDATATYPE;
fprecision:整数;
Freadonly:布尔值;
Feditfont:Tfont;
Fhalignment:Talignment;
FVALIGNMENT:TVALIGNMENT;
Fedit:Tstyleedit;
fbutton:tflatbutton;
ftitlename:字符串;
ftableName:string;
fdatastyle:tdatastyle;
FBMFIELD:字符串;
fzjfield:string;
FMCField:字符串;
fonClick:tnotifyEvent;
Fonenter:tnotifyEvent;
fonexit:tnotifyEvent;
fonkeypress:tkeypressevent;
过程setpen(const值:tpen);
过程setBrush(const值:tbrush);
过程setFont(const值:tfont);
过程setCaption(const value:string);
过程setBmText(const value:string);
过程setzjtext(const value:string);
过程setMctext(const value:string);
过程setDatatype(const值:teditdatatepe);
过程setPrecision(const值:integer);
过程setReadonly(const值:boolean);
过程设置font(const值:tfont);
步骤静电(const值:talignment);
过程setValignment(const值:TVAlignment);
过程settitLename(const value:string);
过程settableName(const value:string);
程序setDatastyle(const值:tdatastyle);
过程setBmfield(const value:string);
过程setzjfield(const value:string);
过程setmcfield(const value:string);
函数getAsfloat():字符串;
函数getAsmoney():字符串;
函数getAsInteger():string;
函数getastext():string;
函数getAsdate():string;
过程setAsfloat(const value:string);
过程setAsmoney(const value:string);
过程setAsInteger(const value:string);
过程setAstext(const value:string);
过程造型式教器(发件人:tobject);
过程挫折(const值:tcolor);
过程setColoronenter(const值:tcolor);
{
程序doclick(发送者:tobject);
过程doenter(发件人:tobject);
过程doexit(发件人:tobject);
过程dokeypress(发件人:tobject; var键:char);
}
过程setOnClick(const值:tnotifyEvent);
过程setonKeypress(const值:tkeypressevent);
过程setonenter(const值:tnotifyEvent);
过程setOnexit(const值:tnotifyEvent);
受保护
程序油漆;覆盖;
民众
构造函数创建(Alower:tcomponent);覆盖;
毁灭者销毁;覆盖;
出版
属性笔:tpen读取fpen写setpen;
属性刷:tbrush阅读fbrush写setbrush;
属性字体:tfont读取ffont write setfont;
属性标题:字符串读取fcaption写入setCaption;
属性BM:字符串读取fbmText write setBmText;
属性zjf:字符串读取fzjtext写setzjtext;
属性mc:字符串读取fmctext write setMctext;
属性文本:字符串读取fmctext Witter setMctext;
属性数据类型:teDitDatatype读取fdatatype witr setDatatype默认sdstring;
属性精度:整数读取fprecision写入setPrecision默认2;
属性ReadOnly:布尔读取freadonly编写setReadonly默认false;
属性Editfont:Tfont读取FeditFont Write setedItFont;
财产检查:Talignment读取fhaLignment witr sethalignment默认taleftjustify;
属性元素:TVAlignment读取fvalignment write setValignment默认tvabottomjustify;
属性titlename:字符串读取ftitlename Write steratitLename;
属性tableName:字符串读取ftableName Write settableName;
属性Datastyle:tdatastyle读取fdatastyle Write setDatastyle默认DSBM;
属性BMFIELD:字符串阅读fbmfield Write setBmfield;
属性ZJFIELD:字符串阅读fzjfield Write setzjfield;
属性McField:字符串阅读fmcfield Write setmcfield;
属性asfloat:字符串读取getAsfloat {write setAsfloat};
属性Asmoney:字符串读取getAsmoney {write setAsmoney};
属性Asint:字符串读取getAsInteger {write setAsInteger};
属性asdate:字符串读取getAsdate;
属性asstr:字符串读取getastext write setAstext;
属性OnClick:tnotifyEvent读取fonClick Write setOnClick;
属性OnkeyPress:tkeypressevent读取fonkeypress Write setonKeypress;
属性OnEnter:tnotifyEvent read read fonenter write setonenter;
属性Onexit:tnotifyEvent读取fonexit write setOnexit;
属性背色:TCOLOR写作挫折;
属性coloronenter:tcolor Write setColoronenter;
属性对齐;
属性VisibledockClientCount;
属性控制;
属性父级;
显示的属性;
属性命名列表;
属性Tabstop;
结尾;
程序登记册;
执行
使用consts;
过程tselectda.setpen(const value:tpen);
开始
fpen.Assign(value);
无效;
结尾;
过程tselectda.setbrush(const value:tbrush);
开始
fbrush.Assign(value);
无效;
结尾;
过程tselectda.setFont(const value:tfont);
开始
ffont.Assign(value);
无效;
结尾;
过程tselectda.setCaption(const value:string);
开始
如果fcaption <>值,则
开始
fcaption:= value;
无效;
结尾;
结尾;
过程tselectda.setBmText(const value:string);
开始
如果fbmText <>值,则
开始
fbmText:= value;
无效;
结尾;
结尾;
过程tselectda.setzjtext(const value:string);
开始
如果fzjtext <>值,则
开始
fzjText:= value;
结尾;
结尾;
过程tselectda.setMctext(const value:string);
开始
如果fmctext <>值,则
开始
fmctext:= value;
无效;
结尾;
结尾;
过程tselectda.setReadonly(const值:boolean);
开始
如果freadonly <>值,则
开始
freadonly:= value;
无效;
结尾;
结尾;
过程tselectda.setEditfont(const value:tfont);
开始
fiditFont.Assign(value);
无效;
结尾;
过程tselectda.setPrecision(const value:integer);
开始
如果fprecision <>值,则
开始
案例值的
1..6:fprecision:= value;
否则fprecision:= 2;
结尾;
无效;
结尾;
结尾;
过程tselectda.setDatatype(const value:teditdatatepe);
开始
如果fdatatype <>值,则
开始
fdatatype:= value;
案例fdatate
SDSTRING:fedit.inputstyle:= isstring;
sdinteger:fedit.inputstyle:= isinteger;
sdfloat:fedit.inputstyle:= isfloat;
sdmoney:fedit.inputstyle:= ismoney;
sddate:fedit.inputstyle:= isdate;
else fedit.inputstyle:= isstring;
结尾;
无效;
结尾;
结尾;
程序TSelectda.sethalignment(const值:talignment);
开始
如果fhalignment <>值,则
开始
fhalignment:= value;
无效;
结尾;
结尾;
过程tselectda.setValignment(const值:TVAlignment);
开始
如果fvalignment <>值,则
开始
fvalignment:= value;
无效;
结尾;
结尾;
过程tselectda.setTitLename(const value:string);
开始
如果ftitLename <>值,则ftitLename:= value;
结尾;
过程tselectda.setTableName(const value:string);
开始
如果ftableName <>值,则
开始
ftableName:= value;
无效;
结尾;
结尾;
程序tselectda.setdatastyle(const值:tdatastyle);
开始
如果fdatastyle <>值,则fdatastyle:= value;
结尾;
过程tselectda.setbmfield(const value:string);
开始
如果fbmfield <>值,则
开始
fbmfield:= value;
无效;
结尾;
结尾;
过程tselectda.setzjfield(const value:string);
开始
如果fzjfield <>值,则fzjfield:= value;
结尾;
过程tselectda.setmcfield(const value:string);
开始
如果fmcfield <>值,则
开始
fmcfield:= value;
无效;
结尾;
结尾;
函数tselectda.getAsdate():string;
var
tempdate:tdateTime;
开始
如果trystrtodate(fmctext,tempdate),则结果:= formatdateTime('yyyy-mm-dd',tempdate)
否则结果:='';
结尾;
函数tselectda.getAsFloat:string;
功能strtodouble(s:string):double;
开始
如果不是Trystrtofloat(S,结果),则结果:= 0;
结尾;
开始
案例
1..6:结果:= formatfloat('### 0。'+dupestring('0',fprecision),strtodouble(fmctext));
否则结果:= formatfloat('### 0.00',strtodouble(fmctext));
结尾;
结尾;
函数tselectda.getasmoney:字符串;
功能strtodouble(s:string):double;
开始
如果不是Trystrtofloat(S,结果),则结果:= 0;
结尾;
开始
结果:= formatfloat('### 0.00',strtodouble(fmctext));
结尾;
函数tselectda.getasinteger:字符串;
函数strtointeger(s:string):integer;
开始
如果不是TryStrtoint(S,结果),则结果:= 0;
结尾;
开始
结果:= inttoStr(strtointeger(fmctext));
结尾;
函数tselectda.getastext:string;
开始
结果:= fmctext;
结尾;
过程tselectda.setasfloat(const value:string);
功能strtodouble(s:string):double;
开始
如果不是Trystrtofloat(S,结果),则结果:= 0;
结尾;
var
F:双;
开始
f:= strtodouble(value);
案例
1..6:
开始
f:= roundto(f,-frecision);
setMctext(formatfloat('### 0。'+dupestring('0',fprecision),f));
结尾
别的
开始
f:= roundto(f,-2);
setMctext(formatfloat('### 0.00',f));
结尾;
结尾;
结尾;
过程tselectda.setasmoney(const value:string);
功能strtodouble(s:string):double;
开始
如果不是Trystrtofloat(S,结果),则结果:= 0;
结尾;
var
F:双;
开始
f:= strtodouble(value);
f:= roundto(f,-2);
setMctext(formatfloat('### 0.00',f));
结尾;
过程tselectda.setasinteger(const value:string);
函数strtointeger(s:string):integer;
开始
如果不是TryStrtoint(S,结果),则结果:= 0;
结尾;
var
我:整数;
开始
i:= strtointeger(value);
setMctext(inttoStr(i));
结尾;
过程tselectda.setastext(const value:string);
开始
setMctext(value);
结尾;
过程tselectda.stylechanged(发件人:tobject);
开始
无效;
结尾;
过程tselectda.setBackColor(const值:tcolor);
开始
fedit.backcolor:= value;
结尾;
过程tselectda.setColoronenter(const值:tcolor);
开始
fedit.coloronenter:= value;
结尾;
constructor tselectda.create(Alower:tcomponent);
开始
继承的创建(Alower);
宽度:= 188;
身高:= 20;
fcaption:='未命名';
fbmText:='';
fzjtext:='';
fmctext:='';
freadonly:= false;
fhalignment:= taleftJustify;
fvalignment:= tvabottomjustify;
FDATATYPE:= SDSTRING;
fprecision:= 2;
ftitLename:='';
ftableName:='';
fdatastyle:= dsbm;
fbmfield:='';
fzjfield:='';
fmcfield:='';
fpen:= tpen.create;
fpen.onchange:= stylechanged;
fbrush:= tbrush.create;
fbrush.onchange:= stylechanged;
ffont:= tfont.create;
ffont.onchange:= stylechanged;
ffont.Charset:= GB2312_CHARSET;
ffont.name :='宋体';
ffont.size:= 9;
feditfont:= tfont.create;
fiditfont.onchange:= stylechanged;
fiditfont.Charset:= GB2312_CHARSET;
feditfont.name :='宋体';
feditfont.size:= 9;
fedit:= tstyleedit.create(self);
fedit.parent:= self;
fedit.borderstyle:= bsnone;
fedit.inputstyle:= isstring;
{
fedit.onkeypress:= dokeypress;
fedit.onenter:= doenter;
fedit.onexit:= doexit;
}
fbutton:= tflatbutton.create(self);
fbutton.parent:= self;
fbutton.font:= ffont;
fbutton.colorborder:= fbrush.color;
fbutton.Color:= fbrush.color;
fbutton.colordown:= fbrush.color;
fbutton.colorshadow:= fbrush.color;
fbutton.ColorFocused:= fbrush.color;
fbutton.width:= 19;
fbutton.caption:='…';
{
fbutton.onclick:= doclick;
}
结尾;
过程tselectda.paint;
var
Atext:PCHAR;
Arect:Trect;
标志:dword;
开始
用画布做
开始
字体:= ffont;
笔:= fpen;
刷子:= fbrush;
fillRect(clientRect);
如果fbmtext <>'',则atext:= pchar(fcaption+'['+fbmText+']')elsext:= pchar(fcaption);
arect:= rect(clientRect.Left+fpen.width,clientRect.top+fpen.width,clientRect.right-fpen.width,clientRect.bottom-fpen.width);
drawText(handle,atext,strlen(atext),Arect(dt_singleline或dt_vcenter)或dt_left);
Inc(aRect.Left,textWidth(atext));
dec(Arect.Right,fbutton.width);
moveto(Arect.Left,Arect.bottom);
lineto(arect.right,arect.bottom);
Inc(avar.Left,fpen.Width);
如果是怪异的话
开始
fedit.visible:= false;
fbutton.Visible:= false;
标志:= dt_singleline;
案例
taleftJustify:flag:= flag或dt_left;
tarightJustify:flag:= flag或dt_right;
tacenter:flag:= flag或dt_center;
else标志:= flag或dt_left;
结尾;
案例fvalignment
tvatopjustify:flag:= flag或dt_top;
TVACENTER:flag:= flag或dt_vcenter;
tvabottomjustify:flag:= flag或dt_bottom;
else标志:= flag或dt_bottom;
结尾;
字体:= feditfont;
案例fdatate
sdString:drawText(handle,pchar(asstr),strlen(pchar(asstr)),Arect,flag);
sdinteger:drawText(handle,pchar(asint),strlen(pchar(asint)),Arect,flag);
sdfloat:drawText(handle,pchar(asfloat),strlen(pchar(asfloat)),Arect,flag);
sdmoney:drawText(handle,pchar(asmoney),strlen(pchar(asmoney))),arect,flag);
sddate:drawText(handle,pchar(asdate),strlen(pchar(asdate)),Arect,flag);
结尾;
结尾
别的
开始
Fedit. Alignment:= fhalignment;
fedit.font:= feditfont;
fedit.text:= fmctext;
fedit.width:= arect.right-arect.left;
fedit.height:= min(Max(textheight(fmctext),Textheight(fcaption)),ARECT.BOTTOM-ARECT.TOP);
fedit.left:= arect.left;
案例fvalignment
tvatopjustify:fedit.top:= arect.top;
TVACENTER:fedit.top:= arect.top+(arect.bottom-arect.top-fedit.height)div 2;
tvabottomjustify:fedit.top:= arect.top+(arect.bottom-arect.top-fedit.height);
else fedit.top:= arect.top;
结尾;
fbutton.left:= arect.right;
fbutton.top:= arect.top;
fbutton.height:= arect.bottom-arect.top;
if(((fdatatype = sdstring)和(fbmfield <>'')和(fmcfield <>'')和(ftableName <>'''))
或(fdatatype = sddate)然后fbutton.visible:= true
else fbutton.Visible:= false;
结尾;
结尾;
结尾;
destructor tselectda.destroy;
开始
fpen.free;
fbrush.free;
ffont.free;
fiditfont.free;
如果分配(Fedit),则是Freeandnil(Fedit);
如果分配(fbutton),则是Freeandnil(fbutton);
继承销毁;
结尾;
{
过程tselectda.doclick(发件人:tobject);
开始
如果分配(fonClick),则fonclick(self);
结尾;
过程tselectda.doenter(发送者:tobject);
开始
如果分配(Fonenter),则Fonenter(self);
结尾;
过程tselectda.doexit(发件人:tobject);
开始
如果分配(fonexit),则fonexit(self);
结尾;
过程tselectda.dokeypress(发件人:tobject; var键:char);
开始
如果分配(fonkeypress),则为fonkeypress(self,key);
结尾;
}
过程tselectda.setonClick(const值:tnotifyEvent);
开始
如果@fonclick <> @value,则
开始
fonClick:= value;
fbutton.onclick:= fonClick;
结尾;
结尾;
过程tselectda.setonkeypress(const值:tkeypressevent);
开始
如果@fonkeypress <> @value,则
开始
fonkeypress:= value;
fedit.onkeypress:= fonkeypress;
结尾;
结尾;
过程tselectda.setonenter(const值:tnotifyEvent);
开始
如果@fonenter <> @value,则
开始
fonenter:= value;
fedit.onenter:= fonenter;
结尾;
结尾;
过程tselectda.setonexit(const值:tnotifyEvent);
开始
如果@fonexit <> @value,则
开始
fonexit:= value;
fedit.onexit:= fonexit;
结尾;
结尾;
程序登记册;
开始
registerComponents('swlmsoft',[tselectda]);
结尾;
结尾。