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]);
結尾;
結尾。