Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works
Anything · Lazarus or Delphi
Random projectRandom project

MudaDFM

Ferramenta para apoio nas mudanças de classes e conversões de componentes Delphi

View on GitHub

Member rating

No ratings yet.

Sign in to rate this project.

README

MudaDFM

Ferramenta para apoio nas mudanças de classes e conversões de componentes Delphi

Olá pessoal.

Se você chegou até este repositório, provavelmente participou da #Embarcadero Conference 2019 e assistiu a nossa palestra sobre como a Mega modernizou a UI e UX do seu ERP. Você tem o nosso agradecimento por isso.

Caso não tenha participado da conferência, não tem problema. Nosso pensamento é de que as comunidades de programadores no Brasil precisam apoiar umas as outras para que todos ganhem em aprendizagem, conhecimentos, experiências e amizade.

Abaixo, segue uma lista de dicas que podem te auxiliar na migração do Delphi e esperamos que essas dicas sejam muito úteis pra vocês.

Quanto a ferramenta "MudaDFM", a mesma está comitada numa versão mais light sem muitas das implementações feitas para a Mega, mas mantendo os conteúdos e rotinas das principais funcionalidades que nos auxiliaram nas migrações e inovações do nosso ERP.

Um "Passo a Passo" da ferramenta pode ser encontrado em https://github.com/megasistemas/MudaDFM/wiki/Passo-a-Passo

Agradecemos muito o apoio de vocês.

Um grande abraço!!!

================================================================================

LINKS ÚTEIS

pascal
- What's New in Delphi and C++Builder XE7
    http://docwiki.embarcadero.com/RADStudio/XE7/en/What's_New_in_Delphi_and_C%2B%2BBuilder_XE7
- Pesquisa atualiza????o de componentes de terceiros
    http://tp.embarcadero.com/partnercentral.exe/default
- Informa????es sobre migra????o Unicode
    http://www.embarcadero.com/es/rad-in-action/migration-upgrade-center
- Ferramenta de parse/estatistica Unicode (com fontes)
    http://cc.embarcadero.com/item/27398
- Unit Names - Alphabetical List with Unit Scopes
    http://docwiki.embarcadero.com/RADStudio/XE6/en/Unit_Names_Alphabetical_List_with_Unit_Scopes
- Conditional compilation (Delphi)
    http://docwiki.embarcadero.com/RADStudio/XE7/en/Conditional_compilation_(Delphi)
- Delphi Compiler Directives (List) Index
    http://docwiki.embarcadero.com/RADStudio/XE6/en/Delphi_Compiler_Directives_(List)_Index
- Global Variables
    http://docwiki.embarcadero.com/RADStudio/XE7/en/Global_Variables
- Data.DB.TFieldType
    http://docwiki.embarcadero.com/Libraries/XE7/en/Data.DB.TFieldType
- System.Utf8ToUnicode
    http://docwiki.embarcadero.com/Libraries/XE7/en/System.Utf8ToUnicode
- Add-ons Delphi XE7
    http://cc.embarcadero.com/myreg (É preciso logar a conta na Embarcadero)
- Express??o Regular no Delphi
    http://docwiki.embarcadero.com/Libraries/XE7/en/System.RegularExpressions
- OCI
    http://docwiki.embarcadero.com/RADStudio/XE6/en/Connect_to_Oracle_Server_(FireDAC)

COMPONENTES - VERIFICAR SE EXISTEM ATUALIZAÇÕES PARA A VERSÃO DO DELPHI

pascal
- DevExpress
- RemObjects
- Doa
- EurekaLog
  alterado TZipWriter para TZipFile (Verificar m??todos do componente)
  Ex:
    //vZip := TZIPWriter.Create(vNomeArquivoZip + '.rar', '');
    //vZip.AddFile(...)
    vZip := TZipFile.Create();
    vZip.Open( vNomeArquivoZip + '.rar', zmWrite);
    vZip.Add(...)
    vZip.Close;
- procedure DoGetTableName(DataSet: TDataSet; var TableName: widestring); override; -> procedure DoGetTableName(DataSet: TDataSet; var TableName: string); override;
- GREATIS - Customizador

CRIAR FERRAMENTA PARA TRATAR:

pascal
- Uses
  ver (http://docwiki.embarcadero.com/RADStudio/XE6/en/Unit_Names_Alphabetical_List_with_Unit_Scopes)
- Tipos
- Tipos nos Par??metros de fun????es

CUIDADO COM DIRETIVA DE VERSÃO:

pascal
Delphi XE7 => ver280
WIN32      => Problemas para plataforma 64

VERIFICAR COMPATIBILIDADE:

pascal
- NativeInt	    -> Integer/Longint;
pascal
- TMsgDlgBtn	-> Passa a ter 12 posi????es
pascal
- TFieldType    -> Passa a ter 52 posi????es
  ver (http://docwiki.embarcadero.com/Libraries/XE7/en/Data.DB.TFieldType)
pascal
- DateSeparator	-> FormatSettings.DateSeparator (possibilidade de usar include para redeclarar tipo)
  ver (http://docwiki.embarcadero.com/RADStudio/XE7/en/Global_Variables)
  SOLU????O
    - Criar unit para compatibiliza????o ao inv~es de inserir "FormatSettings" em todas as linhas
pascal
- TBitBtn -> n??o descende mais do TButton, agora ?? do TCustomButton
pascal
- AnsiPos       -> Pos
pascal
- psNoHandle, psHandleIC, psHandleDC
  Acrescentar TPrinterState para cada tipo -> TPrinterState.psNoHandle
  ver (http://docwiki.embarcadero.com/Libraries/XE7/en/Vcl.Printers.TPrinterState)
pascal
- StrPas	-> StrPas(@Buff); => StrPas(PWideChar(@Buff[1]));
pascal
- TBookmark     -> Alterado para TArray(System.Byte)
                   Adicionar @ antes do nome da vari??vel onde for utilizado como ponteiro
                   ou usar TypeCast:
                     SavePos := AnsiString(Bookmark);
                   ou para retornar ao bookmark:
                     Bookmark := BytesOf(SavePos);
pascal
- StrDispose    -> FreeMem
pascal
- StrAlloc      -> AnsiStrAlloc
pascal
- StrPos        -> AnsiStrPos
pascal
- #13/#0...     -> $13/$0 ou ORD(#13)
pascal
- Pos('literal',... -> definir o tipo do par??metro literal porque o Pos tem overload
                       Pos(WideString('literal'),...

CUIDADOS ESPECIAIS PARA:

pascal
- Pchar/PAnsiChar/PwideChar/PAnsiString:
pascal
- pchar
  -> PAnsiChar / PWideChar
pascal
- PAnsiChar
  - Muda para PChar (Se o tipo de par??metro/vari??vel for ponteiro de string)
  function MgMessageBox(const hWnd : HWND;
                              lpText : PChar; {PAnsiChar}
                              lpCation : PChar; {PAnsiChar}
                              uType : Cardinal) : Integer;
pascal
- PAnsiString
  -> pstring  / PAnsiString
  ou
  - NewStr: Retorno mudou de PString para PAnsiString
    1\.Criar uma vari??vel do tipo STRING que receber?? o conte??do da mesma vari??vel usada na fun????o NEWSTR
    2\.Comentar a linha da fun????o NEWSTR
    3\.Passar para a vari??vel que era usada na fun????o NEWSTR o conte??do da nova vari??vel string atrav??s do ponteiro da mesma: Pic := @PicMG;
pascal
- FormatSettings
pascal
- case s[i] of
  - LITERAL
      '=',#$80..#$FF  =>  '=',chr($80)..chr($FF)
pascal
- DBINAME;
    GetDriverTypeName(DriverTypeName)
    [dcc32 Error] Mxstore.pas(1752): E2010 Incompatible types: 'PWideChar' and 'DBINAME'
  Solu????o:
    GetDriverTypeName(@DriverTypeName)
pascal
- POINTER
  - NATIVEINT
      CheckKeyViol(DbiModifyRecord(Handle, ActiveBuffer, True))
      [dcc32 Error] Mxstore.pas(2063): E2010 Incompatible types: 'Pointer' and 'NativeInt'
    Solu????o:
      CheckKeyViol(DbiModifyRecord(Handle, PByte(ActiveBuffer), True))
pascal
- FUN????ES :
    (WinApi.pas)
      WideCharToMultiByte / MultibyteToWideChar
    (System.pas)
      UTF8ToUnicode
  Trocar par??metro PChar para PAnsiChar

REFATORAR:

pascal
- Rever Fun????es j?? disponiveis no Delphi:
pascal
- function ConvertToUTF8(const S: string): string;      -> AnsiToUtf8( s);
pascal
- Image - Aceita imagens do tipo PNG
    -> Removar units com tratamento espec??fico. Ex: PngImage