Champs de variable record non visibles

Résolu
Signaler
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
Bonjour,



Après un an d'absence, j'ai besoin de m'y remettre car je butte sur quelque chose de simple apparemment:
J'ai défini une structure de données : 
   TParam = RECORD
        NomFicTravail: array[0..30] of char;
        NStructureDon: array[0..20] of char;
        NFDonSource,
        NFDonTables  : array[0..30] of char;
        NomTabSec,
        NomTabQualif,
        NomTabHie    : array[0..20] of char;
        NomChamp     : array[0..k_NMaxChamps] of string[k_LmaxLibelle];
        NomColChamp  : array[0..k_NMaxChamps] of string[2];
        NomLigneDeb  : array[0..2] of char; 
    end;
Et une variable: aBufP : TParam; déclaré dans la fiche principale.
Problème 1:
Dans l'Editeur de delphi 7, après avoir tapé aBufP. la liste des variables apparaît sauf  les deux champs ci-dessus en rouge.
Problème 2:
Ma procédure d'affichage des valeurs dans une série de MaskEdit s'effectue correctement pour la variable NomChamp et met des caractères aléatoires pour la variable NomColChamp.

procedure TFicheParam1.CHARGE_VALEURS_CHAMPS(aBufP : TParam; Sender : TObject);
  Var i : byte
begin
  for i : = 1 to k_NMaxChamps do
  begin
    if Assigned(FindComponent('MaskEdit' + IntToStr(i))) then
    TMaskEdit(FindComponent('MaskEdit' + IntToStr(i))).Text := aBufP.NomChamp[i-1];
    if Assigned(FindComponent('MaskEdit' + IntToStr(i+k_NMaxChamps))) then
    TMaskEdit(FindComponent('MaskEdit' + IntToStr(i+k_NMaxChamps))).Text := aBufP. .NomColChamp[i+k_NMaxChamps-1];
  end;
end;
 
j'ai vérifié, il n'y a pas d'erreur sur les indices.Le chargement du buffer est fait dans la fiche principale tandis que la procédure qui lit les valeurs est dans une autre fiche. No comprendo!
 
Merci à ceux qui ont une idée!

Jean_jean

3 réponses

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Salut !

Pourquoi mettre  "[i+k_NMaxChamps-1];"??? Tu vas chercher en dehors du tableau (pour i :=1 , i+k_NMaxChamps-1 = k_NMaxChamps, ce qui est déjà dehors....)

Ce ne serait pas plutôt quelque chose du genre: aBufP.NomColChamp[i - 1], comme pour l'autre variable ?

Dans tous les cas, tu devrais activer la gestion des limites et des débordements dans Projet > Options > Compilateur (coche aussi tout ce qu'il y a dans Optimisation et Debugging). Au moins, tu seras averti des erreurs d'indices sur les chaînes et tableaux (ça évite le EAccesViolation dont on ne trouve jamais l'origine).

Pour ton premier problème (qui n'en est pas un en fait): c'est une des limitations de Delphi, tu ne peux rien y faire.
Tout comme dans Delphi 6, il était impossible d'avoir de l'auto-complétition (ça se dit ?) de code dans la méthode Format().
Dans D7, tu ne peux pas avoir tes champs dans la liste car ce sont des tableaux dans un record. Mais ils sont correctement acceptés lors de la compilation, heureusement !

++
Flo

Ressources Delphi, sources, tutoriaux, actu, ...: [www.mx-dev.net www.mx-dev.net]http://tempuri.org/temp%3C/body
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
15
Salut,

Tu auras peut être un peu plus de succès en nous montrant le code de remplissage de NomColChamp
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
Merci bien à vous!

Florenth, content de te revoir.
C'est évident que je sors de la table! Bon sang, à force d'avoir le nez dans le code, on ne voit plus.
j'ai besoin de vacances.
Bien à vous!