CODIGO DEPHI PASSAR PARA O VB

USUARIO.EXCLUIDOS 15/06/2004 17:25:15
#29787
Pessoal existe algum programa que passe um código fonte feito em delphi para o VB?
se sim será que alguém pode me mandar
se não será que alguém pode " TRADUZIR " esse código para mim?

// ---------- FUNÇÃO DE HEXA PARA RGB ----------

Function ToRgb(cor : String;tipo:byte) :integer;
var RVA,RVA2:array[0..2] of integer;
flag : Boolean;
dato:integer;
suma,suma2:integer;
resto:byte;
j:integer;
i:integer;
begin
dato:=strtoint( '$' + cor);

For j := 1 To 3 do begin
suma := 0 ;
For i := 1 To 5 do begin
resto := dato Mod 2;
dato := dato div 2;
suma := suma + (resto * (elev(2, (i-1))));

end;
suma2:=suma;
flag := True;
If (suma = 0) And (flag = True) Then begin
suma:= 0;
flag:= False;
end;

If (suma = 1) And (flag = True) Then begin
suma:= 8;
flag:= False;
End;

If (suma = 2) And (flag = True) Then begin
suma:= 16;
flag:= False;
End;

If (suma = 3) And (flag = True) Then begin
suma:= 24;
flag:= False;
End;

If (suma = 4) Then suma := 32;
If (suma = 5) Then suma := 41;
If (suma = 6) Then suma := 49;
If (suma = 7) Then suma := 57;

If (suma = 8) And (flag = True) Then begin
suma:= 65;
flag:= False;
End;

If (suma = 9) Then suma := 74;
If (suma = 10) Then suma := 82;
If (suma = 11) Then suma := 90;
If (suma = 12) Then suma := 98;
If (suma = 13) Then suma := 106;
If (suma = 14) Then suma := 115;
If (suma = 15) Then suma := 123;

If (suma = 16) And (flag = True) Then begin
suma := 131;
flag := False;
End;

If (suma = 17) Then suma := 139;
If (suma = 18) Then suma := 148;
If (suma = 19) Then suma := 156;
If (suma = 20) Then suma := 164;
If (suma = 21) Then suma := 172;
If (suma = 22) Then suma := 180;
If (suma = 23) Then suma := 189;

If (suma = 24) And (flag = True) Then begin
suma := 197;
flag := False;
End;

If (suma = 25) Then suma := 205;
If (suma = 26) Then suma := 213;
If (suma = 27) Then suma := 222;
If (suma = 28) Then suma := 230;
If (suma = 29) Then suma := 238;
If (suma = 30) Then suma := 246;
If (suma = 31) Then suma := 255;

RVA[j - 1] := suma;
RVA2[j - 1] := suma2;

flag := True;

end;
//result = RVA[0] + (RVA[1] * 256) + (RVA[2] * 65536)
if tipo=0 then result:=rgb(RVA[0],RVA[1],RVA[2]);
if tipo=1 then result:=RVA[0];
if tipo=2 then result:=RVA[1];
if tipo=3 then result:=RVA[2];

if tipo=4 then result:=RVA2[0];
if tipo=5 then result:=RVA2[1];
if tipo=6 then result:=RVA2[2];

end;
// ---------- FUNÇÃO DE RGB PARA HEXA ----------

Function ToHexa(corrgb : integer) : String;
var tot,valor, r, g, b: Integer;
begin
tot := corrgb;
b := GetBValue(corrgb);
g := GetGValue(corrgb);
r := GetRValue(corrgb);

valor := ((r div 8) + ((g div 8) * 32) + (b div 8) * 1024);
result := inttohex(valor,4);
End;

// ---------- FUNÇÃO DE EXPONENCIAÇÃO ----------

function elev(num1,num2:integer):integer;
var l:integer;

begin
result:=1;
for l:= 1 to num2 do result:=result*num1;

end;


desde já muito Obrigado
USUARIO.EXCLUIDOS 15/06/2004 23:14:42
#29809
Resposta escolhida
Use essas 4 linhas abaixo para testar as funções.
Dim Cor As typRGB
Dim sCor As String
Cor = toRGB("0a040E")
sCor = toHexa(&HA040E)

Espero que isso te ajude.

' Coloque o código abaixo em um módulo.
Option Explicit
Public Type typRGB
Red As Byte
Green As Byte
Blue As Byte
End Type

Public Function toRGB(sCor As String) As typRGB
Dim iCor As Long

' Transforma "string hexa" num inteiro longo
iCor = Val("&H" & sCor)

' Separa os três primeiros bytes de um campo longo (iCor)
toRGB.Red = HiWord(iCor) And &HFF
toRGB.Green = hiByte(LoWord(iCor)) And &HFF
toRGB.Blue = loByte(LoWord(iCor)) And &HFF

End Function

Public Function toHexa(iCor As Long) As String

Dim sTemp As String * 2

' Red
sTemp = Hex(HiWord(iCor) And &HFF)
RSet sTemp = Trim$(sTemp)
toHexa = sTemp

' Green
sTemp = Hex(hiByte(LoWord(iCor)) And &HFF)
RSet sTemp = Trim$(sTemp)
toHexa = toHexa & sTemp

' Blue
sTemp = Hex(loByte(LoWord(iCor)) And &HFF)
RSet sTemp = Trim$(sTemp)
toHexa = toHexa & sTemp

toHexa = Replace(toHexa, " ", "0")

End Function


' Funções para quebra de inteiros em bytes
'' e quebra de longos em inteiros
Public Function LoWord(ByVal dw As Long) As Integer

If dw And &H8000& Then
LoWord = &H8000 Or (dw And &H7FFF&)
Else
LoWord = dw And &HFFFF&
End If

End Function

Public Function HiWord(ByVal dw As Long) As Integer

If dw And &H80000000 Then
HiWord = (dw \ 65535) - 1
Else
HiWord = dw \ 65535
End If

End Function

Public Function loByte(ByVal w As Integer) As Byte

loByte = w And &HFF

End Function

Public Function hiByte(ByVal w As Integer) As Byte

If w And &H8000 Then
hiByte = &H80 Or ((w And &H7FFF) \ &HFF)
Else
hiByte = w \ 256
End If

End Function
USUARIO.EXCLUIDOS 16/06/2004 09:34:07
#29874
Fiz uma simplificação na função toRGB:


Public Function toRGB(sCor As String) As typRGB

toRGB.Red = Val("&H" & Mid$(sCor, 1, 2))
toRGB.Green = Val("&H" & Mid$(sCor, 3, 2))
toRGB.Blue = Val("&H" & Mid$(sCor, 5, 2))

End Function
USUARIO.EXCLUIDOS 16/06/2004 18:38:17
#29994

Não entendi mais nada... Qual a sua dificuldade nisso ?
Sinceramente acho que tem muito a ser melhorado no código em Delphi, mais la vai.

1) Remova os do begin
2) Remova os caracteres ;
3) Troque := por =
4) Troque Then Begin por then
5) Nas instruções FOR troque end por Next X
6) Troque: dato:=strtoint( '$' + cor) por dato = val ("&H" & cor)
7) Na instrução IF troque End por End If
8) Nos arrays troques os colchetes por parenteses

Como a definição da função e declaração de variaves você já vez, não sobrou mais nada !

Boa Sorte.
Tópico encerrado , respostas não são mais permitidas