habe mal wieder ein kleines Problem...
Ich habe mir mal quick and dirty einen kleinen Hex-Viewer geschrieben. Ich will damit nur kleine Dateien (<10KB) betrachten. Irgendwelche Funktionen wie kopieren oder bearbeiten des Inhaltes sind nicht vorgesehen. Das öffnen und darstellen klappt soweit ganz gut. Das einzige, was mich noch stört ist die ASCII-Ansicht. Gibt es eine Möglichkeit, dass jedes Zeichen eine feste Breite bekommt? Ich habe mal 2 Screenshots von meinem Hex Viewer und einen richtigen Hex-Editor gemacht. Ich denke so kann man die Unterschiede am besten sehen. Ich bin mir nicht sicher ob ich einfach nur eine bestimmte Schriftart brauche.
Mein Tool:

richtiger Hex-Editor:

Code: Alles auswählen
; Achtung: quick and dirty Code ;)
DateiName$ = OpenFileRequester("Datei wählen", StandardDatei$, Pattern$, PatternPosition)
Dateigroesse.q = FileSize(DateiName$)
Datei = ReadFile(#PB_Any, DateiName$)
If Datei = 0
End
EndIf
OpenWindow(0, 0, 0, 700, 525, "irgend so ein Hex-Kram", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 10, 10, 680, 505, "Offset", 80, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection| #PB_ListIcon_GridLines)
For x = 1 To 16 Step 1
AddGadgetColumn(1, x, Hex(x-1), 28)
Next
AddGadgetColumn(1, 17, "ASCII", 120)
For x = 0 To Dateigroesse Step 16
AddGadgetItem(1, -1, RSet(Hex(x), 6, "0"))
Next
X_Pos=1
Y_Pos=0
While Eof(Datei) = 0
If X_Pos > 16
X_Pos = 1
Y_Pos + 1
Text$=""
Text2$=""
EndIf
SetGadgetItemText(1, Y_Pos, RSet(Hex(ReadAsciiCharacter(Datei)), 2, "0"), X_Pos)
Text$= GetGadgetItemText(1, Y_Pos, X_Pos)
Wert= Val("$"+Text$)
Text2$= Text2$ + Chr(Wert)
SetGadgetItemText(1, Y_Pos, Text2$, 17)
X_Pos + 1
Wend
Center.LV_COLUMN\mask=#LVCF_FMT
Center\fmt=#LVCFMT_RIGHT
SendMessage_(GadgetID(1), #LVM_SETCOLUMN,0,@Center)
SendMessage_(SendMessage_(GadgetID(1),#LVM_GETHEADER,0,0),#WM_SETFONT,LoadFont(0,"",9,#PB_Font_Bold),1)
SetGadgetItemColor(1, -1, #PB_Gadget_BackColor, $DDDDDD, 0)
For x = 1 To 16 Step 1
SetGadgetItemColor(1, -1, #PB_Gadget_FrontColor, $FF0000, x)
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CloseFile(Datei)
lg
SBond
