Mostrando postagens com marcador Delphi. Mostrar todas as postagens
Mostrando postagens com marcador Delphi. Mostrar todas as postagens

domingo, 16 de outubro de 2016

Delphi caro - preço do RAD Studio / Delphi 10 / 10.1 Seattle / Berlim

Gostaria de falar sobre o aumento nos preços das uma licenças do RAD Studio / Delphi em todas as versões.

Nos últimos anos, por muitas vezes, li na web e ouvi de amigos que o Delphi não vale mais a pena, que está sendo abandonado por muitos que migram para outras ferramentas e que há ótimas alternativas opensouces.

Confirmamos uma forte queda nos rankings de ferramentas mais usadas (veja abaixo ou em http://www.tiobe.com/tiobe-index:


Mesmo assim, acredito na ferramenta e estava na iminência de comprar uma licença do mesmo quando fui surpreendido pelo valor da licença da versão Enterprise que foi de R$ 5.172,41 para R$ 18.097,10. Enterprise é a versão (mínima para mim) pra se trabalhar com banco de dados, mas a situação é mais berrante ainda com a versão Architect (ideal para mim) que custava menos de 7 mil reais e aumentou para uma realidade remota de 29 mil reais.

Vejam dois orçamentos que pedi:

Delphi XE3

DELPHI 10.1 BERLIM

No novo formato ainda hã um pequeno detalhe que me dá medo em relação à atualização de 12 meses. O desenvolvimento para Android e IOS está em constante atualização, onde novos recursos surgem e outros se tornam obsoletos com alta frequência. Desta forma fica a pergunta: E após os 12 meses, vou tem que ficar comprando a atualização que também é um absurdo? Complicado.

Acredito que a Embarcadero do Brasil está no mundo da lua, pois não consideram que os desenvolvedores já desanimados com a ferramenta, que há uma forte crise, clientes que não investem nessa área e não estão dispostos a pagar por um sistema, nós desenvolvedores, principalmente os que trabalham por conta própria estão vendo seus clientes falirem e fechar o negócio, enquanto a venda de novos sistemas simplesmente parou,

Isso me fez tomar novos rumos e abrir meus olhos e ver que há ótimas alternativas de sair da zona de conforto. Ainda não decidi totalmente, mas estou indo no caminho de que R$ 29.000,00 dá pra se comprar um carro ou um terreno e que vale apena SIM economizar esse valor e ir pro opensource onde não há surpresas desse tipo.

No momento estou indo na seguinte trilha:

  • Windows/Linux: Java;
  • Android: Android Studio (excelente e sempre atualizado);
  • IOS: Swift (excelente e sempre atualizado);
  • Web: HTML5, CSS3, PHP e JavaScript;

quarta-feira, 8 de junho de 2016

Função para formatar números de telefone com ou sem DDD e com ou sem nono dígito

Função Delphi para formatar números de telefone com ou sem DDD e com ou sem nono dígito:

function FormataFone(sTelefone: String): String;
var
  s: string;
  tam: Integer;
begin
  s  := FilterChars(sTelefone, ['0'..'9']);

  // Retira zero inicial se houver
  if Copy(s,1,1) = '0' then
  begin
    s := Copy(s,2,Length(s)-1);
  end;

  case Length(s) of
    8: // 4455-6677
      begin
        Result:= Copy(s,1,4)+'-'+Copy(s,5,4);
      end;
    9: / / 9 8877-6655
      begin
        Result:= Copy(s,1,1) + ' ' + Copy(s,2,4)+'-'+Copy(s,6,4);
      end;
    10: // (85) 8877-6655
      begin
        Result:= '('+Copy(s,1,2)+') '+Copy(s,3,4)+'-'+Copy(s,7,4);
      end;
    11: // (85) 9 8877-6655
      begin
        Result:= '('+Copy(s,1,2)+') ' + Copy(s,3,1) + ' ' +Copy(s,4,4)+'-'+Copy(s,8,4);
      end;
    else
      Result:= s;
  end;

terça-feira, 26 de abril de 2016

FastReport - Imprimir ReportSummary no rodapé da página (bottom)

Para imprimir o ReportSummary basta usar o seguinte comando no evento OnBeforePrint:

procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent);
begin
  Engine.CurY := Engine.CurY + Engine.FreeSpace - ReportSummary1.Height - 1;  
end;

Resultado:



Esta dica serve para qualquer tipo de banda. A propriedade Engine.CurY na verdade é a altura que de deve ser utilizada para a impressão do próximo componente.

sexta-feira, 22 de abril de 2016

Delphi - Arredondamento de valores

Essa função de arredondamento de valor monetário tem opcão de arredondar para mais ou para menos:

function ArredDinheiro(Fracao: Double; Cima : Boolean): Double;
var
  Sinal : integer;
begin
  Fracao := Fracao * 100;
  // Sng
  if Frac(Fracao) < 0 then
    Sinal := -1
  else if Frac(Fracao) = 0 then
    Sinal := 0
  else
    Sinal := 1;
  if Cima then
  begin
    Result := (Int(Fracao) + (Sinal));
  end
  else
  begin
    Result := Int(Fracao);
  end;
  Result := result / 100;
end;

Outras funções de arredondamento que podem ser úteis:

