quarta-feira, 16 de abril de 2014

Automatizando um novo branch git

...Como prometido estou voltando a postar dicas e começarei com automatização do git.

Hoje existem varias ferramentas que fazem ou prometem fazer esta tarefa de automatizar o git, o próprio git fornece uma interface visual que pode ser acessada utilizando o comando "gitk", porem se você é como eu e gosta de suas próprias soluções então poderás automatizar os teus processos utilizando o Shell Script.

A extensão para esses arquivos ao contrario do que muitos pensam quando estão trabalhando no windows não é (*.bat) e sim (*.sh) ou seja "viva o linux", então comecemos;

Um novo branch;

 - Na criação de um novo branch, teoricamente você faria os seguintes passos;

  1. Atualizaria o seu branch local develop
  2. Apartir do seu branch local develop atualizado você criaria o seu novo branch

- Repassando esse processo para o arquivo de automatização teríamos;


- Crie um arquivo e salve o mesmo com a extensão .sh;
- Abra esse aquivo para edição;- Sete o path dos seus fontes, ex;
  • cd C:
  • cd Sistemas
  • cd MeuSistema
  • cd src
- Atualize o seu branch develop 
  • git pull (branch remoto)
- Lance uma pergunta ao usuário
  • Informe o nome do branch a ser criado
- Crie o novo branch
  • git checkout -b (novo branch)
- Segue um modelo;

# Novo branch
# Jucelio Moura

function EnquantoEnter {
echo ""
read -p "Click enter para continuar..." nothing
}
function mensagem(){
    msg=$@
    echo -e " ############# "$msg" ############# "
}

mensagem INICIANDO O PROCESSO...

# Localiza pasta dos fontes

echo
echo QUAL A DIRETORIO DE TRABALHO?
read part

mensagem SETANDO DIRETORIO $part...

cd $part:
log=$?
logMsgErro="DIRETORIO $part NAO ENCONTRADO"
if [ $log -eq 0 ];
then
mensagem SETANDO PASTA SISTEMAS...
cd Sistemas
log=$?
logMsgErro="PASTA SISTEMA NAO ENCONTRADA"
fi

if [ $log -eq 0 ];
then
mensagem SETANDO PASTA MEUSISTEMA...
cd MEUSISTEMA
log=$?
logMsgErro="PASTA MEUSISTEMA NAO ENCONTRADA"
fi

if [ $log -eq 0 ];
then
mensagem SETANDO PASTA SRC...
cd src
log=$?
logMsgErro="PASTA SRC NAO ENCONTRADA"
fi

#Seta no branch develop
if [ $log -eq 0 ];
then
mensagem SETANDO BRANCH DEVELOP...
git checkout develop
log=$?
logMsgErro="ERRO AO SETAR O BRANCH DEVELOP"
fi

#Atualiza branch develop
if [ $log -eq 0 ];
then
mensagem ATUALIZANDO BRANCH DEVELOP...
git pull (origin ou ipservidor) develop
log=$?
logMsgErro="ERRO AO ATUALIZAR O BRANCH DEVELOP"
fi

if [ $log -eq 0 ];
then
echo
echo Digite o nome do novo branch
read nome_branch
fi

#Seta o novo branch
if [ $log -eq 0 ];
then
mensagem SETANDO BRANCH $nome_branch...
git checkout -b $nome_branch
log=$?
logMsgErro="ERRO AO SETAR O NOVO BRANCH"
fi
if [ $log -eq 1 ];
then
   echo -e "\n"
echo $logMsgErro
fi

EnquantoEnter

terça-feira, 15 de abril de 2014

Mais um retorno

... Bom dia Developers, a muito tempo não posto nada no blogger, vou tentar inicia mais uma vez nas minhas madrugadas, iniciarei com Git;

- Automatização com arquivos batch
- Criar um exemplo (aplicativo em Delphi), para auxiliar a automatização 

Atenciosamente: Jucélio Moura

quinta-feira, 30 de janeiro de 2014

Trocar a classe de uma instância em runtime...

- Método

procedure TrocaInstanciaClass(Instancia: TObject; NovaClasse: TClass; Parent: twincontrol);
type
  PClass = ^TClass;
begin
  if Assigned(Instancia) and Assigned(NovaClasse)
    and NovaClasse.InheritsFrom(Instancia.ClassType)
    and (NovaClasse.InstanceSize = Instancia.InstanceSize) then
  begin
    PClass(Instancia)^ := NovaClasse;
    if NovaClasse.InheritsFrom(tcontrol) then
      begin
        tcontrol(Instancia).Parent:= nil;
        tcontrol(Instancia).Parent:= parent;
      end;
  end;

end;

- Exemplo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TMeuBotao = class(TButton) //Nova classe herdando de TButton 
  public
    procedure ShowHandle; 
  end;

  TForm1 = class(TForm)
    btn_1: TButton;
    procedure btn_1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TrocaInstanciaClass(Instancia: TObject; NovaClasse: TClass; Parent: twincontrol);
type
  PClass = ^TClass;
