Está en la página 1de 24

Como hacer un Editor Hexa Bsico Por Expermicid Hola a todos.

Hice este documento en donde les explicare como hacer un Editor Hexa Bsico. Empecemos. Primero me consegu unas imgenes para ponerles a los botones y tambin hice una para ponerle a la aplicacin. Ustedes pueden conseguirse las suyas. Botn Abrir Botn Guardar Botn Guardar Como Botn Ir Voy a poner dos botones mas pero a esos no les voy a poner imagen. Abrimos VB6, y generamos un nuevo proyecto. Voy a agregar en total 3 Forms y 2 Mdulos. A los cuales llamare as:

Al modulo ConversionNumerica le voy a poner estas dos funciones para convertir de Hexa a Decimal y de Decimal a Hexa. 'FUNCION QUE CONVIERTE HEXADECIMAL A DECIMAL Public Function HexToDec(ByVal HexStr As String) As Double Dim mult As Double Dim DecNum As Double Dim ch As String mult = 1 DecNum = 0 Dim i As Integer For i = Len(HexStr) To 1 Step -1

ch = Mid(HexStr, i, 1) If (ch >= "0") And (ch <= "9") Then DecNum = DecNum + (Val(ch) * mult) Else If (ch >= "A") And (ch <= "F") Then DecNum = DecNum + ((Asc(ch) - Asc("A") + 10) * mult) Else If (ch >= "a") And (ch <= "f") Then DecNum = DecNum + ((Asc(ch) - Asc("a") + 10) * mult) Else HexToDec = 0 Exit Function End If End If End If mult = mult * 16 Next i HexToDec = DecNum End Function 'FUNCION QUE CONVIERTE DECIMAL A HEXADECIMAL Public Function DecToHex(ByVal DecNum As Double) As String Dim remainder As Integer Dim HexStr As String HexStr = "" Do While DecNum <> 0 remainder = DecNum Mod 16 If remainder <= 9 Then HexStr = Chr(Asc(remainder)) & HexStr Else HexStr = Chr(Asc("A") + remainder - 10) & HexStr End If DecNum = DecNum \ 16 Loop If HexStr = "" Then HexStr = "0" DecToHex = HexStr End Function

Estas dos funciones no son hechas por m. Al modulo Datos voy a declarar como public dos arreglos y hare un Sub de llenado de uno de los arreglos. Public ByteArray() As Byte Public ValoresHex(0 To 255) As String

Public Sub Llenar() ValoresHex(0) = "." ValoresHex(1) = "." ValoresHex(2) = "." ValoresHex(3) = "." ValoresHex(4) = "." ValoresHex(5) = "." ValoresHex(6) = "." ValoresHex(7) = "." ValoresHex(8) = "." ValoresHex(9) = "." ValoresHex(10) = "." ValoresHex(11) = "." ValoresHex(12) = "." ValoresHex(13) = "." ValoresHex(14) = "." ValoresHex(15) = "." ValoresHex(16) = "." ValoresHex(17) = "." ValoresHex(18) = "." ValoresHex(19) = "." ValoresHex(20) = "." ValoresHex(21) = "." ValoresHex(22) = "." ValoresHex(23) = "." ValoresHex(24) = "." ValoresHex(25) = "." ValoresHex(26) = "." ValoresHex(27) = "." ValoresHex(28) = "." ValoresHex(29) = "." ValoresHex(30) = "." ValoresHex(31) = "." ValoresHex(32) = " " ValoresHex(33) = "!" ValoresHex(34) = Chr(22) ValoresHex(35) = "#" ValoresHex(36) = "$" ValoresHex(37) = "%" ValoresHex(38) = "&" ValoresHex(39) = "'" ValoresHex(40) = "(" ValoresHex(41) = ")" ValoresHex(42) = "*" ValoresHex(43) = "+" ValoresHex(44) = "," ValoresHex(45) = "-"

