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

Lazarus Pascal Discussion :

Récupérer les infos d'une application console


Sujet :

Lazarus Pascal

  1. #21
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut JP, effectivement MemConsole.Lines.Text += output; cela ne fonctionne pas. Par contre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Var
      S: String;
    begin
      //mmoConsole.Lines.Text :=  mmoConsole.Lines.Text +  ConsoleToUtf8(output);
      S := mmoConsole.Lines.Text;
      S +=  ConsoleToUtf8(output);
      mmoConsole.Lines.Text := S;
    fonctionne.

    J'ai eu le même souci, d' étrange comportement de la part du compilateur avec les "helpers" avant-hier j'ai voulu "chainer" une instruction avec une fonction présente dans l'unité math, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if Y = MaxY then
       M := RandomRange(1,MaxM+1).Clamp(1,MaxM) 
    else
      M := RandomRange(1,12+1).Clamp(1,12);
    J'ai obtenu le message d'erreur TypesHelpers.pas(1860,33) Error: Illegal qualifier juste pour le 1er pas le 2eme

    En englobant les instructions avec begin..end

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if Y = MaxY then
      begin
         M := RandomRange(1,MaxM+1).Clamp(1,MaxM);    
      end
      else
      begin
         M := RandomRange(1,12+1).Clamp(1,12);
      end;
    idem même erreur

    Par contre avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if Y = MaxY then
      begin
         M := RandomRange(1,MaxM+1)
         M := M.Clamp(1,MaxM);    
      end
      else
      begin
         M := RandomRange(1,12+1).Clamp(1,12);
      end;
    Par d'erreur sur le 2eme après le else J'ai testé avec la version "Trunk" (Lazarus 1.9 + FPC 3.1.x) même comportement
    C'est un bug à signaler à mon avis
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  2. #22
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Chalut les copains (j'ai des cailloux dans la bouche !)

    Citation Envoyé par jurassic pork Voir le message
    en version 1.8.x l'option Opérateur de style C (*=, +=, /= et -=) (-Sc, {$COPERATORS ON}) est cochée par défaut
    Ça ne s'invente pas et j'étais loin d'y avoir pensé...
    Après insertion de cette directive, Lazarus cause en C,

    Citation Envoyé par BeanzMaster Voir le message
    Salut JP, effectivement MemConsole.Lines.Text += output; cela ne fonctionne pas.
    Bon, on en est tous là, ma vieille 1.4 comme vos récentes 1.8.2

    Donc en résumé le style C fonctionne avec 2 variables de type string mais pas avec un objet dont on utilise une propriété de type string et une variable de type string.
    Et même en allant à l'essentiel : je vire le memo et ses .Lines et j'utilise directement form1.Caption += s; --> pâté
    Idem avec un bouton.

    Encore un truc bien chelou et vicelard
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #23
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 952
    Points : 9 281
    Points
    9 281
    Par défaut
    hello,
    jamie m'a répondu sur mon problème d'opérateur += dans le forum principal de Lazarus ici
    Ami calmant, J.P (sans T)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #24
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Je relance cette discussion où vous m'avez aidé à récupérer les données issues d'une application console (A) lancée par un programme graphique (P).

    Maintenant, c'est moi qui écrit l'application console qui, en fait va être une application graphique. Quelle est l'instruction que je dois utiliser dans (A) pour envoyer une information en sortie que récupérera (P) ?

    C'est un writeln, si oui, vers quoi ?

    Cordialement.

    Pierre.

  5. #25
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Maintenant, c'est moi qui écrit l'application console qui, en fait va être une application graphique. Quelle est l'instruction que je dois utiliser dans (A) pour envoyer une information en sortie que récupérera (P) ?
    J'ai pas tout bien compris : donc en fait tu as là 2 applications graphiques ? En première approche ultra-rapide, je dirais qu'il faut faire l'inverse de la 1re fois.

    Citation Envoyé par ChPr Voir le message
    C'est un writeln, si oui, vers quoi ?
    Pourquoi un writeln dans une appli graphique ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #26
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    J'ai pas tout bien compris : donc en fait tu as là 2 applications graphiques ? En première approche ultra-rapide, je dirais qu'il faut faire l'inverse de la 1re fois. ...
    Oui, j'ai deux applications graphiques. La première A qui tourne en permanence et intercepte des messages claviers. Lorsque j'appuie (par exemple) sur la touche F2, cela lance une deuxième application graphique B. C'est une petite fenêtre dans laquelle je rentre des valeurs numériques que je voudrais voir transmises dans l'application A lorsque je ferme B.

    Citation Envoyé par Jipété Voir le message
    ... Pourquoi un writeln dans une appli graphique ?
    J'imagine que c'est ce qui est utilisé dans une application console. et c'est pourquoi j'ai utilisé cette instruction dans mon application B.

    J'ai essayé Writeln(stdout, val), mais je ne reçois rien dans A. Par contre, (sous Windows), lorsque je ferme l'application B, une petite fenêtre s'ouvre avec pour titre "error", un bouton "OK" et la valeur "val" affichée.

    Donc, ma question est que dois faire pour transmettre une valeur de l'application B vers l'application A.

    Cordialement.

    Pierre

  7. #27
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Donc, ma question est que dois faire pour transmettre une valeur de l'application B vers l'application A.
    Hé bien mais un writeln !

    Démo :
    Le code de l'appli B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button8Click(Sender: TObject);
    begin
      writeln(timetostr(now));
    end;
    L'exécution (le "./" c'est pour dire "exécute le fichier que je te donne ici". C'est du Linux, je sais pas si tu connais) :
    Nom : writeln.png
Affichages : 206
Taille : 7,2 Ko

    Mais il ne faut pas que l'appli A appelle l'appli B, je pense. Il faut que l'appli A appelle un .bat qui appellera l'appli B, pour avoir une fenêtre Dos dans laquelle writeln pourra pousser ses messages.

    Enfin c'est à tester.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #28
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... Le code de l'appli B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button8Click(Sender: TObject);
    begin
      writeln(timetostr(now));
    end;
    Si j'écris cela dans mon programme B, et que je le lance directement ou via un fichier .bat, ça plante avec une erreur "file not open".

    Citation Envoyé par Jipété Voir le message
    ... Mais il ne faut pas que l'appli A appelle l'appli B, je pense. Il faut que l'appli A appelle un .bat qui appellera l'appli B, pour avoir une fenêtre Dos dans laquelle writeln pourra pousser ses messages. ...
    En fait, cela revient à transformer mon application B en application console, ce que je voudrais éviter.

    Pour l'instant, j'ai une solution un peu lourding : B écrit dans un fichier et A vient lire ce fichier.

    Cordialement.

    Pierre

  9. #29
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Si j'écris cela dans mon programme B, et que je le lance directement ou via un fichier .bat, ça plante avec une erreur "file not open".
    Il doit y avoir une blagounette ailleurs...
    On parle bien d'une appli graphique en ce qui concerne le programme B, d'accord ?
    Quand j'appelle le solitaire de Windows dans une boîte Dos en tapant "sol<ENTREE>" ça m'affiche le solitaire. Ici c'est pareil, et ça doit fonctionner !

    Citation Envoyé par ChPr Voir le message
    En fait, cela revient à transformer mon application B en application console, ce que je voudrais éviter.
    Sur la copie d'écran que j'ai fournie, on voit bien le Button8 et le bas de la fiche (posée sur la fenêtre du terminal) donc non, il ne s'agit pas d'une appli console.

    Mais cette appli graphique doit être appelée depuis une console pour qu'elle puisse y balancer ses messages (writeln).

    Et c'est dans cette console que l'appli A (qui l'a lancée) ira récupérer les données qui y "tombent".
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #30
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    Oui, j'ai deux applications graphiques. La première A qui tourne en permanence et intercepte des messages claviers. Lorsque j'appuie (par exemple) sur la touche F2, cela lance une deuxième application graphique B. C'est une petite fenêtre dans laquelle je rentre des valeurs numériques que je voudrais voir transmises dans l'application A lorsque je ferme B.



    J'imagine que c'est ce qui est utilisé dans une application console. et c'est pourquoi j'ai utilisé cette instruction dans mon application B.

    J'ai essayé Writeln(stdout, val), mais je ne reçois rien dans A. Par contre, (sous Windows), lorsque je ferme l'application B, une petite fenêtre s'ouvre avec pour titre "error", un bouton "OK" et la valeur "val" affichée.

    Donc, ma question est que dois faire pour transmettre une valeur de l'application B vers l'application A.

    Cordialement.

    Pierre
    Bonjour

    Pourquoi ne pas utiliser les messages comme tu l'a suggéré ici afin de récupérer tes valeurs ?
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  11. #31
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... Pourquoi ne pas utiliser les messages comme tu l'a suggéré ici afin de récupérer tes valeurs ?
    J'ai téléchargé cet exemple et l'ai mis en œuvre.

    Côté client : pas de problème
    Côté Server : avec la version lazarus que j'ai (1.2.4), le composant TIPCSimple Server ne possède pas toutes les propriétés citées dans l'exemple. J'ai supprimé celles n'existant pas dans ma version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ThreadTimeOut = 50
        OnMessageQueued = SimpleIPCServer1MessageQueued
        MaxQueue = 10
        MaxAction = ipcmoaNone
    J'ai remplacé OnMessageQueued = SimpleIPCServer1MessageQueued par OnMessage = SimpleIPCServer1Message et j'ai enfin pu compiler. Mais à l'exécution, mon serveur ne reçoit rien du client.

    Cordialement.

    Pierre

  12. #32
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Bon, j'ai gratté un peu et je suis arrivé à faire fonctionner le serveur en remplaçant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.SimpleIPCServer1Message(Sender: TObject);
    begin
       if SimpleIPCServer1.PeekMessage(100, True) then
        StaticText1.Caption:= SimpleIPCServer1.StringMessage;
    end;
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.SimpleIPCServer1Message(Sender: TObject);
    begin
      StaticText1.Caption:= SimpleIPCServer1.StringMessage;
    end;
    car SimpleIPCServer1.PeekMessage(100, True) n'est jamais à vrai, quel que soit le timeout que je mets 0, 100, 10000.

    Que fait donc ce PeekMessage ?

    Cordialement.

    Pierre

Discussions similaires

  1. récupérer des infos sur une application en cours d'exécution
    Par r0d dans le forum Administration système
    Réponses: 5
    Dernier message: 31/01/2008, 15h59
  2. Réponses: 3
    Dernier message: 23/05/2007, 23h52
  3. Récupérer les infos d'une colonne de type DataSet
    Par Zugg dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/02/2006, 14h46
  4. [C#] - Récupérer les paramètres passés à une application
    Par linuxludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/11/2005, 14h41
  5. Les caractères dans une application console
    Par maximedrouet dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2005, 16h44

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