線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1013
推到 Plurk!
推到 Facebook!

請問前輩在自製元件中於Design-time時,如何在自定的屬性中判斷

尚未結案
ucdesign2
一般會員


發表:24
回覆:33
積分:11
註冊:2002-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-27 09:35:06 IP:211.23.xxx.xxx 未訂閱
請問前輩在自製元件中於Design-time時,如何在自定的屬性中判斷 另一自訂屬性是否已輸入? 在自製的TEdit2Table元件中有自定的兩個屬性A_SQLServerName及 A_DataBaseName,但我想要在A_DataBaseName屬性輸入前先判斷 A_SQLServerName屬性是否已輸入,否則showmessage警告! 請問前輩我在procedure TA_DataBaseNameProperty.GetValues(Proc: TGetStrProc) 中下此判斷指令?謝謝!!    unit Edit2TableREG; interface uses   Windows, Classes, Forms, StdCtrls,DesignIntf, DesignEditors,comobj,Dialogs; type     TA_SQLServerNameProperty = class(TStringProperty) // Property Editor Class public function GetAttributes: TPropertyAttributes; override; procedure GetValues(Proc: TGetStrProc); override; end; TA_DataBaseNameProperty = class(TStringProperty) // Property Editor Class public function GetAttributes: TPropertyAttributes; override; procedure GetValues(Proc: TGetStrProc); override; end; procedure Register; implementation USES doedit2table; {$R *.DCR} procedure Register; begin RegisterComponents('Custom', [TEdit2Table]); RegisterPropertyEditor(TypeInfo(String), TEdit2Table, 'A_SQLServerName', TA_SQLServerNameProperty); RegisterPropertyEditor(TypeInfo(String), TEdit2Table, 'A_DataBaseName', TA_DataBaseNameProperty); end; { TServerNameProperty } function TA_SQLServerNameProperty.GetAttributes: TPropertyAttributes; begin Result := [paValueList, paAutoUpdate, paSortList]; end; procedure TA_SQLServerNameProperty.GetValues(Proc: TGetStrProc); var ServerNum:integer; A_SQLServerName: TStrings; SQLServer: Variant; ServerList: Variant; begin A_SQLServerName := nil; try A_SQLServerName := TStringList.Create; SQLServer := CreateOleObject('SQLDMO.Application'); ServerList:= SQLServer.ListAvailableSQLServers; for ServerNum := 1 to ServerList.Count do Proc(ServerList.Item(ServerNum)); finally A_SQLServerName.Free; end; end; { TA_DataBaseNameProperty } function TA_DataBaseNameProperty.GetAttributes: TPropertyAttributes; begin Result := [paValueList, paAutoUpdate, paSortList]; end; procedure TA_DataBaseNameProperty.GetValues(Proc: TGetStrProc); var DbaseNum:integer; A_DataBaseName: TStrings; ATable:TEdit2Table; begin // 此處如果要判斷自定的A_SQLServerName字串屬性尚未輸入則 // 先showmessage警告! 請教前輩指令要如何寫? A_DataBaseName := nil; try A_DataBaseName := TStringList.Create; //adoconnect:=TADOConnection.Create(Self); ATable:=TEdit2Table(GetComponent(0)); ATable.FAdoDataSet1.CommandText:='USE master SELECT Name From sysdatabases ORDER BY dbid'; ATable.FAdoDataSet1.Active:=true; while not ATable.FADODataSet1.Eof do begin Proc(ATable.FADODataSet1.Fields[0].Text); ATable.FADODataSet1.Next; end; ATable.FADODataSet1.Close; finally A_DataBaseName.Free; end; end; end.
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-27 13:12:59 IP:218.80.xxx.xxx 未訂閱
procedure TA_DataBaseNameProperty.GetValues(Proc: TGetStrProc);
var
  DbaseNum:integer;
  A_DataBaseName: TStrings;
  ATable:TEdit2Table;
begin
  ATable:=TEdit2Table(GetComponent(0)); 
  if ATable.A_SQLServerName='' then Raise Exception.Create('input A_SQLServerName!');
久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
ucdesign2
一般會員


發表:24
回覆:33
積分:11
註冊:2002-10-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-27 15:43:39 IP:211.23.xxx.xxx 未訂閱
謝謝mustapha.wang前輩再次相助!終於了解GetComponent(0)的用法,謝謝!! 可否再請教如何在procedure TA_DataBaseNameProperty.GetValues(Proc: TGetStrProc)結束前取得使用者的屬性設定值? procedure TA_DataBaseNameProperty.GetValues(Proc: TGetStrProc); var DbaseNum:integer; A_DataBaseName: TStrings; ATable:TEdit2Table; begin ATable:=TEdit2Table(GetComponent(0)); : : //我想在此procedure結束前取得使用者的屬性是否未設定 //但我用if ATable.FA_DataBaseName='' then... //來判斷總是抓不到新的屬性設定值! //(在別的procedure中才抓得到新屬性設定值) //請教前輩該如何才能辦到?? end;
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-29 13:31:15 IP:218.80.xxx.xxx 未訂閱
procedure TA_DataBaseNameProperty.GetValues(Proc: TGetStrProc); 是IDE调用的,就是下拉Combobox时,因此这里不涉及对属性赋值。 procedure TA_DataBaseNameProperty.SetValue(const Value: string);才是。 这都是通过IDE触发的,看你具体的需要,一般你写在 TEdit2Table.SetA_DataBaseName来判断就好了。     久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
ucdesign2
一般會員


發表:24
回覆:33
積分:11
註冊:2002-10-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-29 16:35:59 IP:211.23.xxx.xxx 未訂閱
謝謝mustapha.wang前輩的解釋 !!
系統時間:2024-07-04 8:52:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!