ValoresHex(46) = "." ValoresHex(47) = "/" ValoresHex(48) = "0" ValoresHex(49) = "1" ValoresHex(50) = "2" ValoresHex(51) = "3" ValoresHex(52) = "4" ValoresHex(53) = "5" ValoresHex(54) = "6" ValoresHex(55) = "7" ValoresHex(56) = "8" ValoresHex(57) = "9" ValoresHex(58) = ":" ValoresHex(59) = ";" ValoresHex(60) = "<" ValoresHex(61) = "=" ValoresHex(62) = ">" ValoresHex(63) = "?" ValoresHex(64) = "@" ValoresHex(65) = "A" ValoresHex(66) = "B" ValoresHex(67) = "C" ValoresHex(68) = "D" ValoresHex(69) = "E" ValoresHex(70) = "F" ValoresHex(71) = "G" ValoresHex(72) = "H" ValoresHex(73) = "I" ValoresHex(74) = "J" ValoresHex(75) = "K" ValoresHex(76) = "L" ValoresHex(77) = "M" ValoresHex(78) = "N" ValoresHex(79) = "O" ValoresHex(80) = "P" ValoresHex(81) = "Q" ValoresHex(82) = "R" ValoresHex(83) = "S" ValoresHex(84) = "T" ValoresHex(85) = "U" ValoresHex(86) = "V" ValoresHex(87) = "W" ValoresHex(88) = "X" ValoresHex(89) = "Y" ValoresHex(90) = "Z" ValoresHex(91) = "[" ValoresHex(92) = "\" ValoresHex(93) = "]"

ValoresHex(94) = "^" ValoresHex(95) = "_" ValoresHex(96) = "`" ValoresHex(97) = "a" ValoresHex(98) = "b" ValoresHex(99) = "c" ValoresHex(100) = "d" ValoresHex(101) = "e" ValoresHex(102) = "f" ValoresHex(103) = "g" ValoresHex(104) = "h" ValoresHex(105) = "i" ValoresHex(106) = "j" ValoresHex(107) = "k" ValoresHex(108) = "l" ValoresHex(109) = "m" ValoresHex(110) = "n" ValoresHex(111) = "o" ValoresHex(112) = "p" ValoresHex(113) = "q" ValoresHex(114) = "r" ValoresHex(115) = "s" ValoresHex(116) = "t" ValoresHex(117) = "u" ValoresHex(118) = "v" ValoresHex(119) = "w" ValoresHex(120) = "x" ValoresHex(121) = "y" ValoresHex(122) = "z" ValoresHex(123) = "{" ValoresHex(124) = "|" ValoresHex(125) = "}" ValoresHex(126) = "~" ValoresHex(127) = "." ValoresHex(128) = "." ValoresHex(129) = "." ValoresHex(130) = "." ValoresHex(131) = "." ValoresHex(132) = "." ValoresHex(133) = "." ValoresHex(134) = "." ValoresHex(135) = "." ValoresHex(136) = "." ValoresHex(137) = "." ValoresHex(138) = "." ValoresHex(139) = "." ValoresHex(140) = "." ValoresHex(141) = "."

ValoresHex(142) = "." ValoresHex(143) = "." ValoresHex(144) = "." ValoresHex(145) = "." ValoresHex(146) = "." ValoresHex(147) = "." ValoresHex(148) = "." ValoresHex(149) = "." ValoresHex(150) = "." ValoresHex(151) = "." ValoresHex(152) = "." ValoresHex(153) = "." ValoresHex(154) = "." ValoresHex(155) = "." ValoresHex(156) = "." ValoresHex(157) = "." ValoresHex(158) = "." ValoresHex(159) = "." ValoresHex(160) = "." ValoresHex(161) = "." ValoresHex(162) = "." ValoresHex(163) = "." ValoresHex(164) = "." ValoresHex(165) = "." ValoresHex(166) = "." ValoresHex(167) = "." ValoresHex(168) = "." ValoresHex(169) = "." ValoresHex(170) = "." ValoresHex(171) = "." ValoresHex(172) = "." ValoresHex(173) = "." ValoresHex(174) = "." ValoresHex(175) = "." ValoresHex(176) = "." ValoresHex(177) = "." ValoresHex(178) = "." ValoresHex(179) = "." ValoresHex(180) = "." ValoresHex(181) = "." ValoresHex(182) = "." ValoresHex(183) = "." ValoresHex(184) = "." ValoresHex(185) = "." ValoresHex(186) = "." ValoresHex(187) = "." ValoresHex(188) = "." ValoresHex(189) = "."

