請問前輩在自製元件中於Design-time時,如何在自定的屬性中判斷 |
尚未結案
|
ucdesign2
一般會員 ![]() ![]() 發表:24 回覆:33 積分:11 註冊:2002-10-23 發送簡訊給我 |
請問前輩在自製元件中於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 發送簡訊給我 |
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 發送簡訊給我 |
謝謝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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |