ユニットUSWLMSELECTDA;
{$ s-、w-、r-}
{$ c Preload}
インタフェース
用途
窓、メッセージ、sysutils、タイプ、クラス、グラフィック、コントロール、stdctrls、フォーム、
Strutils、Math、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:string;
fzjtext:string;
fmctext:string;
fdatatype:teditdatatype;
fprecision:整数;
Freadonly:boolean;
Feditfont:tfont;
fhalignment:lailignment;
fvalignment:talignment;
Fedit:Tstyleedit;
fbutton:tflatbutton;
ftitlename:string;
ftablename:string;
fdatastyle:tdatastyle;
fbmfield:string;
fzjfield:string;
fmcfield:string;
fonclick:tnotifyevent;
Fonenter:tnotifyevent;
fonexit:tnotifyevent;
fonkeypress:tkeypressevent;
手順setpen(const値:tpen);
手順SetBrush(const Value:tbrush);
手順SetFont(const Value:tfont);
手順SetCaption(const Value:String);
手順setbmtext(const値:文字列);
手順SetZJText(const値:文字列);
手順setMctext(const値:文字列);
手順setDatype(const値:teditdatatype);
手順SetPrecision(const Value:Integer);
手順SetReadOnly(const Value:Boolean);
手順seteditfont(const value:tfont);
手順Sethalignment(const Value:Talignment);
手順SetValignment(const値:tvalignment);
手順settitlename(const value:string);
手順setableName(const値:文字列);
手順SetDataStyle(const Value:tdatastyle);
手順SetBMField(const Value:String);
手順setzjfield(const値:文字列);
手順setMcfield(const値:文字列);
関数getasfloat():string;
関数getAsmoney():string;
関数getasinteger():string;
function getastext():string;
関数getAsdate():string;
手順setasfloat(const値:文字列);
手順Setasmoney(const Value:string);
手順setasinteger(const値:文字列);
手順SetAstext(const値:文字列);
手順StyleChanged(送信者:tobject);
手順setbackColor(const値:tcolor);
手順SetColorenenter(const Value:Tcolor);
{
手順doclick(sender:tobject);
手順DoEnter(送信者:tobject);
手順doexit(sender:tobject);
手順dokeypress(送信者:tobject; var key:char);
}
手順setonclick(const値:tnotifyevent);
手順setonkeypress(const値:tkeypressevent);
手順Setenenter(const Value:tnotifyevent);
手順setonexit(const値:tnotifyevent);
保護されています
手順ペイント;オーバーライド;
公共
Constructor Create(aowner:tcomponent);オーバーライド;
デストラクタは破壊します。オーバーライド;
公開
プロパティペン:tpen read fpen write setpen;
プロパティブラシ:tbrush read fbrush write setbrush;
プロパティフォント:tfont readfont ffont write setfont;
プロパティキャプション:文字列読み取りfcaption write setcaption;
プロパティBM:文字列read fbmtext write setbmtext;
プロパティZJF:文字列read fzjtext write setzjtext;
プロパティMC:文字列read fmctext write setmctext;
プロパティテキスト:文字列読み取りfmctext write setmctext;
プロパティデータ型:teditdatatype読み取りfdatatype write setDatatypeデフォルトのsdstring;
プロパティの精度:整数読み取りfprecision write setprecisionデフォルト2;
Property Readonly:Boolean Read Freadonly Write setreadonlyデフォルトfalse;
プロパティEditFont:Tfont read read reditfont write seteditfont;
プロパティのhalignment:Talignment read fhalignment write sethalignment default taleftjustify;
プロパティバラインメント:tvalignment read fvalignment write setvalignmentデフォルトtvabottomjustify;
プロパティTITLENAME:文字列read ftitlename write settitlename;
プロパティTableName:文字列読み取りftablename write settablename;
プロパティDataStyle:tdatastyle read fdatastyle write setdatastyle default dsbm;
プロパティBMField:文字列読み取りfbmfield write setbmfield;
プロパティZJField:String read fzjfield write setzjfield;
プロパティMcField:文字列読み取りfmcfield write setmcfield;
プロパティasfloat:string read getasfloat {write setasfloat};
プロパティアスモニー:文字列読み取りgetAsmoney {write setasmoney};
プロパティasint:string read getasinteger {write setasinteger};
プロパティasdate:string read getasdate;
プロパティアスター:文字列read getastext write setastext;
プロパティオンクリック:tnotifyevent read fonclick write setonclick;
プロパティonkeypress:tkeypressevent read fonkeypress write setonkeypress;
プロパティOnenter:tnotifyevent読み取りfonenter write setenenter;
プロパティOneXit:tnotifyEvent read fonexit write setonexit;
プロパティバックコラー:tcolor write setbackcolor;
プロパティColorEnter:TColor Write SetColorenenter;
AlignDisabledのプロパティ。
プロパティVisibledockClientCount;
Property ControlCount;
プロパティParentWindow;
プロパティショー。
プロパティタブオーダー;
プロパティタブストップ;
終わり;
手順登録。
実装
constsを使用します。
手順tselectda.setpen(const値: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 value:boolean);
始める
freadonly <>値の場合
始める
freadonly:= value;
無効;
終わり;
終わり;
手順tselectda.seteditfont(const value:tfont);
始める
feditfont.assign(value);
無効;
終わり;
手順tselectda.setprecision(const value:integer);
始める
fprecision <>値の場合
始める
のケース値
1..6:fprecision:= value;
else fprecision:= 2;
終わり;
無効;
終わり;
終わり;
手順tselectda.setDatatype(const Value:teditDatatype);
始める
fdatatype <>値の場合
始める
fdatatype:= value;
のfdatatypeのケース
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 value:talignment);
始める
fhalignment <>値の場合
始める
fhalignment:= value;
無効;
終わり;
終わり;
手順tselectda.setvalignment(const value:tvalignment);
始める
fvalignment <>値の場合
始める
fvalignment:= value;
無効;
終わり;
終わり;
手順tselectda.settitlename(const value:string);
始める
ftitlename <> valueの場合、ftitlename:= value;
終わり;
手順TSELECTDA.SETTABLENAME(const Value:String);
始める
ftablename <>値の場合
始める
ftableName:= value;
無効;
終わり;
終わり;
手順TSELECTDA.SETDATASTYLE(const Value:tdataStyle);
始める
fdatastyle <> valueの場合、fdataStyle:= value;
終わり;
手順tselectda.setbmfield(const値:文字列);
始める
fbmfield <>値の場合
始める
fbmfield:= value;
無効;
終わり;
終わり;
手順tselectda.setzjfield(const値:文字列);
始める
fzjfield <> valueの場合、fzjfield:= value;
終わり;
手順tselectda.setmcfield(const value:string);
始める
fmcfield <>値の場合
始める
fmcfield:= value;
無効;
終わり;
終わり;
function tselectda.getasdate():string;
var
tempdate:tdateTime;
始める
trystrotodate(fmctext、tempdate)の場合、結果:= formatdateTime( 'yyyy-mm-dd'、tempdate)
else result:= '';
終わり;
function tselectda.getasfloat:string;
function strodouble(s:string):double;
始める
trystrtofloat(s、result)ではない場合は、結果:= 0;
終わり;
始める
のケースfprecision
1..6:result:= formatfloat( '### 0。'+dupestring( '0'、fprecision)、strtodouble(fmctext));
else result:= formatfloat( '### 0.00'、strtodouble(fmctext));
終わり;
終わり;
function tselectda.getasmoney:string;
function strodouble(s:string):double;
始める
trystrtofloat(s、result)ではない場合は、結果:= 0;
終わり;
始める
結果:= formatfloat( '### 0.00'、strtodouble(fmctext));
終わり;
function tselectda.getasinteger:string;
関数strtointeger(s:string):integer;
始める
trystrtoint(s、result)ではない場合、結果:= 0;
終わり;
始める
結果:= inttostr(strtointeger(fmctext));
終わり;
function tselectda.getastext:string;
始める
結果:= fmctext;
終わり;
手順tselectda.setasfloat(const value:string);
function strodouble(s:string):double;
始める
trystrtofloat(s、result)ではない場合は、結果:= 0;
終わり;
var
F:ダブル;
始める
f:= strtodouble(value);
のケースfprecision
1..6:
始める
f:= roundto(f、-fpecision);
setMctext(formatfloat( '### 0。'+dupestring( '0'、fprecision)、f));
終わり
それ以外
始める
f:= roundto(f、-2);
setMctext(formatfloat( '### 0.00'、f));
終わり;
終わり;
終わり;
手順tselectda.setasmoney(const Value:string);
function strodouble(s:string):double;
始める
trystrtofloat(s、result)ではない場合は、結果:= 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、result)ではない場合、結果:= 0;
終わり;
var
I:整数;
始める
i:= strtointeger(value);
setMctext(inttostr(i));
終わり;
手順tselectda.setastext(const value:string);
始める
setMctext(value);
終わり;
手順tselectda.stylechanged(sender:tobject);
始める
無効;
終わり;
手順tselectda.setbackColor(const値:tcolor);
始める
fedit.backcolor:= value;
終わり;
手順tselectda.setcolorenenter(const value:tcolor);
始める
fedit.colorenenter:= value;
終わり;
Constructor tselectda.create(aowner:tcomponent);
始める
継承されたcreate(aowner);
幅:= 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;
feditfont.onchange:= stylechanged;
feditfont.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.enenter:= 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 <> '' then 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(arect.left、fpen.width);
Freadonlyの場合
始める
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:= flagまたはdt_left;
終わり;
のケースfvalignment
tvatopjustify:flag:= flagまたはdt_top;
tvacenter:flag:= flagまたはdt_vcenter;
tvabottomjustify:flag:= flagまたはdt_bottom;
else flag:= flagまたはdt_bottom;
終わり;
フォント:= feditfont;
のfdatatypeのケース
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.HEIGHT)DIV 2;
tvabottomjustify:fedit.top:= arect.top+(arect.bottom-arect.top-fedit.height.height);
それ以外の場合は、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)then fbutton.visible:= true
else fbutton.visible:= false;
終わり;
終わり;
終わり;
Destructor tselectda.destroy;
始める
fpen.free;
fbrush.free;
ffont.free;
Feditfont.Free;
割り当てられた場合(FEDIT)、Freeandnil(Fedit);
割り当てられた場合(fbutton)、freeandnil(fbutton);
継承された破壊;
終わり;
{
手順tselectda.doclick(sender:tobject);
始める
割り当てられた場合(fonclick)、fonclick(self);
終わり;
手順tselectda.doenter(sender:tobject);
始める
割り当てられた場合(Fonenter)、Fonenter(self);
終わり;
手順tselectda.doexit(sender:tobject);
始める
割り当てられた場合(fonexit)、fonexit(self);
終わり;
手順tselectda.dokeypress(sender:tobject; var key:char);
始める
割り当てられた場合(fonkeypress)、fonkeypress(self、key);
終わり;
}
手順tselectda.setonclick(const値:tnotifyevent);
始める
@fonclick <> @value thenの場合
始める
fonclick:= value;
fbutton.onclick:= fonclick;
終わり;
終わり;
手順tselectda.setonkeypress(const値:tkeypressevent);
始める
@fonkeypress <> @value thenの場合
始める
fonkeypress:= value;
Fedit.Onkeypress:= fonkeypress;
終わり;
終わり;
手順tselectda.setenenter(const value:tnotifyevent);
始める
@fonenter <> @値の場合
始める
fonenter:= value;
fedit.enenter:= fonenter;
終わり;
終わり;
手順tselectda.setonexit(const値:tnotifyevent);
始める
@fonexit <> @値の場合
始める
fonexit:= value;
fedit.onexit:= fonexit;
終わり;
終わり;
手順登録。
始める
RegisterComponents( 'SWLMSOFT'、[TSELECTDA]);
終わり;
終わり。