Salve, salve amigos,
Navegando na internet neste final de semana, localize uma unit contendo alguns códigos interessantes e resolvi realizar algumas alterações no código para que você possa precisar em algum momento converter de Hexadecimal, Binário ou Octal.
Não se esqueçam de deixar seu comentário
------------------------------------------------------------------------------------------------
Em um formulario, adicione os seguintes componentes:
Um RadioGroup contendo os seguintes itens: Dec, Bin. Oct, Hex
Deixe selecionado a primeira opção. (Dec)
Adicione um componente Edit, e limpe seu caption.
Na seção public, declare as seguintes procedure:
Procedure RotinadeConversao_D; // Converte um numero para decimal
Procedure Rotinadeconversao_B; // Converter de decimal para
*******************************************************************
procedure TForm3.RotinadeConversao_D;
var
i, Bin :Integer;
Calcular :Real;
Inverter :String;
begin
Calcular:=0;
Inverter :=AnsiReverseString(Edit1.text) ;
For i:= 1 to Length(Edit1.text) do begin
{ Convertendo de Binario Para Decimal}
If PosicaoAnterior = 1 Then Begin
Bin := StrToInt(Inverter[i]);
Calcular := Calcular + (Bin * Power(2,i-1)); //Power Eleva Potencia
end
{ Fim da Conversão de Binario Para Decimal}
else
{ Inicio de Octal Para Decimal}
if PosicaoAnterior = 2 Then Begin
Bin:=StrtoInt(Inverter[i]);
Calcular := Calcular + (Bin * Power(8,i-1));
end
{ Fim da Conversão de Octal Para Decimal}
else
{ Convertendo de Hexadecimal Para Decimal}
if PosicaoAnterior = 3 Then Begin
Case Inverter[i]of
'A':Bin :=10;
'B':Bin :=11;
'C':Bin :=12;
'D':Bin :=13;
'E':Bin :=14;
'F':Bin :=15;
else Bin:=StrtoInt(Inverter[i]);
end;
Calcular := Calcular + (Bin * power(16,i-1));
end;
{ Fim da Conversão de Hexadecimal Para Decimal}
end;
Edit1.text:=(FloatToStr(Calcular));
end;
***************************************************
procedure TForm3.Rotinadeconversao_B;
var
Calculo,Conversao,Bin,Resto:Integer;
Aux:String;
Begin
Aux:='';
if Edit1.Text<>'' Then
Conversao:= Trunc(StrToFloat(Edit1.text))
else
Conversao:=0;
Edit1.text:='';
{Inicio Conversao para Binario}
if RgTipo.ItemIndex=1 Then Begin
repeat
Bin := Conversao div 2;
Resto := Conversao mod 2;
Aux := Aux + IntToStr(resto);
Conversao:= Bin;
until (conversao <=1); Aux:= Aux + IntToSTR(Bin); Edit1.Text:= AnsiReverseString(Aux); end {Fim da Conversao para Binario} else {Inicio Conversao para Octal} if RgTipo.ItemIndex=2 then Begin Repeat Bin := Conversao div 8; Resto := Conversao mod 8; Conversao:= Bin; Aux := Aux + IntToStr(resto); Until (Conversao <=1); if bin>0 then
Aux:= Aux + IntToSTR(Bin);
Edit1.Text:= AnsiReverseString(aux);
end
{Fim da Conversão para Octal}
else Begin
{Inicio da Conversao para Hexadecimal}
Repeat
Bin := Conversao div 16;
Resto := Conversao mod 16;
Conversao:= Bin;
case Resto of
10: Edit1.Text :=Edit1.Text + 'A';
11: Edit1.Text :=Edit1.Text + 'B';
12: Edit1.Text :=Edit1.Text + 'C';
13: Edit1.Text :=Edit1.Text + 'D';
14: Edit1.Text :=Edit1.Text + 'E';
15: Edit1.Text :=Edit1.Text + 'F';
else Edit1.Text :=Edit1.Text+ IntToStr(resto);
end;
until (Conversao <=1); if Bin>0 then
Edit1.Text:= Edit1.Text + IntToSTR(bin);
Edit1.text:= AnsiReverseString(Edit1.text);
end;
{Fim da Conversao para Hexadecimal}
end;
**************************************************************
No evento OnKeyPress do componente Edit, digite o seguinte código
if not (key in ['0'..'9']) then
key:=#0;
*********************************************************************
No evento Onclick do componente RadioGroup, digite o seguinte código:
case(RGTIPO.ItemIndex) of
0: begin
RotinadeConversao_D;
PosicaoAnterior:=0;
end;
1: begin
if (PosicaoAnterior=2)Or (PosicaoAnterior=3) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=1;
Rotinadeconversao_B;
end
else Begin
PosicaoAnterior:=1;
Rotinadeconversao_B;
end;
end;//Fim CAse 1
2: begin
If (PosicaoAnterior=1) or (PosicaoAnterior=3) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=2;
Rotinadeconversao_B;
end else Begin
PosicaoAnterior:=2;
Rotinadeconversao_B;
end;
end;
3: begin
If (PosicaoAnterior=1) or (PosicaoAnterior=2) Then Begin
RotinadeConversao_D;
PosicaoAnterior:=3;
Rotinadeconversao_B;
end else Begin
PosicaoAnterior:=3;
Rotinadeconversao_B;
end;
end;
end;
end;
***********************************************************************
Bom, agora basta compilar e digita por exemplo o valor 100 dentro do edit e selecionar uma das opções do Radiogroup
Um forte abraço
Marcos Antonio
8 comentários:
Agora sim meu caro amigo!!
Eis ai o que vc fez, não quebrou um galho, mas sim a arvore inteira!! hehehe
Abraço, parabéns pelo blog e obrigado!
Philipe Dornelas
Muito interessante Marcos, sem dúvidas ajudará a muitos.
Forte Abraço,
Gesilene Martins.
Sabe aquela luz do fim do túnio... É isso ai!
Legal Marquinhos, como a Gesilene disse, vai ajudar muita gente!
t+
Luiz André
aí fessor,
vai salvar a vida de mta gente
vlw
E ai Professor, muito legal seu blog espero que continue assim, trazendo novas notícias no mundo da informática.
Salve Salve Marcos,
Que isso heim, o blog ta
muito bom mesmo, gostei de
ver, ele ta ajudadando batante..
Abração..Parabéns pelo blog..
João Eduardo
Postar um comentário