如何用程序改变DBGRIDEH的TITLE.CAPTION后,将该属性储存起来?为什么手工改就可以?(100分)

  • 主题发起人 主题发起人 xzh2000
  • 开始时间 开始时间
你看我這段代碼:
procedure Tfrmehlib.FormCreate(Sender: TObject);
var
ls_sql, ls_name, ls_value: String;
li_l, li_f,li_w: Integer;
begin
ls_name := LowerCase(ADOQuery1.SQL.Text);
li_f := pos('from', ls_name);
li_w := pos('where', ls_name);
if li_w > 0 then
ls_name := trim(midstr(ls_name, li_f + 5, li_w - li_f))
else
ls_name := trim(midstr(ls_name, li_f + 5, length(ls_name)));

ls_sql := 'select pbc_cnam, pbc_hdr from pbcatcol where pbc_tnam = ' + QuotedStr(ls_name);
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(ls_SQL);
ADOQuery2.Open;
li_f := ADOQuery2.RecordCount - 1;
for li_w := 0 to li_f do
begin
ls_name := Trim(ADOQuery2.Fields[0].Value);
for li_l := 0 to li_f do
if DBGridEh1.Columns[li_l].FieldName = ls_name then
begin
ls_value := Trim(ADOQuery2.Fields[1].Value);
// 我必须每次都写而不能保存下来。
DBGridEh1.Columns[li_l].Title.Caption := ls_value;
end;
ADOQuery2.Next;
end;
ADOQuery2.Close;
// 上邊設置了title.caption的屬性后,我想在這個地方將title.caption
// 全部寫到dbgrideh控件所在的*.dfm文件中,雖然在運行時*.dfm是不存在
// 但無論何時*.dfm都應該存在于我們有disk中吧?
// 我看了你大部分關于TWRITE的貼子,但我測試時發現寫進去的東西與*.dfm
// 中的格式有點不同.
end;
 
這是從*.dfm中拷出來的,DELPHI原來的格式
object DBGridEh1: TDBGridEh
Left = 0
Top = 0
Width = 535
Height = 365
Align = alClient
DataSource = DataSource1
FooterColor = clWindow
FooterFont.Charset = DEFAULT_CHARSET
FooterFont.Color = clWindowText
FooterFont.Height = -11
FooterFont.Name = 'MS Sans Serif'
FooterFont.Style = []
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
UseMultiTitle = True
Columns = <
item
DropDownBox.Options = [dlgColumnResizeEh, dlgColLinesEh]
EditButtons = <>
FieldName = 'stor_id'
Footers = <>
Width = 61
end
item
EditButtons = <>
FieldName = 'ord_num'
Footers = <>
Title.Caption = #35330#21934'|ord_num'
end
item
EditButtons = <>
FieldName = 'ord_date'
Footers = <>
Title.Caption = #35330#21934'|ord_date'
Width = 107
end
item
EditButtons = <>
FieldName = 'qty'
Footers = <>
Title.Caption = #35330#21934'|qty'
end
item
EditButtons = <>
FieldName = 'payterms'
Footers = <>
end
item
EditButtons = <>
FieldName = 'title_id'
Footers = <>
Width = 60
end>
end



 
用savetofile保存的東西意然拷不上來,只有這么几個字符上來啦.
TPF0TColumnsWrapper
 
// 寫屬性信息到*.dfm
{
1 如何知道當前form所在的文件名?即單元名?
2 如何將漢字信息轉成####的格式?
}
 
// 但無論何時*.dfm都應該存在于我們有disk中吧?
他们存在于可执行文件中,成为了RC资源,你可以用Exescope这个修改可执行文件中的资源的工具看看就知道了。

从Delphi 5 开始*.dfm有了两种格式,用SaveToFile保存的是原始的dfm格式而不是文本格式,可以用ObjectBinaryToText将原始格式的dfm文件转换为文本格式的dfm文件,可以用以下这段代码来测试一下就可以得到你在ID:2340995贴出的东东:
function ComponentToString(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Text := ComponentToString(Form1);
end;

所以一般情况下用SaveToFile和LoadFromFile处理就足够了。
 
当然在程序已经编译过后是不存在*.dfm文件的,即使你修改了它也不会对你编译过的执行文件有什么作用的。
[red]如何在運行時將FORM中的DBGRID.COLUMN.TITLE.CAPTION
用程序保存到該FORM的*.dfm中?如果能實現我的本意就達到啦[/red]
要达到你的本意你可以这样做:
建立一个资源文件(或其它的你可以读写的文件),将你要设置的DBGRID.COLUMN.TITLE.CAPTION的文字存入这个文件,下次再使用时就可以在form的oncreate事件或其它你想改变它的时候读取出来并赋给DBGRID.COLUMN.TITLE.CAPTION
就可以了吧!
 
报错:TDBGrid没有发现
在ReadM.ReadRootComponent之前,
使用RegisterClass将TDBGrid注册一下
 
to all:
我又前進了一步,最后兩個問題:
1 如何取得某個form所在的unit文件名?
2 當我將修改后的title.caption保存到*.dfm,后
IDE裝入該窗口時,如果使用了DBGRID就正常,如果
使用了DBGRIDEH后,就報fixgridlinecolor..等
屬性找不到,ingore all后程序運行正常?
對ehlib比較熟的請注意,是不是第2個問題沒有辦法
解決?如果沒有辦法解決,我明天再開貼送分,至于第一個
問題,知道的也請幫助一下.
 
TO: xzh2000
不好意思! 因为我时间紧!就如:feier_jun 大侠说的
要用的流来操作,首先要把要操作的对象进行注册!RegisterClasses([TDBGrid]);
可以在TForm 的 OnCreate事件那里注册! 或者用那个初始化的英文单词后面加上
也可以,哈! 我的英文不是很好,只记得前面的几个:initXXXXXXXX;

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2342270
请chnplzh,feier_jun,hongxing_dl,windbell,ysai到这个链接拿分。
 
我还没有那么强。收藏
 
后退
顶部