如何把--------------字符串转为同名的组件属性?
在保存比如,文本大小,对齐时,是存到数据库里的..
但调出来的时候,没办法支持用..
比如:
要达到下面的效果.
Label1.Align:=Alleft;
但是,数据库里保存的是字符串'Alleft',
Label1.Align:=Talign('Alleft'); //出错
还有什么办法吗?难道不能把参数存起来了?
[解决办法]
可以这样
- Delphi(Pascal) code
if 数据库保存值='alLeft' then Label1.Align:=alLeftelse if 数据库保存值='alNone' then Label1.Align:=alNone..............................
[解决办法]
不保存alLeft字样,应该在数据库中保存ord(label1.Align)
取出时,如此操作:label1.align := TAlign(dataset.fieldbyname('align').asinteger);
[解决办法]
用rtti可以。记得把数据库里属性的值赋给一个variant类型的变量再赋给组件的属性。
[解决办法]
rtti里要用到ispublishedprop和setordprop(大概是这个名字,记不清了)。
[解决办法]
同意2楼的意见。
[解决办法]
- Delphi(Pascal) code
//建立新工程、双击窗体后,把下列代码完全覆盖你窗体单元的代码unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DB, DBClient, Grids, DBGrids;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } public { Public declarations } end;var Form1: TForm1; ClientDataSet1:TClientDataSet; Panel1:TPanel; Memo1:TMemo; Button1:TButton;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); procedure SaveProperties(v:TAlign); begin with ClientDataSet1 do begin Append; FieldByName('V').AsVariant:=v; Post; end; end;begin //定义窗体: Caption:='将组件属性保存到数据库'; Height:=323; Width:=380; Position:=poScreenCenter; OnCloseQuery:=FormCloseQuery; //建立Panel1: Panel1:=TPanel.Create(self); with Panel1 do begin Parent:=Form1; Height:=200; Align:=alTop; Color:=clSkyBlue; end; //建立Memo1: Memo1:=TMemo.Create(self); with Memo1 do begin Parent:=Panel1; Width:=150; Height:=100; end; //建立ClientDataSet1: ClientDataSet1:=TClientDataSet.Create(self); with ClientDataSet1 do begin FieldDefs.Add('ID', ftAutoInc);//自增字段 FieldDefs.Add('V', ftBlob);//保存Align属性的字段 CreateDataSet;//建立数据库 end; //将几个Align属性保存到数据库: SaveProperties(alleft); SaveProperties(alTop); SaveProperties(alRight); SaveProperties(alBottom); ClientDataSet1.First; //建立一个按钮: Button1:=TButton.Create(self); with Button1 do begin Top:=240; Left:=128; OnClick:=Button1Click; Parent:=Form1; Width:=120; Caption:='改变memo的Align'; end;end;procedure TForm1.Button1Click(Sender: TObject);begin if ClientDataSet1.Eof then ClientDataSet1.First; //从数据库取出Align属性来改变memo的Align: memo1.Align:=ClientDataSet1.FieldByName('V').AsVariant; ClientDataSet1.Next;end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin //释放动态建立的东东: ClientDataSet1.Free; Memo1.Free; Panel1.Free; Button1.Free;end;end.
[解决办法]
GetPropInfo
SetPropValue
这两个就搞定了