ValoresHex(190) = "." ValoresHex(191) = "." ValoresHex(192) = "." ValoresHex(193) = "." ValoresHex(194) = "." ValoresHex(195) = "." ValoresHex(196) = "." ValoresHex(197) = "." ValoresHex(198) = "." ValoresHex(199) = "." ValoresHex(200) = "." ValoresHex(201) = "." ValoresHex(202) = "." ValoresHex(203) = "." ValoresHex(204) = "." ValoresHex(205) = "." ValoresHex(206) = "." ValoresHex(207) = "." ValoresHex(208) = "." ValoresHex(209) = "." ValoresHex(210) = "." ValoresHex(211) = "." ValoresHex(212) = "." ValoresHex(213) = "." ValoresHex(214) = "." ValoresHex(215) = "." ValoresHex(216) = "." ValoresHex(217) = "." ValoresHex(218) = "." ValoresHex(219) = "." ValoresHex(220) = "." ValoresHex(221) = "." ValoresHex(222) = "." ValoresHex(223) = "." ValoresHex(224) = "." ValoresHex(225) = "." ValoresHex(226) = "." ValoresHex(227) = "." ValoresHex(228) = "." ValoresHex(229) = "." ValoresHex(230) = "." ValoresHex(231) = "." ValoresHex(232) = "." ValoresHex(233) = "." ValoresHex(234) = "." ValoresHex(235) = "." ValoresHex(236) = "." ValoresHex(237) = "."

ValoresHex(238) = "." ValoresHex(239) = "." ValoresHex(240) = "." ValoresHex(241) = "." ValoresHex(242) = "." ValoresHex(243) = "." ValoresHex(244) = "." ValoresHex(245) = "." ValoresHex(246) = "." ValoresHex(247) = "." ValoresHex(248) = "." ValoresHex(249) = "." ValoresHex(250) = "." ValoresHex(251) = "." ValoresHex(252) = "." ValoresHex(253) = "." ValoresHex(254) = "." ValoresHex(255) = "." End Sub El Sub Llenar los que hace es llenar el arreglo desde la posicin 0 a la 255 con el carcter ASCII correspondiente al ndice. Bien, ahora vamos a hacer el Form Principal. Por ahora voy a agregar 1 Image, 6 CommandButton (o PushButton en mi caso) y 1 TextBox (o FlatEdit) con esta distribucin y nombres.

(1) Image1: En el atributo Picture le elijen la imagen que uno quiera. (2) PushButton1: En el atributo Picture elijo la imagen correspondiente y de nombre le pongo Buscar. (3) PushButton2: En el atributo Picture elijo la imagen correspondiente y de nombre le pongo Guardar. (4) PushButton3: En el atributo Picture elijo la imagen correspondiente y de nombre le pongo GuardarComo. (5) PushButton4: En el atributo Caption le ponemos Hex y de nombre le pongo Hex. (6) PushButton5: En el atributo Caption le ponemos Dec y de nombre le pongo Dec. (7) FlatEdit1: En el atributo Text le borramos para que no tenga nada y lo nombrare ValorBuscado.

(8) PushButton6: En el atributo Picture elijo la imagen correspondiente y de nombre le pongo Ir. Vamos a necesitar un CommonDialog al que llame CD. Por debajo de los botones de la imagen anterior vamos a agregar esto:

(1) Es un GroupBox que va a contener los (2), (3), (4), (5), (6) y (7). (2) Label: Son en total 16 y son llamados LabelC, agrupados todos juntos con un ndice, mediante el atributo Index. El cual va de 0 a 15 aumentando de izquierda a derecha. (3) Label: Son en total 16, son llamados LabelD y tambin como en el caso anterior estn agrupados mediante el atributo Index, el cual aumenta de 0 a 15 de izquierda a derecha. (4) Label: 16 en total, llamados Label y aumenta el ndice de 0 a 15 de arriba abajo. (5) FlatEdit: Matriz 16x16 llamados FlatEdit y agrupados cuyo ndice va de 0 a 255, aumentado de izquierda a derecha y de arriba abajo. (6) FlatEdit: Matriz 16x16 llamados FlatEdit2 y agrupados cuyo ndice va de 0 a 255, aumentado de izquierda a derecha y de arriba abajo. (7) ScrollBar: Llamado ScrollBar1. (8) Label: En el atributo Caption le pongo Offset:. (9) Label: Llamado Elegido. (10) Label: Llamado Total. (11) FlatEdit: Llamado Ruta, va a contener la ruta del archivo abierto. No ser visible en la aplicacin. NOTA: Los label: LabelC, LabelD, Label, Total y Elegido tienen borde y color de fondo solo para ser ms visibles, luego se les cambiara por cdigo para sacrselo. Vamos a hacer la parte del cdigo.

