Fórum Duvida com DDE client #332138
26/10/2006
0
unit DDEClient;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DdeMan, ExtCtrls;
type
TDDEReader = class(TComponent)
private
FDdeClientItem: TDdeClientItem;
FDdeClientConv: TDdeClientConv;
FService: String;
FTopic: String;
FResult: Array[0..200] of String;
FEnabled: Boolean;
protected
function ReturnAtivo(Valor: Integer): String;
function ReturnItem(Valor: Integer): String;
published
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetAtivo(Valor: Integer): String;
procedure SetEnabled(Value: Boolean);
procedure Running;
end;
procedure Register;
implementation
constructor TDDEReader.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TDDEReader.Destroy;
begin
inherited Destroy;
end;
procedure TDDEReader.Running;
Var
X,Y: Integer;
begin
try
if FEnabled then
begin
for X := 0 to 9 do
begin
for Y := 0 to 6 do
begin
FDdeClientConv := TDdeClientConv.Create(Self);
FDdeClientItem := TDdeClientItem.Create(Self);
FDdeClientConv.ConnectMode := ddeAutomatic;
FDdeClientConv.FormatChars := False;
FDdeClientItem.DdeConv := FDdeClientConv;
FDdeClientConv.DdeService := ´GOL´;
FDdeClientConv.DdeTopic := ´COT´;
FDdeClientConv.SetLink(´GOL´,´COT´);
FDdeClientItem.DdeItem := ReturnAtivo(X) + ´.´ + ReturnItem(Y);
FDdeClientConv.OpenLink;
if (FDdeClientItem.Text <> ´´) then
begin
FResult[X] := FDdeClientItem.Text;
end
else
begin
FResult[X] := ´null´;
end;
FDdeClientConv.CloseLink;
FDdeClientConv.Free;
FDdeClientItem.Free;
end;
end;
end;
except
end;
end;
function TDDEReader.GetAtivo(Valor: Integer): String;
begin
try
GetAtivo := FResult[Valor];
except
end;
end;
function TDDEReader.ReturnAtivo(Valor: Integer): String;
begin
case Valor of
0: ReturnAtivo := ´IBOV´;
1: ReturnAtivo := ´IND1´;
2: ReturnAtivo := ´DJIA´;
3: ReturnAtivo := ´DOL1´;
4: ReturnAtivo := ´EUSCOM´;
5: ReturnAtivo := ´ERISCBR´;
6: ReturnAtivo := ´SP500´;
7: ReturnAtivo := ´PETR4´;
8: ReturnAtivo := ´VALE5´;
9: ReturnAtivo := ´TNPL4´;
end;
end;
function TDDEReader.ReturnItem(Valor: Integer): String;
begin
case Valor of
0: ReturnItem := ´ESPEC´;
1: ReturnItem := ´ULT´;
2: ReturnItem := ´VAR´;
3: ReturnItem := ´ABE´;
4: ReturnItem := ´FEC´;
5: ReturnItem := ´MIN´;
6: ReturnItem := ´MAX´;
end;
end;
procedure TDDEReader.SetEnabled(Value: Boolean);
begin
FEnabled := Value;
end;
procedure Register;
begin
RegisterComponents(´NightShade´,[TDDEReader]);
end;
end.
possuo 2 duvidas, o que estaria causando exceptions com os objetos FDdeClientConv e FDdeClientItem?
pois essa exception está impossibilitando o retorno de dados a minha aplicação..
2º duvida, como trabalho utilizando coordenadas matrizes?
abraço a qm poder me auxiliar..
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DdeMan, ExtCtrls;
type
TDDEReader = class(TComponent)
private
FDdeClientItem: TDdeClientItem;
FDdeClientConv: TDdeClientConv;
FService: String;
FTopic: String;
FResult: Array[0..200] of String;
FEnabled: Boolean;
protected
function ReturnAtivo(Valor: Integer): String;
function ReturnItem(Valor: Integer): String;
published
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function GetAtivo(Valor: Integer): String;
procedure SetEnabled(Value: Boolean);
procedure Running;
end;
procedure Register;
implementation
constructor TDDEReader.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TDDEReader.Destroy;
begin
inherited Destroy;
end;
procedure TDDEReader.Running;
Var
X,Y: Integer;
begin
try
if FEnabled then
begin
for X := 0 to 9 do
begin
for Y := 0 to 6 do
begin
FDdeClientConv := TDdeClientConv.Create(Self);
FDdeClientItem := TDdeClientItem.Create(Self);
FDdeClientConv.ConnectMode := ddeAutomatic;
FDdeClientConv.FormatChars := False;
FDdeClientItem.DdeConv := FDdeClientConv;
FDdeClientConv.DdeService := ´GOL´;
FDdeClientConv.DdeTopic := ´COT´;
FDdeClientConv.SetLink(´GOL´,´COT´);
FDdeClientItem.DdeItem := ReturnAtivo(X) + ´.´ + ReturnItem(Y);
FDdeClientConv.OpenLink;
if (FDdeClientItem.Text <> ´´) then
begin
FResult[X] := FDdeClientItem.Text;
end
else
begin
FResult[X] := ´null´;
end;
FDdeClientConv.CloseLink;
FDdeClientConv.Free;
FDdeClientItem.Free;
end;
end;
end;
except
end;
end;
function TDDEReader.GetAtivo(Valor: Integer): String;
begin
try
GetAtivo := FResult[Valor];
except
end;
end;
function TDDEReader.ReturnAtivo(Valor: Integer): String;
begin
case Valor of
0: ReturnAtivo := ´IBOV´;
1: ReturnAtivo := ´IND1´;
2: ReturnAtivo := ´DJIA´;
3: ReturnAtivo := ´DOL1´;
4: ReturnAtivo := ´EUSCOM´;
5: ReturnAtivo := ´ERISCBR´;
6: ReturnAtivo := ´SP500´;
7: ReturnAtivo := ´PETR4´;
8: ReturnAtivo := ´VALE5´;
9: ReturnAtivo := ´TNPL4´;
end;
end;
function TDDEReader.ReturnItem(Valor: Integer): String;
begin
case Valor of
0: ReturnItem := ´ESPEC´;
1: ReturnItem := ´ULT´;
2: ReturnItem := ´VAR´;
3: ReturnItem := ´ABE´;
4: ReturnItem := ´FEC´;
5: ReturnItem := ´MIN´;
6: ReturnItem := ´MAX´;
end;
end;
procedure TDDEReader.SetEnabled(Value: Boolean);
begin
FEnabled := Value;
end;
procedure Register;
begin
RegisterComponents(´NightShade´,[TDDEReader]);
end;
end.
possuo 2 duvidas, o que estaria causando exceptions com os objetos FDdeClientConv e FDdeClientItem?
pois essa exception está impossibilitando o retorno de dados a minha aplicação..
2º duvida, como trabalho utilizando coordenadas matrizes?
abraço a qm poder me auxiliar..
Nightshade
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)