Extented me pose problèmes :-(

Résolu
Damien7784 Messages postés 12 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 4 juillet 2010 - 22 juin 2010 à 23:00
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 24 juin 2010 à 10:54
Bonsoir à tous;

j'espère être dans la bonne section pour exposer mon souçis.

Voilà, je code depuis peux (hier lol) en Pascal ( delphi 7).

J'ai réussi à connecter mon "application" au service DDE d'un logiciel de trading; je récupère sans problèmes les données dans des labels, de ce coté là tout fonctionne!

Seulement, à partir de moment où je veux effectuer des calculs avec ces données, le code me met une erreur du type type incompatible, string et extended, ou encore int et extended

J'ai bien entendu fait des recherches sur ce site et un peux partout, mais pas moyen de trouvé comment transformer ces données en "nombres" pour pouvoir travailler avec!

Les données DDE varient toutes les secondes +- et comporte 4 chiffres décimaux.

J'ai essayé le StrToFloat et toutes ces petites fonctions, mais rien n'y fait.

Auriez vous une idée pour transformer ces données dans un format exploitable svp?

27 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
23 juin 2010 à 18:08
Essaie :


X := StrToFloat(Trim(DdeClientItem.Text));
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
23 juin 2010 à 23:48
«il faut s'assurer que toutes les données ont été transmise en effet il réagit dés le premier caractère transmis» 


Ah oui?
J'apprends un truc, là.
Je ne pensais pas que cela se faisait caractère par caractère, mais par bloc.
Très utile à savoir, ça...
0
Damien7784 Messages postés 12 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 4 juillet 2010
24 juin 2010 à 00:31
Merci à vous deux pour vos aides, c'est vraiment sympa!

Fonctionne très bien avec le StrToFloatDef, quand je pense que c'est 3 lettres (def) qui m'ont fait galérer pour travailler en direct


En tout vas, je suis content ça fonctionne, j'ai effacé les procédures "MouseMove" pour être sur, puis tout mis dans celle qui travaille avec le DdeItem.Onchange, c'est parfait.

Je met tout de même le code Form1 au cas ou vous verrez une connerie de ma part!

Merci encore
unit DDE;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DdeMan, Buttons, Unit2, ExtCtrls, OleCtrls, Chartfx3,
  VCFI, ComCtrls, Gauges;

type
  TForm1 = class(TForm)
    BIDServeur: TDdeClientConv;
    BIDClient: TDdeClientItem;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    ComboDevise: TComboBox;
    LblBalance: TEdit;
    GroupBox4: TGroupBox;
    GroupBox5: TGroupBox;
    Label1: TLabel;
    highServeur: TDdeClientConv;
    highClient: TDdeClientItem;
    lowserveur: TDdeClientConv;
    Lowclient: TDdeClientItem;
    Gauge1: TGauge;
    ComboPaires: TComboBox;
    AskServeur: TDdeClientConv;
    AskClient: TDdeClientItem;

    procedure BIDClientChange(Sender: TObject);
    procedure ComboPairesChange(Sender: TObject);




  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1    : TForm1;
  Current  : Extended;
  High     : Extended;
  Low      : Extended;
  Ask      : Extended;
  Coef     : integer;
  Sto      : integer;
  StoTxt   : String;
  SpreadTxt: String;
  


implementation

{$R *.dfm}




//change la paire à appeller dans les Dde.item
procedure TForm1.ComboPairesChange(Sender: TObject);
begin
BidClient.DdeItem  := combopaires.Text;
AskClient.DdeItem  := combopaires.Text;
HighClient.DdeItem := combopaires.Text;
lowclient.DdeItem  := combopaires.Text;
GroupBox5.Caption  := combopaires.Text;
end;


// change le texte pour les prix, spreads et crée une gauge
procedure TForm1.BIDClientChange(Sender: TObject);
begin
Label1.Caption := BidClient.Text;
DecimalSeparator := '.';

Current := StrToFloatDef(bidClient.Text, 0.0);
High    := StrToFloatDef(highClient.Text, 0.0);
Low     := StrToFloatDef(lowclient.Text, 0.0);
Ask     := StrToFloatDef(askclient.Text, 0.0);
Sto     := round(((Current-Low)/(High-Low))*100);
coef    := 10000;     //ajouter conditions pour que le coef soit de 100 pour les JPY
SpreadTxt:= FloatToStr(Current-Ask*coef);
StoTxt  := FloatToStr(Sto);
GAUGE1.MinValue:= 0;

gauge1.MaxValue:= 100;
gauge1.Progress:= Sto;
end;



 {Tranformation des données reçues pour en faire des calculs}
end.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
24 juin 2010 à 01:35
salut cari
cela dépend du protocole utilisé et de la base de données et comme en la matière il n'y ni normes,ni standard c'est toujours le b..l et il vaut mieux prendre la cen=inture et les bretelles!!
d'autre part quand tu fais Edit1.Text='' cela déclenche le OnChange et le StrToFloat n'aime pas du tout ce genre d'opération un solution dans le OnChange---> if Edit1.Text='' then exit; ou utiliser le StrToFloatDef
Jlen
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 juin 2010 à 02:56
Si je peux me permettre de faire ma chochotte

var
  Form1: TForm1;
  Current, High , Low, Ask : Extended;
  Sto                      : integer;
  StoTxt, SpreadTxt        : String;



{change la paire à appeller dans les Dde.item}
procedure TForm1.ComboPairesChange(Sender: TObject);
begin
  With ComboPaires Do
    Begin
      BidClient.DdeItem  := Text;
      AskClient.DdeItem  := Text;
      HighClient.DdeItem := Text;
      lowclient.DdeItem  := Text;
      GroupBox5.Caption  := Text;
    End;
end;


{change le texte pour les prix, spreads et crée une gauge}
procedure TForm1.BIDClientChange(Sender: TObject);
begin
  Label1.Caption := BidClient.Text;
  DecimalSeparator := '.';

  Current := StrToFloatDef(bidClient.Text, 0.0);
  High    := StrToFloatDef(highClient.Text, 0.0);
  Low     := StrToFloatDef(lowclient.Text, 0.0);
  Ask     := StrToFloatDef(askclient.Text, 0.0);
  Sto     := round(((Current-Low)/(High-Low))*100);
  SpreadTxt:= FloatToStr(Current-Ask*10000);
  StoTxt  := FloatToStr(Sto);
  With Gauge1 Do
    Begin
      MinValue:= 0;
      MaxValue:= 100;
      Progress:= Sto;
    End;
end;
0
Damien7784 Messages postés 12 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 4 juillet 2010
24 juin 2010 à 09:37
Lol pas de soucis, je ne connaissais pas le "With".
J'ai encore quelques pages de tutoriel à lire
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 juin 2010 à 10:54
Bon si déjà .. autant donner les bons conseils de suite ... les mauvaises habitudes on la vie dure (et on en sait tous quelque chose ... hein ) voir les conventions d'écriture PASCAL

La même en PDF pour ceux qui voudraient

@Francky:
on ne devrait pas regrouper les variable comme ça: voir ce chapitre


[hr]@+Cirec
[hr]
0
Rejoignez-nous