Voy a declarar algunas variables globales que necesitare: Dim fno As Integer, anterior As Integer Public SizeOfFile As Long Dim TotalPaginas As Long En el evento Load del Form vamos a poner: Private Sub Form_Load() Dim i As Integer With Principal 'POSICION .Top = (Screen.Height - .Height) / 2 .Left = (Screen.Width - .Width) / 2 'MEDIDAS .Height = 8175 .Width = 11175 End With 'BORDES DE LOS LABEL Total.BorderStyle = 0 Elegido.BorderStyle = 0 For i = 0 To 15 Label(i).BorderStyle = 0 LabelC(i).BorderStyle = 0 LabelD(i).BorderStyle = 0 Label(i).BackColor = vbWhite LabelC(i).BackColor = vbWhite LabelD(i).BackColor = vbWhite Next i For i = 0 To 255 FlatEdit(i).Alignment = xtpEditAlignCenter FlatEdit2(i).Alignment = xtpEditAlignCenter FlatEdit(i).MaxLength = 2 FlatEdit(i).Locked = True FlatEdit2(i).MaxLength = 1 FlatEdit2(i).Locked = True Next i 'VALORES PREDEFINIDOS GroupBox1.Enabled = False Hexa.Font.Bold = True Elegido.Alignment = 2 anterior = 256

Llenar End Sub Posiciono el Form en el medio de la pantalla, le cambio las medidas (ancho y alto/Width y Height). Le saco los bordes a los Label Total y Elegido, cambiando el atributo BordeStyle a 0. Con un bucle de 0 a 15 le saco el borde a los label: LabelC, LabelD y Label y tambin le cambio el atributo BackColor a vbWhite. Con otro bucle de 0 a 255 cambio algunos atributos de los FlatEdit: Alignment a xtpEditAlignCenter, Locked a True y MaxLenght a 2 en los FlatEdit y 1 en los FlatEdit2. Este ltimo bucle es innecesario porque se puede hacer desde los atributos de cada elemento. Yo lo hice por cdigo para apurar el paso pero ralentiza la ejecucin del programa. Por ltimo cambio algunos valores y llamo al Sub Llenar anteriormente creado. En el evento Click del botn Hex ponemos: Private Sub Hex_Click() If Ruta.Text = vbNullString Then Exit Sub Dim i As Integer Dim aux As String If Dec.Font.Bold = True Then Hex.Font.Bold = True Dec.Font.Bold = False LabelC(10) = "A" LabelC(11) = "B" LabelC(12) = "C" LabelC(13) = "D" LabelC(14) = "E" LabelC(15) = "F" For i = 0 To 15 aux = DecToHex(Label(i)) If Len(aux) = 1 Then Label(i) = "00000000000" & aux If Len(aux) = 2 Then Label(i) = "0000000000" & aux If Len(aux) = 3 Then Label(i) = "000000000" & aux If Len(aux) = 4 Then Label(i) = "00000000" & aux If Len(aux) = 5 Then Label(i) = "0000000" & aux If Len(aux) = 6 Then Label(i) = "000000" & aux If Len(aux) = 7 Then Label(i) = "00000" & aux If Len(aux) = 8 Then Label(i) = "0000" & aux If Len(aux) = 9 Then Label(i) = "000" & aux If Len(aux) = 10 Then Label(i) = "00" & aux Next i Elegido.Caption = DecToHex(Elegido.Caption) End If End Sub

