全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1357
推到 Plurk!
推到 Facebook!

请教各位大哥,dbgrideh 的网格自动适应 字段的宽度,谢谢!

答題得分者是:wameng
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-06 10:21:12 IP:218.14.xxx.xxx 未訂閱
我要使 dbgrideh 的网格自动适应 字段的宽度: procedure TKaTypeSetForm.FormCreate(Sender: TObject); begin ADOStoredProc1.Close; ADOStoredProc1.ProcedureName:='procselectKardTypeTable'; ADOStoredProc1.Prepared:=true; ADOStoredProc1.Open; DataSource1.DataSet:=ADOStoredProc1; DBGridEh1.Columns[0].Title.caption:='卡类型编号'; DBGridEh1.Columns[1].Title.caption:='卡 类 型 名 称'; TLMDBG(DBGrideh1).OptimizeSelectedColsWidth(DBGrideh1.Columns[0]); TLMDBG(DBGrideh1).OptimizeSelectedColsWidth(DBGrideh1.Columns[1]); end; 编译时的提示是: [Error] KaTypeSet.pas(370): Undeclared identifier: 'TLMDBG' [Error] KaTypeSet.pas(370): Missing operator or semicolon [Error] KaTypeSet.pas(371): Missing operator or semicolon 请教各位大哥,我错误在那里啊? TLMDBG(DBGrideh1).OptimizeSelectedColsWidth(DBGrideh1.Columns[1]); 也是盒子里的一位大哥教我的!
lsh998
中階會員


發表:163
回覆:138
積分:60
註冊:2005-01-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-06 21:19:45 IP:219.128.xxx.xxx 未訂閱
请各位大哥帮我顶啊] 谢谢!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-06 23:27:05 IP:219.81.xxx.xxx 未訂閱
剛好找到 EhLib Source Code 找了一下。 原來 OptimizeSelectedColsWidth 是定義在 TCustomDBGridEh 的protected中。並未對外開放使用。    因此我們只要動一個手腳,就可以引用了。
Type
  TMyDBGridEh = Class(TCustomDBGridEh)
  Public
    { 拉到 Public 順便把 OptimizeColsWidth 拉過來。不要用,刪掉它 }
    procedure OptimizeSelectedColsWidth(WithColumn: TColumnEh);
    procedure OptimizeColsWidth(ColumnsList: TColumnsEhList);
  end;
.....
{由於它不是屬性所以不能直接拉,只能繼承引用。}
procedure TMyDBGridEh.OptimizeSelectedColsWidth(WithColumn: TColumnEh);
begin
  inherited OptimizeSelectedColsWidth(WithColumn);
end;
procedure TMyDBGridEh.OptimizeColsWidth(ColumnsList: TColumnsEhList);
begin
  inherited OptimizeColsWidth(ColumnsList);
end;    ...
 TLMDBG(DBGrideh1).OptimizeSelectedColsWidth(DBGrideh1.Columns[1]);
改為
 TMyDBGridEh(DBGridEh1).OptimizeSelectedColsWidth(DBGridEh1.Columns[1]);
kingjit
一般會員


發表:0
回覆:1
積分:0
註冊:2007-04-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-23 22:47:56 IP:58.252.xxx.xxx 訂閱
楼上大哥说的答案,已经可以解决问题了.

但是我想补充一点是

其实定义一个子类,并不需要继随他的OptimizeColsWidth的属性,变成PUBLICE也可以访问
因为本身protect 的属性就是子类可以访问的了.

因此程式可以写成

THackGrid=class tdbgrideh;


THackGrid(dbgrideh1).OptimizeColsWidth


您可以试一试,想访问其他类受保护的属性或过程时,也可以同样用这种方法跳过对protect属性的保护


希望对您能有所帮助喔
系統時間:2024-05-14 14:57:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!