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 :

[D7] Perte valeur sur deux Edits/UPDowns


Sujet :

Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut [D7] Perte valeur sur deux Edits/UPDowns
    Bonjour

    Je me trouve devant un comportement absolument illogique, avec pourtant du code à raz des pacquerettes

    Plantage du décor :

    A l'occasion de ce test, cette maquette est composée simplement de :

    • 1 PageControl comportant 2 pages
    • dans la première page existe deux entrées de données (dans les Edits)
    • dans le seconde page existe 2 Edits de contrôle et 2 Buttons de tests


    Tout ça pour illustrer et surtout reproduire un comportement illogique

    Voici la manip en deux clics à effectuer :

    • Nous arrivons sur le second onglet (point très important ! )
    • clic sur le bouton "Injection" (Simple affectation de données dans les 2 Edits du premier onglet)
    • clic sur le premier onglet et ! ! ! perte de la valeur des deux Edits !


    (Par contre si l'appli arrive sur le premier onglet = RAS)

    Oui je pourrais ruser pour arriver à mes fins, mais je préfère en connaitre la cause et assouvirait ma frustration.

    Une variante de la manip :

    • si l'on réinjecte après le RAZ dito = tout redevient logique et la mémoire est OK.


    Sur mon projet, cette "injection" s'effectue via un INI et dans un premier temps je le soupçonnais très fort.

    Merci de vos idées, car j'en suis déjà à trois mulots dévorés


    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
     
    procedure TForm1.btnInjectClick(Sender: TObject);
    begin
      edtNumDevis.Text   := '450';
      edtNumFacture.Text := '16';
     
      ShowMessage('Affectation n° Devis : '   +edtNumDevis.Text+  sLineBreak+
                  'Affectation n° Facture : ' +edtNumFacture.Text);
    end;
     
     
    procedure TForm1.btnVerifClick(Sender: TObject);
    begin
      UN.Text   := 'N° Devis : '  + edtNumDevis.Text;
      DEUX.Text := 'N° Facture : '+ edtNumFacture.Text;
    end;
    Ci-joint le code de la démo en question (sans exe).

    ProjetDemo.zip

    DS7

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Je mémoriserais les données de l'onglet Source dans des variables lors d'un OnChanging avant que l'onglet Source soit masquer au profit de l'onglet Destination

    Je me demande l'impact sur les handles des contrôles qui n'ont jamais été visible.
    Essaye de capturer les CM_RECREATEWND et le ControlState csCreating et csRecreating qui soit bien créé avant d'assigner
    Je pense par exemple au TWebBrowser, tant que tu le l'affiche pas un première fois, le navigate ne crée pas le DOM contenu les objets HTML
    Certes c'est un composant assez lourd mais les controles TEdit clea reste des composants Windows, c'est juste une enveloppe Delphi, le text n'est pas stocké par Delphi mais par Windows et récupérer par GetTextBuf


    Je crois que spontanément, je n'utilise jamais les contrôles d'un onglet masqué lorsque j'ai un autre onglet visible, j'ai toujours tendance à préférer des objets business qui fait le lien, gros avantage leur jour où la fenêtre devient trop lourde et que l'on se dit que déplacer le contenu dans des TForm ancrées, l'objet business simplifie le découplage ... à terme cela permet de passer à un TTabControl qui ne contient que l'onglet actif donc plus léger et la transition des données entre les onglets est assuré par l'objet business.
    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

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    alors, ce comportement étrange n'est pas lié aux TEdit, mais aux TUpDown; dans TCustomUpDown.CreateWnd (qui se déclenche uniquement quand on clique sur l'Onglet 1) on a un SendMessage(Handle, UDM_SETPOS32, 0, FPosition); qui va remplacer les valeurs des TEdit par 1

    donc tu peux faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.btnInjectClick(Sender: TObject);
    begin
    //  edtNumDevis.Text   := '450';
    //  edtNumFacture.Text := '16';
      UpDownDevis.Position := 450;
      UpDownFacture.Position := 16;
    mais le ShowMessage donnera toujours les anciennes valeurs, car les Positions ne seront injectées que lorsque l'onglet 1 sera activé et ses enfants rendus visibles créeront leur Handle...donc si tu veux une cohérence entre les deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.btnInjectClick(Sender: TObject);
    begin
      edtNumDevis.Text   := '450';
      edtNumFacture.Text := '16';
      UpDownDevis.Position := 450;
      UpDownFacture.Position := 16;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Ouffffffffffff

    Merci les copains, vous avez épargné le dernier mulot qui en tremblait de peur

    ShaiLeTroll, tu sais je suis loin de ton niveau en ce langage et n'oublie pas qu'il faut savoir s'adapter au niveau du demandeur.

    Autant expliquer à un débutant pilote de Cessna 152, en plafond, comment se débrouiller face à la panne de son unique moteur

    Paul, oui je pense souvent à toi via ton gros bouquin culte avec Oliver.

    Hé oui j'avais fini de constater que les TUpDown en étaient la cause, lorsqu'en maquette de démo j'avais oublié l'associate !

    Bref, un simple échange d'affectation (non String) via ces TupDown et l'affaire est enfin résolue

    Merci à vous

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

Discussions similaires

  1. Formules indirect et petite valeur sur deux feuilles
    Par Kestion100 dans le forum Excel
    Réponses: 3
    Dernier message: 03/02/2016, 11h48
  2. Occurence d'une valeur sur deux champs de la même table
    Par arihane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/02/2015, 20h30
  3. [XL-2010] recopie valeur sur deux feuilles differentes
    Par silverjet59 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/12/2013, 14h29
  4. Graphique SAS : afficher une valeur sur deux
    Par subarud dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 21/04/2009, 16h15
  5. récupération d'une valeur sur deux octets
    Par sanatou dans le forum C++
    Réponses: 6
    Dernier message: 09/01/2007, 16h35

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