IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Lecture de fonction &Positionnement


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut Lecture de fonction &Positionnement
    Bonjour à tous,

    je suis actuellement en train de travailler sur des états réalisés par un logiciel assez ancien. Je dois tirer de ces états un certains nombre d'informations pour pouvoir imprimer le fichier en cours. L'état que je possède me fournit notament par endroit des formules du type suivant :
    if(condition,réponse si vrai,réponse si faux)
    Le problème est le suivant, comme je tire cette ligne de code d'un fichier texte je ne peux pas l'exécuter, de plus il ne s'agit pas de language Delphi. Est ce que quelqu'un pourrait m'indiquer un composant delphi(s'il existe) qui pourrait me fournir le résultat de ma fonction qui est à l'état de chaine de caractère lorsque je la récupère.

    J'ai une autre petite question, pour pouvoir imprimer ma page je dois savoir où est ce que sont situés les différents blocs pour pouvoir les positionner. Or mes états sont décrits de la façon suivante :
    Chaque bloc est décrit par la taille de la zone qui lui est allouée, parfois X et Y, la police par défaut à utiliser si elle n'est pas spécifiée pour les champs lui appartenant, la couleur, le style du pen, l'encadrement... Tout comme chaque champs qui en plus possède le type de la donnée(la plupart du temps une string) et si c'est une constante, une formule comme indiquée précédemment ou si c'est une donnée extraite d'une base de donnée. Le problème est le suivant parfois le X et le Y ne sont pas communiqués mais on nous indique juste que le champs est lié à tel autre champ par le dessus, le dessous ou tel côté(ligne d'information link). Pour trouver les coordonnées j'ai pensé que je pourrais rechercher dans le champ auquel est attaché le champ sur lequel je travaille ses coordonnées X et Y auquelles j'ajouterais la largeur ou la hauteur pour avoir ma position. Si elles ne sont pas connus à cause d'un autre link (il est possible d'avoir plusieurs cases consécutives réliées par des links) seront elles aussi calculées. Le soucis c'est que certains blocs sont réutilisés à la suite d'eux même en changeant certaines données qui sont piochées dans la base de donnée. Ce qui m'oblige à effectuer à chaque fois les calculs pour retrouver le positionnement de mes champs. Celà va m'occasionner un grand nombre de calculs par la machine et j'ai peur que celà soit trop lourd et ralentisse beaucoup l'impression. Est ce que quelqu'un aurait une autre idée?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut et bienvenue dans les forums de Developpez.com !

    Est ce que quelqu'un pourrait m'indiquer un composant delphi(s'il existe) qui pourrait me fournir le résultat de ma fonction qui est à l'état de chaine de caractère lorsque je la récupère.
    Je ne connais pas de composant tout indiqué, surtout que tu ne nous donne pas le language qui a été utilisé, ou au moins un exemple. Même si un tel composant était introuvable, il te reste la possibilité d'extraire la condition et les 2 réponsent assez facilement puisqu'on sait que :
    • la condition commence après la 1ère parenthèse et s'arrête à la 1ère virgule
    • la 1ère réponse commence après la 1ère virgule et s'arrête à la 2ème
    • la seconde réponse commence après la 2ème virgule et s'arrête à la 2ème parenthèse
    Bref, une fois que tu as récupéré ces 3 éléments, il faudra analyser la condition (suivant le language utilisé) pour retourner la réponse appropriée. D'ailleurs, à quoi ressemble ce genre de condition ?

    Petite parenthèse : Je ne suis pas de ceux qui pense que l'utilisation des composants est une réponse à tous les problèmes. J'installe des composants avec modération et lorsque cela est indispensable ou me fais gagner beaucoups de temps... De plus, la plupart des compos gratuits ne fournissent pas les sources et cela peut devenir un réel problème lorsqu'on passe d'une version de Delphi à une autre (les fichiers DCU seront incompatibles)...

    Celà va m'occasionner un grand nombre de calculs par la machine et j'ai peur que celà soit trop lourd et ralentisse beaucoup l'impression. Est ce que quelqu'un aurait une autre idée?
    Quelle serait approximativement le temps de calcul si tu décidais par exemple d'analyser la totalité des données et de créer ainsi un tableau contenant toutes les coordonnées pour ne plus avoir à les recalculer ?
    De toutes façons, vu la complexité de ta question, j'ai peur de répondre à côté et de t'induire en erreur plus qu'autre chose. En réalité, j'ai du mal à visualiser de quoi il s'agit. Si tu pouvais donner quelques exemples types illustrants les différentes structures que l'on pourrait avoir à analyser, ça aiderait à la compréhension du truc.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Pour la première question ça peut être ça :
    if(Euro,"€","FRF")
    En fait un champ se présente sous la forme suivante :
    Field:Alpha,String,Calc,Formula
    Formula=if(Euro,"€","FRF")
    Font=Arial,9,Bold
    X=13,125
    Y=5,213
    Height=2,12
    Width=17,54
    Etc.
    En sachant que après le signe = de Formula je peux avoir soit le résultat directement entre guillements, soit la fonction entre parenthèses, soit la fonction brute.
    Donc c'est traitable comme tu me l'as dit c'est ce que je pensais faire s'il n'y avait pas d'autres méthodes. Mais ça va être plutôt casse pied à extraire. Donc s'il y a des extracteurs qui existent ça serait avec plaisir que je les essaierai.



    Pour la seconde question c'est un peu plus compliqué.
    En fait j'ai des blocs, certains correspondent à des entêtes de page, à des bas de page... Pour gérer les entêtes et les bas de page ce n'est pas compliqué lorsque j'indique le bloc que je veux imprimer je mémorise dans une variable globale la position à laquelle je m'arrête et suivant les paramètres que j'ai relevé dans mon état je sais quand est ce que je dois mettre les blocs de bas de page, de saut de page, les entêtes...
    La où ça se complique c'est que l'un des blocs correspond au contenu des factures. Donc j'imprime successivement ce bloc qui accède à la base de données d'où il tire les informations nécessaires. J'ai une boucle qui charge les éléments de la base de données qui indique donc les infos de ce bloc à l'imprimante. Je fais ensuite un next pour déplacer le curseur dans la base de données et accéder aux nouvelles infos. Puis je procéde à une nouvelle impression du bloc. Et ceci jusqu'à la fin de la base de donnée, après quoi j'imprime les blocs de fin de facture.

    Maintenant un exemple :
    Blockétail
    Field:Resultat,String,Const
    Font=Arial,9,Bold
    X=13,125
    Y=5,213
    Height=2,12
    Width=17,54
    Value="Coucou"
    Etc.
    Field:NUMERO,String,Data,NUMERO
    Font=Arial,9,Bold
    Height=2,12
    Width=17,54
    Link=Left,Resultat
    Etc.

    Et ainsi de suite en sachant qu'un champ peut être attaché via la propriété link à un champ qui lui aussi possède un link sur un autre champ... Lorsque je veux indiquer le champ à l'aide de printer j'ai besoin des coordonnées. Dans le cas présent pour placer NUMERO, je dois regarder les coordonnées de résultat, comme link de NUMERO est left,Resultat je dois prendre le même Y mais pour le X je dois prendre le X de Resultat et ajouter sa valeur Widthpour savoir où est ce que je dois placer mon NUMERO. Ici j'ai simplifié le problème car le X de base peut être variable mais c'est un autre soucis sur lequel je planche pour le moment.

    J'espère avoir été un peu plus clair dans mes explications. Et si ce n'est pas encore suffisant n'hésite pas à me le dire j'essaierais d'éclaircir ces obscurités.

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    J'ai fini par résoudre mes problèmes. Pour les formules je vais adopter la solution de Sub0 quand aux problème de link je viens de faire des tests et ça doit être supportable pour la machine si j'effectue tous les calcculs à chaque fois.
    Merci pouir ton aide.

  5. #5
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Bien entendu, si tu as d'autres questions en rapport avec ce projet, poste ton message dans ce topic, même si il porte déjà le tag RESOLU, tu peux l'enlèver en cliquant à nouveau sur le bouton en bas de page.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/05/2015, 17h46
  2. Réponses: 4
    Dernier message: 09/08/2012, 15h35
  3. Lecture d'adresse et positionnement
    Par Heisen dans le forum C
    Réponses: 7
    Dernier message: 14/08/2011, 14h17
  4. [DOM] Lecture de XML et décision en fonction du contenu
    Par samios dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 14/10/2004, 17h09
  5. Réponses: 12
    Dernier message: 14/06/2004, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo