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

Langage Delphi Discussion :

SendMessage avec un float comme lParam


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut SendMessage avec un float comme lParam
    Bonjour à tous

    Je cherche à faire un SendMessage avec 2 paramètres en wParam et lParam : un float, et un int.

    Le problème étant que wParam et lParam sont tous les deux des int, je ne trouve pas de solution à mon problème ...

    Si quelqu'un a une idée, je suis preneur

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Et si tu envoyais l'adresse de ce float au lieu de sa valeur ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut
    au début je n'y avais pas pensé, et le temps d'écrire ce message, j'y ai pensé ... du coup c'est ce que j'ai fait pour l'instant.

    mais ça ne m'arrange pas trop, parceque ce sendmessage est dans une boucle, et pour être sur de ne pas perdre la valeur entre l'envoi et la réception, je dois stocker ce float du lParam dans un array temporaire ...

    pour l'instant ça passe, mais si quelqu'un a mieux, je prend

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut
    par contre mon code n'a pas l'air de fonctionner ... il me semblait que je faisais ça (longtemps que j'ai plus fait de Delphi ^^) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // envoi
    PostMessage (FindWindow (nil, 'XXX'), PM_NEW_VALUE, i, Integer (@Values[i]));
     
    // réception
    String (Pointer (TMessage (Msg).LParam))
    quand je lis Msg.WParam (à savoir i dans l'envoi donc), aucun problème. quand je veux lire la valeur du pointer donné dans LParam, j'ai un accès violation

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Passé un pointeur, cela nécessiterait pas que l'application qui reçoit le message puisse lire dans l'espace mémoire de l'application qui émet ?

    Utilise WM_COPYDATA si tu veux sur : Envoyer une chaine a une application externe

    Après tout WM_SETTEXT fonctionne bien entre une application Delphi et Notepad
    Est-ce valable pour tout les messages ou Windows dans sa tambouille copie la chaine du processus émetteur dans l'espace du processus recepteur ?

    Une QR était en cours à ce sujet en 2008, je ne crois pas qu'elle a été publié

    Attention !

    PostMessage, effectivement, comme il n'attend pas la traitement, il ne faut pas libérer ou modifier le contenu du pointeur float
    Vérifie via IsBadReadPtr si tu as le droit de lire le pointeur (ce qui m'étonnerait en fait)
    Déjà qu'entre DLL et EXE c'est la plaie les string alors entre EXE ???

    Même par ta gestion de tableau tampon, tu conserves toutes les données, combien de temps après la fin du traitement (après tout tu n'as pas la garantie que le recepteur aie lu rapidement tes données)

    SendMessage, il a attend patiemment le traitement donc pas de soucis de libération prématurée, mais encore une fois, je suis persuadé qu'en fonction du message windows triche avec la mémoire inter-processus !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert confirmé

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Par défaut
    Est-ce qu'un Single te suffirait ? Il tient sur 32Bits et tu pourras le passer dans un Integer juste avec un transtypage (pas un round ni trunc bien sûr).
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    WM_COPYDATA c'est pour des données inter process.

    si c'est à l'intérieur d'un même process il suffit d'allouer d'un côté et de libérer de l'autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    var
      p: PDouble;
    begin
      New(P);
      P^ := Value;
      PostMessage(Handle, PM_NEW_VALUE, i, Integer(P));
    end;
     
    procedure TForm1.PMNewValue(var Msg: TMessage);
    var
      P: PDouble;
    begin
      P := Pointer(Msg.lParam);
      try
        ...
      finally
        Dispose(P);
      end;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Tout a fait Paul, en fait, en relisant la question, je me suis rendu compte qu'il n'y avait pas mention à de l'inter-process, j'ai tout de même laissé ma réponse intact

    Un SendMessage au sein du même process, ne pose aucun problème sur les Pointeurs c'est pour cela que j'ai pensé qu'il avait à de l'inter-process
    Pour PostMessage, il faut l'utiliser uniquement si la durée de vie de la mémoire associé au pointeur est suffisament longue ou permanente pour ce permet un pseudo-asynchronisme !

    SendMessage à l'intérieur d'un programme Delphi, je ne comprends pas trop !
    Je triche avec parfois avec PostMessage pour différer des traitements et donner une illusion d'Asynchrone d'une Fenêtre, certains utilisent par exemple un Timer qui ne s'active qu'une fois ou alors le OnActivate

    En interne dans un programme cela pourrait être fait par du CallBack comme un Evènement ou encore un TEvent + FIFO TThreadList
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 138
    Par défaut
    Citation Envoyé par Nono40 Voir le message
    Est-ce qu'un Single te suffirait ? Il tient sur 32Bits et tu pourras le passer dans un Integer juste avec un transtypage (pas un round ni trunc bien sûr).
    oui ça me suffirait, mais je ne vois pas comment envoyer ce Single avec SendMessage (c'est ma toute 1ère question en fait )

Discussions similaires

  1. [debutant]fonction "split" avec une chaine comme m
    Par EpOnYmE187 dans le forum Débuter
    Réponses: 2
    Dernier message: 07/11/2005, 22h46
  2. [XHTML] problème avec les float:left
    Par glloq8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/11/2005, 17h15
  3. erreur avec les floats
    Par Halobox dans le forum C
    Réponses: 14
    Dernier message: 11/10/2005, 23h23
  4. Probleme <div> et float -> comme un tableau!
    Par elraton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/08/2005, 19h49
  5. Réponses: 9
    Dernier message: 13/04/2005, 22h08

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