Tableau dynamique, portee des variables [Résolu]

Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Dernière intervention
2 octobre 2014
- 26 juil. 2010 à 15:14 - Dernière réponse :
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Dernière intervention
2 octobre 2014
- 26 juil. 2010 à 17:54
Dans une unite j'avais une procedure avec un tableau dynamique en paramêtre (passage du pointeur du tableau sans le out, puisque les tab dyna sont des pointeurs)
Cela fonctionne trés bien.
--------------------------------------------
implementation
{$R *.dfm}

type
Block = record // Type Block
VDebut : integer;
Vfin : integer;
end;

TBlockArray = Array of Block; // Type Tableau dynamique de Block

var
TabBlock : TBlockArray; // Tab dynamique de block

procedure InsertBlock(ValDebut, ValFin : integer; Tableau_Des_Block : TBlockArray);
begin
// Ajout du nouveau Block en fin de tableau
SetLength(Tableau_Des_Block,Length(Tableau_Des_Block) + 1);
Tableau_Des_Block[ High(Tableau_Des_Block) ].VDebut := ValDebut;
Tableau_Des_Block[ High(Tableau_Des_Block) ].Vfin := ValFin;
.../...
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Init des blocs

InsertBlock(45,100, TabBlock);
InsertBlock(40,140,TabBlock);
.../...
end;
end.
---------------------------------------------------


J'ai voulu déplacer toutes la gestion des block dans une unité planning (voir ci-dessous)
J'ai donc ajouter planning dans les uses de l'unit1, mais le passage du tableau ne fonctionne plus.
J'ai donc dans un deuxieme temps modifier la declaration de la fonction pour forcer le passage du pointeur sur le tableau
comme ceci : procedure InsertBlock(ValDebut, ValFin : integer; OUT Tableau_Des_Block : TBlockArray);
Mais là c'est seulement le dernier appel à InsertBlock qui est pris en compte ! Problème de portée des variables sans doute, mais je ne comprend pas.
Merci de votre aide.

unit Planning;

interface

type
Block = record
VDebut : integer;
Vfin : integer;
end;

TBlockArray = Array of Block; // Type Tableu dynamique de Block

procedure InsertBlock(ValDebut, ValFin : integer; Tableau_Des_Block : TBlockArray);

implementation

procedure InsertBlock(ValDebut, ValFin : integer; Tableau_Des_Block : TBlockArray);
begin
// Ajout du nouveau Block en fin de tableau
SetLength(Tableau_Des_Block,Length(Tableau_Des_Block) + 1);
Tableau_Des_Block[ High(Tableau_Des_Block) ].VDebut := ValDebut;
Tableau_Des_Block[ High(Tableau_Des_Block) ].Vfin := ValFin;
.../...
end;
end.

-----------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Math, Planning;

type
.../...

implementation
{$R *.dfm}

type
TabBlock : TBlockArray; // Tab dynamique de block

procedure TForm1.FormCreate(Sender: TObject);
begin
//Init des blocs

InsertBlock(45,100, TabBlock);
InsertBlock(40,140,TabBlock);
.../...
end;
end.
--------------------------------
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Dernière intervention
2 octobre 2014
- 26 juil. 2010 à 17:54
3
Merci
Oups ! C'est pas out, mais var pour le passage par adresse.
Besoin de vacances moi.

Merci jderf 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de jderf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.