Si no se a elegido ningn archivo (Ruta.Text = vbNullString) salgo del Sub. De lo contrario, verifico que este presionado el botn Dec (Dec.Font.Bold = True) y cambio los valores de todos los Label: LabelC, Label y Elegido a su valor en Hexa. En el evento Click del botn Dec, hacemos algo anlogo al botn Hex pero se convierten los valores a Decimal. Private Sub Dec_Click() If Ruta.Text = vbnullstrin Then Exit Sub Dim i As Integer Dim aux As String If Hex.Font.Bold = True Then Dec.Font.Bold = True Hex.Font.Bold = False LabelC(10) = "10" LabelC(11) = "11" LabelC(12) = "12" LabelC(13) = "13" LabelC(14) = "14" LabelC(15) = "15" For i = 0 To 15 aux = HexToDec(Label(i)) If Len(aux) = 1 Then Label(i) = "00000000000" & aux If Len(aux) = 2 Then Label(i) = "0000000000" & aux If Len(aux) = 3 Then Label(i) = "000000000" & aux If Len(aux) = 4 Then Label(i) = "00000000" & aux If Len(aux) = 5 Then Label(i) = "0000000" & aux If Len(aux) = 6 Then Label(i) = "000000" & aux If Len(aux) = 7 Then Label(i) = "00000" & aux If Len(aux) = 8 Then Label(i) = "0000" & aux If Len(aux) = 9 Then Label(i) = "000" & aux If Len(aux) = 10 Then Label(i) = "00" & aux Next i Elegido.Caption = HexToDec(Elegido.Caption) End If End Sub Voy a definir una funcin llamada Mostrar que me va a servir para llenar los Label y FlatEdit con loa valores correspondientes: Private Function Mostrar(archivo() As Byte, inicio As Long) Dim i As Long Dim aux As String, j As String For i = 0 To 255

If (i + inicio + 1) > SizeOfFile Then aux = vbNullString Else aux = DecToHex(ByteArray(i + inicio + 1)) End If If Len(aux) = 1 Then aux = "0" & aux FlatEdit(i) = aux If (i + inicio + 1) > SizeOfFile Then FlatEdit2(i) = vbNullString Else FlatEdit2(i) = ValoresHex(ByteArray(i + inicio + 1)) End If Next i If Hex.Font.Bold = True Then j = DecToHex(inicio) Else j = inicio End If For i = 0 To 15 If Len(j) = 1 Then Label(i) = "00000000000" & j If Len(j) = 2 Then Label(i) = "0000000000" & j If Len(j) = 3 Then Label(i) = "000000000" & j If Len(j) = 4 Then Label(i) = "00000000" & j If Len(j) = 5 Then Label(i) = "0000000" & j If Len(j) = 6 Then Label(i) = "000000" & j If Len(j) = 7 Then Label(i) = "00000" & j If Len(j) = 8 Then Label(i) = "0000" & j If Len(j) = 9 Then Label(i) = "000" & j If Len(j) = 10 Then Label(i) = "00" & j If Hex.Font.Bold = True Then j = HexToDec(j) j = Val(j) + 16 If Hex.Font.Bold = True Then j = DecToHex(j) Next i End Function Recibe como parmetros un Array de Byte que contendr los valores de Archivo y un numero de inicio. Usando un bucle de 0 a 255 va tomando los valores del Array a partir del valor inicio y llenando los FlatEdit con el valor Hexa y los FlatEdit2 con el carcter que se encuentra en el Array ValoresHex correspondiente. Y por ultimo con otro bucle de 0 a 15 rellenamos los Label con la posicin. Siempre comprobando que botn (Hex o Dec) esta seleccionado para colocar los valores en Hexa o en Decimal. Ahora vayamos al botn Buscar. Usando el evento Click: Private Sub Buscar_Click()

On Error Resume Next Dim i As Integer GroupBox1.Enabled = True If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False anterior = 256 End If With CD .DialogTitle = "Elija el Archivo" .Filter = "Todos los Archivos|*.*" .ShowOpen If .FileName = vbNullString Then Exit Sub Ruta.Text = .FileName End With Hex_Click ScrollBar1.Min = 0 ScrollBar1.Value = 0 fno = FreeFile Open CD.FileName For Binary As #fno SizeOfFile = LOF(fno) ReDim ByteArray(1 To SizeOfFile) As Byte Get #fno, , ByteArray Close #fno Total.Caption = SizeOfFile & " bytes" For i = 0 To 9 LabelD(i) = i LabelC(i) = i Next i LabelD(10) = "A" LabelD(11) = "B" LabelD(12) = "C" LabelD(13) = "D" LabelD(14) = "E" LabelD(15) = "F" LabelC(10) = "A" LabelC(11) = "B" LabelC(12) = "C"