function Sgn(X: Extended): Integer;
{ Retorna -1, 0 or 1 de acordo com o sinal do argumento }
begin
  if X < 0 then
    Result := -1
  else
    if X = 0 then
      Result := 0
    else
      Result := 1;
end;
function RoundUp(X: Extended): Extended;
{ Retorna o primeiro inteiro maior que ou igual a um
  dado número em valor absoluto (o sinal e preservado).
  RoundUp(3,3) = 4    RoundUp(-3,3) = -4 }
begin
  Result := Int(X) + Sgn(Frac(X));
end;
function RoundDn(X: Extended): Extended;
{ Retorna o primeiro inteiro menor que ou
  igual a um dado número em  valor absoluto (o sinal é preservado).
  RoundDn(3,7) = 3    RoundDn(-3,7) = -3
begin
  Result := Int(X);
end;
function RoundN(X: Extended): Extended;
{ Arredonda um número "normalmente": caso a parte de fração
  seja >= 0,5 o número será arredondado “para cima” (ver RoundUp)
  caso contrário, se a parte de fração for < 0,5, o
  número será arredondado “para baixo” (ver RoundDn).
  RoundN(3,5) = 4     RoundN(-3,5) = -4
  RoundN(3,1) = 3     RoundN(-3,1) = -3 }
begin
  (*
  if Abs(Frac(X)) >= 0.5 then
    Result := RoundUp(X)
  else
    Result := RoundDn(X);
  *)
    Result := Int(X) + Int(Frac(X) * 2);
end;
function Fix(X: Extended): Extended;
{ Retorna o primeiro inteiro menor que ou
  igual a um dado número.
  Int(3,7) = 3          Int(-3,7) = -3
  Fix(3,7) = 3          Fix(-3,1) = -4 }
begin
  if (X >= 0) or (Frac(X) = 0) then
    Result := Int(X)
  else
    Result := Int(X) - 1;
end;
function RoundDnX(X: Extended): Extended;
{ Retorna o primeiro inteiro menor que ou
  igual a um dado número.
  RoundDnX(3,7) = 3     RoundDnX(-3,7) = -3
  RoundDnX(3,7) = 3     RoundDnX(-3,1) = -4 }
begin
  Result := Fix(X);
end;


function RoundUpX(X: Extended): Extended;
{ Retorna o primeiro inteiro maior que ou
  igual a um dado número.
  RoundUpX(3,1) = 4     RoundUpX(-3,7) = -3 }
begin
  Result := Fix(X) + Abs(Sgn(Frac(X)))
end;
function RoundX(X: Extended): Extended;
{ Arredonda o número "normalmente", porém levando em conta o sinal:
  se a parte de fração for >= 0,5, o número
  será arredondado “para cima” (ver RoundUpX)
  caso contrario, se a parte de fração for < 0,5,

  o número será arredondado “para baixo” (ver RoundDnX).
  RoundX(3,5) = 4     RoundX(-3,5) = -3 }
begin
  (*
  if Abs(Frac(X)) >= 0,5 then
    Result := RoundUpX(X)
  else
    Result := RoundDnX(X);
  *)
    Result := Fix(X + 0.5);
end;

quinta-feira, 21 de abril de 2016

Tutorial de instalação do FastReport FullSource no Delphi

Aqui partimos do presuposto que você já tem os fontes do FastReport. Segue tutorial de instalação:

  • Desinstale qualquer versão anterior em Components > Install Packages  e exclua a pasta do FastReport de Arquivos de Programas;
  • Feche o Delphi;
  • Na pasta do FastReport, execute o recompile.exe como Administrador;
  • Confira a versão do Delphi;
  • Marque a opção Recompile All Packages;
  • Compile para gerar a pasta Lib23 (onde 23 é a versão do Delphi, observe a mudança se necessário);
  • no recompile.exe marque Change language to e escolha no combobox à direita a opção Brazil (caso não dê certo execute os bats de trabução na pasta RES\Brazil mk.bat e mkall.bat);
  • Abra o Delphi e em Tool > Options > LibraryPath adicione a pasta gerada e traduzida Lib23;
  • Copie todos os arquivos *.BPL e copie em C:\Windows\System32 e C:\Windows\SysWOW64;
  • Em Components > Install Packages adcione os arquivos BPL da pasta Lib23 que começam com dcl*.


Obs.: Caso ocorra algum erro ou aviso, feche o Delphi e abra-o novamente.

FastReport 5 - Erro de violação de acesso ao exportar para PDF pelo componente

Para resolver o erro de Access Violation ao exportar para PDF:

  1. Na Unit onde estiver o compenente de exportação para PDF vá em USES e clique segurando CTRL sobre frxExportPDF (isso abrirá a unit de exportação);
  2. Comente a linha 721  > //CompressedCB.Checked := FCompressed; 
  3. Pressionar [F9] para dar erro;
  4. Confirma a remoção da declaração;
  5. Descomentar a linha 721;
  6. Após isso pressione F12 para apresentar o form e crie um CheckBox com o nome CompressedCB e alinhá-lo em qualquer lugar do form:

Compile novamente. Pronto, o FastReport atribuirá o caption do combobox criado de acordo com o idioma, em tempo de execução.

Postgres no docker

 -- Criar compose nano docker-compose.yml version: '3.7' ### services:   db:     image: postgres     volumes:       - postgres_data:...