bonjour j'ai un souci dont je n'arrive pas a me defaire. J'ai créé une proocédure pour enlever tous les doublons d'un tableau :

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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
procedure TArray.Unique();
var
  TempTab : Array of Variant;
  TempCurrentPos : integer;
  Pos, Count : integer;
  Ajout : Boolean;
begin
  if(CurrentLength>1) then
  begin
    SetLength(TempTab, CurrentLength);
    TempCurrentPos := 0;
    for Pos := 0 to CurrentLength - 1 do
    begin
      Ajout := true;
      for Count := 0 to TempCurrentPos - 1 do
      begin
        ShowMessage(ShowBasicVariantType(TempTab[Count]) + ' - ' + ShowBasicVariantType(Tableau[Pos]));
        if TempTab[Count] = Tableau[Pos] then Ajout := false;
      end;
      if (Ajout) then
      begin
        TempTab[TempCurrentPos] := Tableau[Pos];
        inc(TempCurrentPos);
      end;
    end;
    DelAllElement();
    for Count := 0 to TempCurrentPos - 1 do
      AddElement(TempTab[Count]);
  end ;
end;
mais je me retrouve avec une erreur d'exception me disant violation d'acces.
les deux elements de comparaison son tous deux de type varDispatch.

Une petite idée ?

CurrentLength est la longueur du tableau fournie lors de l'instanciation de mon composant TArray.
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
17
18
19
20
21
 
TArray = class(TObject)
    constructor Create;
    procedure   SetIncrement(Increment : Integer);
    function    AddElement(Element : Variant) : Boolean; overload;
    function    AddElement(Element : Variant; Index : Integer) : Boolean; overload;
    function    DelElement(Index : Integer) : Boolean;
    function    DelAllElement() : Boolean;
    function    GetElement(Index : Integer) : Variant;
    function    Length() : Integer;
    procedure   Unique();
    function   ShowBasicVariantType(varVar: Variant) : string;
  private
    Tableau : Array of Variant;
    CurrentLength : Integer;
    MaxLength : Integer;
    CurrentIncrement : Integer;
 
  public
 
  end;
donc si vous avez une idée...

ca plante sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if TempTab[Count] = Tableau[Pos] then Ajout := false;