begin
  if Assigned(Instancia) and Assigned(NovaClasse)
    and NovaClasse.InheritsFrom(Instancia.ClassType)
    and (NovaClasse.InstanceSize = Instancia.InstanceSize) then
  begin
    PClass(Instancia)^ := NovaClasse;
    if NovaClasse.InheritsFrom(tcontrol) then
      begin
        tcontrol(Instancia).Parent:= nil;
        tcontrol(Instancia).Parent:= parent;
      end;
  end;
end;

procedure TForm1.btn_1Click(Sender: TObject);
begin
  TrocaInstanciaClass(btn_1, TMeuBotao, Self); //Troca a instância
  ShowMessage(btn_1.ClassName); //Mostra a classe
  (btn_1 as TMeuBotao).ShowHandle; //Ultiliza o metodo da nova classe
end;

{ TMeuBotao }

procedure TMeuBotao.ShowHandle;
begin
  ShowMessage(IntToStr(Self.Handle));
end;


end.

sexta-feira, 12 de julho de 2013

Colocar número da linha em um TreeView


- Em Uses adicione; UxTheme
- Em um Form coloque um componente TreeView
- No evento OnCreate do Form, coloque o código para popular o TreeView;

  function CriaValor: string;
  begin
    Randomize;
    Result:= IntToStr(Random(MaxInt))+' - '+IntToStr(Random(MaxInt))+' - '+IntToStr(Random(MaxInt))+' - '+IntToStr(Random(MaxInt));
  end;
var
  node: array[0..2] of TTreeNode;
  nodeFilho: array[0..2] of TTreeNode;
  i, j: integer;
begin
  for I := Low(node) to High(node) do
    begin
      node[i]:= tv1.Items.Add(nil, CriaValor);
      for j := 0 to 10 do
        begin
          tv1.Items.AddChild(node[i], CriaValor);
        end;
    end;
  tv1.FullExpand;

- No evento OnAdvancedCustomDrawItem adicione:

  function Tab(p_value: Integer): string;
  var
    i: Integer;
  begin
    for I := 0 to p_value do
      Result:= Result + ' ';
  end;
var
  wl_NodeRect: TRect;
  wl_NodeTextRect: TRect;
  wl_Text: string;
  wl_ThemeData: HTHEME;
  wl_TreeItemState: Integer;
begin
  if Stage = cdPrePaint then
  begin
    wl_NodeRect := Node.DisplayRect(False);
    wl_NodeTextRect := Node.DisplayRect(True);

    if (cdsSelected in State) and Sender.Focused then
      wl_TreeItemState := TREIS_SELECTED
    else
      if (cdsSelected in State) and (cdsHot in State) then
        wl_TreeItemState := TREIS_HOTSELECTED
      else
        if cdsSelected in State then
          wl_TreeItemState := TREIS_SELECTEDNOTFOCUS
        else
          if cdsHot in State then
            wl_TreeItemState := TREIS_HOT
          else
            wl_TreeItemState := TREEITEMStateFiller0;

    if wl_TreeItemState <> TREEITEMStateFiller0 then
    begin
      wl_ThemeData := OpenThemeData(Sender.Handle, VSCLASS_TREEVIEW);
      DrawThemeBackground(wl_ThemeData, Sender.Canvas.Handle, TVP_TREEITEM, wl_TreeItemState,
        wl_NodeRect, nil);
      CloseThemeData(wl_ThemeData);
    end;

    SetBkMode(Sender.Canvas.Handle, TRANSPARENT);
    SetTextColor(Sender.Canvas.Handle, clBlack);

    wl_Text := Tab(10)+Node.Text;
    wl_NodeTextRect.Right:= tv1.Width;
    Sender.Canvas.TextRect(wl_NodeTextRect, wl_Text,
      [tfVerticalCenter, tfSingleLine, tfEndEllipsis, tfLeft]);

    wl_Text:= 'Linha '+IntToStr(Node.AbsoluteIndex + 1);
    SetBkMode(Sender.Canvas.Handle, OPAQUE);
    SetTextColor(Sender.Canvas.Handle, $008AC5FF);
    Sender.Canvas.TextRect(wl_NodeRect, wl_Text,
      [tfVerticalCenter, tfSingleLine, tfEndEllipsis, tfLeft]);
  end;

  PaintImages := False;
  DefaultDraw := False;


end;

Atenciosamente: Jucélio Moura.

quinta-feira, 21 de fevereiro de 2013

Busca de endereço por CEP

...Tive pesquisando relacionado a consulta de endereços por CEP, e com o resultado de minha pesquisa desenvolvi um pequeno componente que faz isso:


- Fonte do exemplo acima:


segue o link do componente e do exemplo: Download.

At+, amigos.

sábado, 16 de fevereiro de 2013

CRFB Revisado 16/02/2013

...Olá Delphianos, estava vendo uns arquivos antigos e deparei-me com o projeto CRFB, resolvi testa-lo e observei que algumas funções não mais funcionavam, então resolvi revisar o seu código, agora ficou melhor, quem se interessar pelo fonte e o componente segue o link: CRFB Revisado 16/02/2013