Class Helper, oui, c'est ce que j'entendais pas ToolHelp, d'étendre TApplication sans l'hériter ..., tu noteras rvzip64 que ZZZzzz2 n'est jamais revenu nous voir !
Donc pour les Class Helper, il faut un Delphi récent, moi avec mon Delphi 7, ça n'existe pas !
Mais quelle bonne idée ! je l'avais oublié celui-là !
Bon, j'ai essayé plusieurs combinaisons (en nettoyant les DCU ou construction complète), ils semblent que le reste tout dépendant de l'age du capitaine, ce qui est bien, c'est qu'au moins maintenant je n'ai plus que la théorie, je n'ai plus plus l'autre cas génant ... c'est au moins ça de gagner, même si ne plus être capable de reproduire une anomalie est fort génant ...
EDIT : J'ai le phénomène, lorsque je modifie une unité, et que je compile simplement, cela conserve les links entre les DCU mais modifie les liens (donc surement la séquence des uses\initialization) avec cette unité fraichement modifiée ... ouf, cela ne peux pas se produire en PROD puisque l'on force une construction complète avec FinalBuilder ... interessant tout de même !
ChoseClasses fait référence à ChoseTypes, une function retourne une valeur énuméré déclaré des ChoseTypes, l'appel est fait dans MachinClasses
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| unit MachinClasses;
interface
uses ChoseTypes;
TMachin = class(TShaiDBPersistant)
private
function RemoteIdentification(out RemoteMachin: TMachin): Boolean;
public
property State: TChoseEnum;
end;
implementation
uses
ChoseClasses;
{* -----------------------------------------------------------------------------
La fonction RemoteIdentification recherche ...
@param RemoteMachin Paramètre de Sortie,...
@return Indique si machin a été Trouvé ...
------------------------------------------------------------------------------ }
function TMachin.RemoteIdentification(out RemoteMachin: TMachin): Boolean;
var
FoundList: TObjectList;
begin
Result := False;
FoundList := TObjectList.Create();
try
with TChoseManager.GetClass() do // fourni un TChose selon la config (TChoseHeriteA, TChoseHeriteB, ...)
try
case RemoteIdentification(Self, FoundList) of // TChose à une méthode abstraite RemoteIdentification
irStrict :
begin
Result := True;
RemoteMachin := FoundList[0] as TMachin;
FoundList.Extract(RemoteMachin);
end;
irFuzzy :
begin
Result := Select(Self, FoundList, RemoteMachin);
end;
irError, irIncoherent : Result := False;
end;
except
on E: EMachinError do
begin
Result := False;
WriteDBLog(Format('Remote Identification : %s. [%s]', [E.Message, Name]), [wDBlError]);
end;
else
raise;
end;
finally
FoundList.Free();
end;
end; |
1 2 3 4 5 6 7 8 9 10 11 12
| unit ChoseClasses;
interface
uses ChoseTypes, MachinClasses
type
TChose = class(TObject)
public
class function RemoteIdentification(Machin: TMachin; FoundList: TObjectList): TChoseEnum; virtual; abstract;
class function Select(Machin: TMachin; FoundList: TObjectList; out SelectedMachin: TMachin): Boolean;
end; |
1 2 3 4 5 6 7 8 9 10 11
| unit ChoseTypes;
interface
type
TChoseEnum = (irStrict, irFuzzy, irError, irIncoherent);
implementation
end. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| unit ChoseHeriteA;
interface
uses ChoseTypes, ChoseClasses, MachinClasses;
type
TChoseHeriteA = class(TChose)
public
class function RemoteIdentification(Machin: TMachin; FoundList: TObjectList): TChoseEnum; override;
end;
implementation
{* ----------------------------------------------------------------------------}
class function TChoseHeriteA.RemoteIdentification(Machin: TMachin; FoundList: TObjectList): TChoseEnum;
begin
bla bla bla
end; |
Partager