Migracja kodu do Delphi Tokyo – potrzebne makro, alias, #define

0

Migruję teraz duży program z Delphi 6 do Tokyo., co gorsza obie wersje trzeba będzie utrzymywać równolegle jakiś czas
W kodzie jest mnóstwo mechanicznych zmian np kilkadziesiąt razy:

  • uses Placemnt na uses rxPlacemnt
  • DecimalSeparator na FormatSettings.DecimalSeparator

itp. Czy macie pomysł jak to zautomatyzować w kodzie. Potrzebuję coś w rodzaju znanego z C

#define DecimalSeparator FormatSettings.DecimalSeparator

każdy inny pomysł usprawniający też będzie mile widziany

1

Masz dyrektywy kompilatora z uses możesz zrobić tak

uses {$IF CompilerVersion >= 32} .... {$ELSE} .... {$IFEND};

ale co do takich spraw jak DecimalSeparator do nie przychodzi mi do głowy nic lepszego jak dodawać warunkowo moduł do uses z globalnymi procedurami typu jak poniżej albo same procedury kjeżeli często to stosujesz jak rzadziej to normalnie w kodzie warunek dyrektywami i po krzyku.

{$IF CompilerVersion >= 32}   //min Delphi Tokyo
function  DecimalSeparator: Char;
begin
  result:= FormatSettings.DecimalSeparator;
end;
{$IFEND}
0

Masz dyrektywy kompilatora z uses możesz zrobić tak

uses {$IF CompilerVersion >= 32} .... {$ELSE} .... {$IFEND};

Chyba lepszego wyjścia nie ma, ale to i tak nie działa do końca. To są unity od komponentów, więc kompilator D6 stara się być mądrzejszy, i sam mi wstawia ich definicje po obu stronach $ELSE. Np ja wpisuję:

{$IF CompilerVersion >= 32} rxMRUList, rxPlacemnt {$ELSE} Placemnt,MRUList {$IFEND};

a on mi zmienia na

{$IF CompilerVersion >= 32}rxMRUList, rxPlacemnt, Placemnt, MRUList{$ELSE} Placemnt,MRUList{$IFEND};

Jak to przeniosę do Tokyo, i tak będę musiał ręcznie usuwać zbędne definicje.
Chyba stworzę puste unity o tych nazwach.
A może macie jakiś bardziej eleganckie rozwiązanie?

1

Oj tam ile budujesz interfejs poukładasz komponenty przestawisz uses po swojemu i powinno grać (w sensie powinien dać sobie z tym spokój do czasu aż znowu coś wstawisz).
Inną opcją jeżeli chodzi o uses jest to że w nowych wersjach Delphi istnieją aliansy modułów, które można zdefiniować w opcjach projektu na zasadzie staranazwa=nowanazwa więc z tym nie powinno być problemu przy migracji.
Jak przeniesiesz do Tokyo to nic nie będziesz musiał usuwać, bo kompilator nie będzie brał tych niepotrzebnych pod uwagę... no chyba że chodzi o zaoszczędzenie miejsca na dysku i skrócenie kodu modułów o te kilkanaście linijek (bo ile tego może być w jednym unicie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1