Sign in Join

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

Catalog · How the catalog works

Random project

MudaDFM

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

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

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