haldrix
Messages postés4Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention 3 avril 2006
-
3 avril 2006 à 12:03
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
3 avril 2006 à 20:04
Bonjour,
j'ai un probleme en developpant une fonction de tri d'un TObjectList
C'est une liste de facture (TListFacture), chaque facture ayant des elements dont un IdBase (identifiant dans la base, integer).
Je desire appeler
MaListeDeFacture.TrieParID; Mon code est le suivant:
function TListFacture.CompareId(Item1, Item2: Tfacture): Integer;
begin
if (Item1 <> nil) AND (Item2 <> nil) then
result := CompareValue(Item1.IDBase, Item2.IDBase );
end;
Procedure TListFacture.TrieParID;
begin
if (self.count > 1) then
self.FListFacture.Sort(@TListFacture.CompareId);
end;
Quand je click sur mon bouton j'appel la procedure TriParId .
Mais mon probleme c'est que quand je test j'ai Item2 = 'Valeur inaccessible' (en pas-a-pas), Item1 etant bien au premier element de ma liste, mais il lance quand meme le CompareValue(), et la ca plante.
Pourquoi?
Et qu'est ce que ca veut dire si c'est innaccessible mais non nil?
Merci d'avance.
michel
haldrix
Messages postés4Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention 3 avril 2006 3 avril 2006 à 12:13
J'ai aussi essayé:
function TListFacture.CompareId(Item1, Item2: Pointer): Integer;
begin
if ((Item1 <> nil) AND (Item2 <> nil) ) then
result := CompareValue(Tfacture(Item1).IDBase, Tfacture(Item2).IDBase );
end;
Dans ce cas, en mode pas-a-pas, j'ai 'Item2=$1' et ca plante toujours (evidemment).
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 3 avril 2006 à 20:04
Tout d'abord, la méthode Sort attend une fonction en argument, pas une méthode :
procedure Sort(Compare: TListSortCompare);
Et TListSortCompare est défini ainsi :
TListSortCompare = function (Item1, Item2: Pointer): Integer;
La solution se résume donc à ceci :
function CompareId(Item1, Item2: Pointer): Integer;
begin
if Assigned(Item1) and Assigned(Item2) then
begin
if TFacture(Item1).IdBase < TFacture(Item2).IdBase then
Result : = -1
else
if TFacture(Item1).IdBase > TFacture(Item2).IdBase then
Result := 1
else
Result := 0;
end
else
Raise Exception.Create('Ni Item1 ni Item2 ne peuvent être nuls');
end;
procedure TListFacture.TrieParId;
begin
Sort(@CompareId);
end;
May Delphi be with you !
<HR color =#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.