cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 2018
-
21 août 2007 à 10:57
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 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!
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 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 !
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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!