Hallo
für mein programm schreibe ich einen hexviewer, mit dem man sich die ID3Tags anschauen kann.
für jeden hexwert werden jeweils 2 textboxen erzeugt (1x hexwert, 1x asciiwert)
sinn dahinter ist, dass ich bei jeder textbox auf das KeyDown-Event reagieren möchte.
soweit funktioniert auch alles...
NUR...die erstellung dauert sehr lange . bei dem ID3v1Tag geht das ja noch.
bei dem ID3v2Tag z.b. mit gespeicherten bild im tag kommen schon mal ein paar 1000 bytes zusammen.
ich poste mal den code, in der hoffnung das mich jmd in die richtige richtung stubst
für mein programm schreibe ich einen hexviewer, mit dem man sich die ID3Tags anschauen kann.
für jeden hexwert werden jeweils 2 textboxen erzeugt (1x hexwert, 1x asciiwert)
sinn dahinter ist, dass ich bei jeder textbox auf das KeyDown-Event reagieren möchte.
soweit funktioniert auch alles...
NUR...die erstellung dauert sehr lange . bei dem ID3v1Tag geht das ja noch.
bei dem ID3v2Tag z.b. mit gespeicherten bild im tag kommen schon mal ein paar 1000 bytes zusammen.
ich poste mal den code, in der hoffnung das mich jmd in die richtige richtung stubst
VB.NET-Quellcode
- Private Sub HexWork(ByVal sBytes() As Byte,
- lblOffset As Label,
- panel As Panel)
- Dim pos As Integer = 0, offset As Integer = 0
- Dim lineCount As Integer = 0, rowCount As Integer
- Dim p, count, x, y, l As Integer
- Dim nameHindex As Integer = 0, nameAindex As Integer = 0
- Dim ASCII, offsetHex, hex As String
- Dim txt As TextBox
- Do While pos < sBytes.Length - 1
- If pos + 15 <= sBytes.Length Then
- l = 15
- Else
- l = sBytes.Length - 1 - pos
- End If
- count = pos
- rowCount = 0
- For p = 0 To l
- hex = Conversion.Hex(sBytes(count))
- If hex.Length = 1 Then
- hex = "0" & hex
- End If
- txt = New TextBox
- With txt
- .Parent = panel
- .Name = "txtH" & nameHindex.ToString
- .Multiline = True
- .AcceptsTab = True
- .BorderStyle = BorderStyle.None
- .TextAlign = HorizontalAlignment.Center
- .ReadOnly = True
- .BackColor = Color.White
- .Font = txtHex.Font
- .Text = hex
- .Width = 24
- .Height = 16
- x = 88 + (rowCount * 24)
- y = 16 + (lineCount * 16)
- .Location = New Point(x, y)
- AddHandler .KeyDown, AddressOf txt_KeyDown
- End With
- nameHindex += 1
- rowCount += 1
- count += 1
- Next p
- count = pos
- rowCount = 0
- For p = 0 To l
- x = sBytes(count)
- If x = 0 Or x = 1 Or x = 2 Or x = 9 Or x = 10 Or
- x = 13 Or x = 28 Or x = 29 Or x = 30 Or x = 31 Or
- x = 32 Or x = 129 Or x = 141 Or x = 143 Or x = 144 Or
- x = 157 Or x = 160 Then
- ASCII = " "
- Else
- ASCII = Chr(x)
- End If
- txt = New TextBox
- With txt
- .Parent = panel
- .Name = "txtA" & nameAindex.ToString
- .Multiline = True
- .AcceptsTab = True
- .BorderStyle = BorderStyle.None
- .TextAlign = HorizontalAlignment.Center
- .ReadOnly = True
- .BackColor = Color.White
- .Font = txtHex.Font
- .Text = ASCII
- .Width = 16
- .Height = 16
- x = 496 + (rowCount * 16)
- y = 16 + (lineCount * 16)
- .Location = New Point(x, y)
- AddHandler .KeyDown, AddressOf txt_KeyDown
- End With
- nameAindex += 1
- rowCount += 1
- count += 1
- Next p
- Dim lbl As New Label
- With lbl
- .Parent = panel
- .BackColor = Color.White
- .ForeColor = Color.Black
- .BorderStyle = BorderStyle.None
- .TextAlign = ContentAlignment.MiddleCenter
- .Font = lblSep.Font
- .Text = "|"
- .Width = 24
- .Height = 16
- y = 16 + (lineCount * 16)
- .Location = New Point(472, y)
- End With
- offsetHex = Conversion.Hex(offset)
- offsetHex = " " & New String("0"c, 8 - offsetHex.Length) & offsetHex & ":"
- lblOffset.Text &= offsetHex & vbCrLf
- offset += 16
- If pos > 0 Then
- lblOffset.Height = 16 + (lineCount * 16)
- End If
- pos += 16
- lineCount += 1
- Application.DoEvents()
- Loop
- End Sub