LabelC(13) = "D" LabelC(14) = "E" LabelC(15) = "F" TotalPaginas = (SizeOfFile - 256) \ 16 If (sizeroffile - (TotalPaginas * 16)) = 0 Then ScrollBar1.Max = TotalPaginas - 1 Else ScrollBar1.Max = TotalPaginas + 1 End If Mostrar ByteArray, 0 End Sub Habilito el GroupBox. Anterior es una variable que utilizo para guardar el ndice del FlatEdit seleccionado (si es que hay alguno). Por ende si hay alguno seleccionado (anterior<>256) cambio los atributos de color y fuente de dicho FlatEdit. Utilizando el CommonDialog CD busco algn archivo en disco. Si no se elige ninguno salgo sino se coloca la ruta en el FlatEdit Ruta, se inicializan los atributos Value y Min del ScrollBar en 0. Se abre el archivo elegido para tomar la cantidad de Bytes y pasar los valores a un Array. Se calcula un total de pginas (TotalPaginas) a partir de la longitud del archivo y que nos va a servir para darle un valor al atributo Max del ScrollBar. Y por ultimo llamo al Sub Mostrar pasndole el Array con los valores del archivo y como numero de inicio el valor 0. Esta es una breve explicacin de lo que hace. Ustedes despus miren el cdigo con mas paciencia y lo entendern mejor. Cdigo del Botn Guardar: Private Sub Guardar_Click() If Ruta.Text = vbNullString Then Exit Sub If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False anterior = 256 End If fno = FreeFile Open Ruta.Text For Binary As #fno

Put #fno, , ByteArray Close #fno MsgBox "Archivo Guardado Correctamente!", vbInformation, "Aviso" End Sub Nuevamente si no hay ningn archivo salimos del sub. Si hay algn FlatEdit seleccionado le cambio los atributos de color de fondo y fuente. Y sino abro el archivo y meto en Array dentro, con loas cambio que se le han hecho o no. Codigo del Boton GuardarComo: Private Sub GuardarComo_Click() On Error Resume Next If Ruta.Text = vbNullString Then Exit Sub If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False anterior = 256 End If With CD .DialogTitle = "Elija donde desea Guardar el Archivo" .Filter = "Todos los Archivos|*.*" .FileName = "" .ShowSave If .FileName = vbNullString Then Exit Sub End With fno = FreeFile Open CD.FileName For Binary As #fno Put #fno, , ByteArray Close #fno MsgBox "Archivo Guardado Correctamente!", vbInformation, "Aviso" End Sub Para este caso lo nico que cambia del botn anterior es que se elige una nueva ruta y nombre de archivo para guardar el arreglo con los valores.

Para ser un poco mas ordenados vamos a usar el evento KeyPress del FlatEdit ValorBuscado para restringir sus valores de ingreso, en este caso solo nmeros. Private Sub ValorBuscado_KeyPress(KeyAscii As Integer) If (KeyAscii > 47 And KeyAscii < 58) Or (KeyAscii = 8) Then KeyAscii = KeyAscii Else KeyAscii = 0 End If End Sub Codigo del Boton Ir: Private Sub Ir_Click() Dim i As Long, valor As Long If Ruta.Text = vbNullString Then Exit Sub If ValorBuscado.Text = vbNullString Then Exit Sub If CLng(ValorBuscado.Text) < 0 Then Exit Sub If CLng(ValorBuscado.Text) >= SizeOfFile Then Exit Sub If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False End If If CLng(ValorBuscado.Text) <= SizeOfFile - 256 Then If (CLng(ValorBuscado.Text) Mod 16) = 0 Then Mostrar ByteArray, ValorBuscado.Text If CLng(ValorBuscado.Text) <> 0 Then valor = ScrollBar1.Max * CLng(ValorBuscado.Text) / (SizeOfFile - 255) If CLng(ValorBuscado.Text) > 16000 Then ScrollBar1.Value = valor - 1 Else ScrollBar1.Value = valor End If End If FlatEdit(0).BackColor = vbYellow FlatEdit(0).Font.Bold = True FlatEdit2(0).BackColor = vbYellow FlatEdit2(0).Font.Bold = True anterior = 0 Else For i = 1 To 15

