Champs de variable record non visibles

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 21 août 2007 à 10:57
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 21 août 2007 à 14:06
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

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
21 août 2007 à 13:20
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
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 août 2007 à 12:14
Salut,

Tu auras peut être un peu plus de succès en nous montrant le code de remplissage de NomColChamp
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
21 août 2007 à 14:06
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!
 
0
Rejoignez-nous