怎樣把枚舉類型屬性保存到文本文件並載入呢?(50分)

  • 主题发起人 主题发起人 clwlyc
  • 开始时间 开始时间
C

clwlyc

Unregistered / Unconfirmed
GUEST, unregistred user!
如題;
例如:自定義控件有個屬性GradientStyle,類型定義如下:
TFGradientStyle=(gsNone,gsGreen,gsYellow,gsBlue,gsRed);
問題一: 如何在屬性編輯器里用TComboBox控件選擇該屬性.
問題二: 如何把該屬性保存到數據庫或文本文件中,並在程序中動態載入.
 
//保存
var
sStyle: String;
begin
case GradientStyle do
gsNone: sStyle := 'gsNone';
gsGreen: sStyle := 'gsGreen';
......
end;
//保存字符串 sStyle 就可以了
end;

//载入
GradientStyle := [];
if (Pos('gsNone', sStyle) > 0) then
GradientStyle := [gsNone]
else
if (Pos('gsGreen', sStyle) > 0) then
GradientStyle := [gsGreen]
else
......
 
liyinwei兄,請問下如果我要保存的類型數值有很多項,有沒有簡單點的方法.還有問題一怎麼解決呢,就像QuickRep里的報表編輯器里的PageSize屬性的選擇.問題解決馬上散分
 
1.Delphi支持在属性编辑器里使用 枚举值,所以直接定义就可以了。
type
TFGradientStyle=(gsNone,gsGreen,gsYellow,gsBlue,gsRed);

TMyControl = class(TWinControl)
private
FSytle: TFGradientStyle;
procedure SetStyle(const Value: TFGradientStyle);
published
property Style: TFGradientStyle read FSytle write SetStyle;
end;

procedure TMyControl.SetStyle(const Value: TFGradientStyle);
begin
if FSytle <> Value then
begin
FSytle := Value;
Repaint;
end;
end;

2.可以使用 RTTI实现枚举值的存取。
use
TypInfo;

// MyControl1: TMyControl; // MyControl1是当前使用的控件名字。
procedure TForm1.Button1Click(Sender: TObject); //Get
begin
Button1.Caption := GetEnumProp(MyControl1, 'Style');
end;

procedure TForm1.Button2Click(Sender: TObject); //Set
begin
SetEnumProp(MyControl1, 'Style', Edit1.Text);
end;
 
1.把属性定义倒 published 就可以了,就如楼上的。

2.我给的方法稍微变通一就可以了。
//保存
var
sStyle: String;
begin
if gsNone in GradientStyle then sStyle := 'gsNone';
if gsGreen in GradientStyle then sStyle := '|' + 'gsGreen';
......
if Copy(sStyle,1,1) = '|' then sStyle := Copy(sStyle,2,Length(sStyle));
//保存字符串 sStyle 就可以了
end;

//载入
GradientStyle := [];
if (Pos('gsNone', sStyle) > 0) then GradientStyle := GradientStyle + [gsNone];
if (Pos('gsGreen', sStyle) > 0) then GradientStyle := GradientStyle + [gsGreen];
......
 
多人接受答案了。
 
后退
顶部