If ((CLng(ValorBuscado.Text) - i) Mod 16) = 0 Then Mostrar ByteArray, CLng(ValorBuscado.Text) - i valor = ScrollBar1.Max * (CLng(ValorBuscado.Text) - i) / (SizeOfFile - 256) If CLng(ValorBuscado.Text) > 16000 Then ScrollBar1.Value = valor - 1 Else ScrollBar1.Value = valor End If Exit For End If Next i FlatEdit(i).BackColor = vbYellow FlatEdit(i).Font.Bold = True FlatEdit2(i).BackColor = vbYellow FlatEdit2(i).Font.Bold = True anterior = i End If Else ScrollBar1.Value = SizeOfFile - 256 Mostrar ByteArray, SizeOfFile - 256 valor = CLng(ValorBuscado.Text) - (SizeOfFile - 256) FlatEdit(valor).BackColor = vbYellow FlatEdit(valor).Font.Bold = True FlatEdit2(valor).BackColor = vbYellow FlatEdit2(valor).Font.Bold = True anterior = valor End If If Hex.Font.Bold = True Then Elegido.Caption = DecToHex(ValorBuscado.Text) Else Elegido.Caption = ValorBuscado.Text End If End Sub Aqu si el valor buscado esta entre 0 y el tamao mximo busco, sino salgo. Para mostrar veo las alternativas: Si el numero es mltiplo de 16 llamo al Sub Mostrar con dicho valor, sino busco el numero mas prximo y menor que el buscado que sea mltiplo de 16 para llamar al Sub. Y para hacerlo mas visible resalto el Flatedit de ambas matrices cambindole los atributos BackColor y Bold. Ya nos falta poco y lo terminamos. Ahora vamos a usar el evento MouseDown de los flatedit para resaltar si presionamos sobre uno de ellos: Private Sub FlatEdit_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single)

If Button = 1 Then If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False End If FlatEdit(Index).BackColor = vbYellow FlatEdit(Index).Font.Bold = True FlatEdit2(Index).BackColor = vbYellow FlatEdit2(Index).Font.Bold = True anterior = Index If Hex.Font.Bold = True Then Elegido.Caption = DecToHex(ScrollBar1.Value * 16 + Index) Else Elegido.Caption = ScrollBar1.Value * 16 + Index End If End If End Sub Private Sub FlatEdit2_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, y As Single) If Button = 1 Then If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = flase End If FlatEdit(Index).BackColor = vbYellow FlatEdit(Index).Font.Bold = True FlatEdit2(Index).BackColor = vbYellow FlatEdit2(Index).Font.Bold = True anterior = Index If Hex.Font.Bold = True Then Elegido.Caption = DecToHex(ScrollBar1.Value * 16 + Index) Else Elegido.Caption = ScrollBar1.Value * 16 + Index End If End If End Sub Lo que hago es verificar si hay un FlatEdit seleccionado, si lo hay le cambio el color de fondo y el atributo de negrita como los originales y resalto el nuevo FlatEdit seleccionado.

Ahora utilizare dos eventos del ScrollBar: Change y Scroll. Para relacionar el valor del ScrollBar con lo que se muestra en los FlatEdit. Private Sub ScrollBar1_Change() If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False anterior = 256 End If Mostrar ByteArray, (ScrollBar1.Value * 16) End Sub Private Sub ScrollBar1_Scroll() If anterior <> 256 Then FlatEdit(anterior).BackColor = vbWhite FlatEdit(anterior).Font.Bold = False FlatEdit2(anterior).BackColor = vbWhite FlatEdit2(anterior).Font.Bold = False anterior = 256 End If Mostrar ByteArray, (ScrollBar1.Value * 16) End Sub Para terminar con este Form vamos a hacer uso del evento DblClick de Flatedit y Flatedit2. Que nos va a mostrar un nuevo form para poder cambiar el valor del FlatEdit seleccioando. Private Sub FlatEdit_DblClick(Index As Integer) Hexa.Show Hexa.FlatEdit2.Text = Index Principal.Enabled = False End Sub Private Sub FlatEdit2_DblClick(Index As Integer) Ascii.Show Ascii.FlatEdit2.Text = Index Principal.Enabled = False End Sub Dependiendo de la matriz a la que corresponda el FlatEdit voy a mostrar el form Hexa o Ascii.

(1) (2) (3) (4) (5)

Label1: Cambio el atributo Caption a Ingrese el carcter. FlatEdit1: Sirve para colocar el valor nuevo que se va a cambiar. PushButton1: Atributo Caption = Cambiar. PushButton2: Atributo Caption = Cancelar. FlatEdit2: Va a obtener el ndice de la matriz del form Principal. No ser visible.

