请教:一个控件,内置一个client: TIdTCPClient,设计期使client.connect,出错.(100分)

  • 主题发起人 主题发起人 iKing
  • 开始时间 开始时间
I

iKing

Unregistered / Unconfirmed
GUEST, unregistred user!
网上的一个控件.现在希望增加一个属性(比如:active),使得设计期能够连接服务器,读出记录集.总是不成功.

控件地址:
http://torry.net/db/mtier/db_midasalt/TCPAdoServerClient.zip
 
property Active : boolean read FActive write SetActive;

//..................
procedure TTCPAdoClient.SetActive(const Value: boolean);
begin
if FActive <> Value then
FActive := Value;
if FActive then
begin
if not Connected then
begin
// FIdTCPClient.Connect();<<----设计期控件出错,运行时没问题
end;
end;
end;
 
不好意识,不能帮上你的忙!
请问报表怎么可以实现分列?
 
我用的是reportmachine,TRMmemoview 设置ColumnCount 属性就行了
 
一般的控件在设计期不会做实际的I/O等操作。
你可以通过csDesigning判断是否在设计期,通过csLoading判断控件是否正在从载入。这两种状态下都不要执行实际的I/O。
type
TTCPAdoClient = class(TComponent)
……
private
procedure SetActive(const Value: boolean);
protected
procedure Loaded;override;
……
end;

implementation

procedure TTCPAdoClient.SetActive(const Value: boolean);
begin
if FActive=Value then Exit;
FActive:=Value;
if ComponentState*[csDesigning,csLoading]<>[] then Exit;
if FActive then
begin
if not Connected then
begin
// FIdTCPClient.Connect();<<----设计期控件出错,运行时没问题
end;
end;
end;

procedure TTCPAdoClient.Loaded;
begin
inherited;
if FActive then
begin
FActive:=False;
SetActive(True);
end;
end;
不打基础学人家写个毛的控件。
 
谢谢地质兄的批评.

如果一定要在设计期连接,应该怎么做呢?请高人指点一二...
知道现在有几个控件能这么做,不知道咋弄的.
 
说出错了要说出了什么错.别人才好给你找原因.没看提问的智慧么.
 
继续感谢地质兄的关注!

如果设计期,设置属性active=true,ide立即弹出出错信息:
---------------------------
Error
---------------------------
Access violation at address 0684A197 in module 'indy70.bpl'. Read of address 0000007C.
---------------------------
OK
---------------------------
 
后退
顶部