首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么把-字符串转为同名的组件属性

2012-04-19 
如何把--------------字符串转为同名的组件属性?在保存比如,文本大小,对齐时,是存到数据库里的..但调出来

如何把--------------字符串转为同名的组件属性?
在保存比如,文本大小,对齐时,是存到数据库里的..
但调出来的时候,没办法支持用..

比如:

要达到下面的效果.
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
这两个就搞定了

热点排行