Evento Load del Form: Private Sub Form_Load() With Ascii 'POSICION .Top = (Screen.Height - .Height) / 2 .Left = (Screen.Width - .Width) / 2 'MEDIDAS .Height = 1455 .Width = 3240 End With 'VALORES PREDEFINIDOS FlatEdit1.MaxLength = 1 End Sub Posiciono el Form, le cambio las medidas y restrinjo la capacidad del FlatEdit1 a 1. En el evento Unload le ponemos este cdigo para desbloquear el Form Principal al cerrar este. Private Sub Form_Unload(Cancel As Integer) Principal.Enabled = True End Sub El Boton Cancelar solo va a cerrar el Form. Private Sub Cancelar_Click() Unload Me End Sub

Y por ultimo el botn Cambiar: Private Sub Cambiar_Click() On Error Resume Next Dim i As Long, direccion As Long If FlatEdit1.Text = vbNullString Then Exit Sub Principal.FlatEdit2(FlatEdit2.Text) = FlatEdit1.Text If FlatEdit1.Text = "." Then Principal.FlatEdit(FlatEdit2.Text) = "2E" GoTo saltar Else For i = 0 To 255 If FlatEdit1.Text = ValoresHex(i) Then Principal.FlatEdit(FlatEdit2.Text) = DecToHex(i) Exit For End If Next i End If saltar: If Principal.Hex.Font.Bold = True Then direccion = HexToDec(Principal.Elegido.Caption) Else direccion = Principal.Elegido.Caption End If Principal.FlatEdit(FlatEdit2.Text).BackColor = vbRed Principal.FlatEdit2(FlatEdit2.Text).BackColor = vbRed ByteArray(direccion + 1) = HexToDec(Principal.FlatEdit(FlatEdit2.Text).Text) Unload Me End Sub Cambia el valor de las matrices con el nuevo valor y tambin cambia el valor en el Array que contiene el archivo. Y para terminar con el Proyecto el Form Hexa. Es muy parecido a este pero en ves de agregar un valor ascii, lo hace con un valor Hexa.

(1) (2) (3) (4) (5)

Label1: Cambio el atributo Caption a Ingrese el valor en Hexa. FlatEdit1: Sirve para colocar el valor nuevo que se va a cambiar. PushButton1: Atributo Caption = Cambiar. PushButton2: Atributo Caption = Cancelar. FlatEdit2: Va a obtener el ndice de la matriz del form Principal. No ser visible.

Codigo Completo, no lo explico porque es muy parecido al anterior: 'LOAD DEL FORM Private Sub Form_Load() With Hexa 'POSICION .Top = (Screen.Height - .Height) / 2 .Left = (Screen.Width - .Width) / 2 'MEDIDAS .Height = 1455 .Width = 3225 End With 'VALORES PREDEFINIDOS FlatEdit1.MaxLength = 2 End Sub 'CIERRE DEL FORM Private Sub Form_Unload(Cancel As Integer) Principal.Enabled = True End Sub 'BOTON CAMBIAR Private Sub Cambiar_Click() On Error Resume Next Dim direccion As Long If FlatEdit1.Text = vbNullString Then Exit Sub If Len(FlatEdit1.Text) = 1 Then FlatEdit1.Text = "0" & FlatEdit1.Text

Principal.FlatEdit(FlatEdit2.Text).Text = FlatEdit1.Text Principal.FlatEdit2(FlatEdit2.Text).Text = ValoresHex(HexToDec(FlatEdit1.Text)) Principal.FlatEdit(FlatEdit2.Text).BackColor = vbRed Principal.FlatEdit2(FlatEdit2.Text).BackColor = vbRed If Principal.Hex.Font.Bold = True Then direccion = HexToDec(Principal.Elegido.Caption) Else direccion = Principal.Elegido.Caption End If ByteArray(direccion + 1) = HexToDec(Principal.FlatEdit(FlatEdit2.Text).Text) Unload Me End Sub 'BOTON CANCELAR Private Sub Cancelar_Click() Unload Me End Sub 'RESTRICCION DEL TEXBOX Private Sub FlatEdit1_KeyPress(KeyAscii As Integer) If (KeyAscii > 96 And KeyAscii < 105) Then KeyAscii = KeyAscii - 32 If (KeyAscii > 47 And KeyAscii < 58) Or (KeyAscii > 64 And KeyAscii < 71) Or (KeyAscii = 8) Then KeyAscii = KeyAscii Else KeyAscii = 0 End If End Sub Bueno creo no haberme olvidado de nada. Si ven algo mal o que falta solo avsenme y lo corrijo. Espero que les sirva.

Saludos a Todos.

Pdf Hecho por Expermicid.

Ax Team

También podría gustarte