El proyecto muestra:
* dos TableView, que representan el área de memoria reservada en el que insertar a uno más valores (tipo Byte) y el número de índice de cada celda de la memoria reservada. Cada celda del TableView representa una celda de la memoria reservada. Arriba es indicado, como ya dije, el número de índice por cada celda de memoria.
* un TextArea que muestra el consiguiente código que debería ser escrito para conseguir la cantidad elegida de memoria reservada y los valores que se quiere escribir.
Al inicio será solicitada la cantidad de memoria, de 1 a 16, que debe ser reservada.
Para insertar los valores de tipo Byte, hará falta hacer clic en una celda, escribir por lo tanto el valor de tipo Byte, de 0 a255, y en fin presioar la tecla "Enter" del teclado.
Es posible escribir de nuevo un valor en una celda, que ya haya sido valorizada.
Private tv As TableView
Private ta As TextArea
Private chd As String
Private primus As Boolean
Private inx As Short = -1
Public Sub Form_Open()
Dim b As Byte
Dim index As TableView
Do
b = Val(InputBox("Elige la cantidad de memoria que debe ser reservada<BR>(min 1, max 16):", Null, "8"))
Loop Until (b > 0) And (b < 17)
With index = New TableView(Me)
.X = 20
.Y = 40
.W = 500
.H = 20
.Rows.Count = 1
.Rows.Height = index.H
.Columns.Count = b
.ScrollBar = 0
End With
For b = 0 To index.Columns.Count - 1
With index
.Columns.W = .W \ .Columns.Count
.Columns[b].Alignment = Align.Center
index[0, b].Text = CStr(b)
End With
Next
With tv = New TableView(Me) As "TableView"
.X = 20
.Y = index.Y + index.H + 5
.W = 500
.H = 50
.Rows.Count = 1
.Rows.Height = tv.H
.Columns.Count = b
.ScrollBar = 0
End With
For b = 0 To tv.Columns.Count - 1
With tv
.Columns.W = .W \ .Columns.Count
.Columns[b].Alignment = Align.Center
tv[0, b].Text = "0"
End With
Next
ImpostaTextArea(b)
primus = True
End
Public Sub TableView_Click()
tv.Edit
End
Public Sub TableView_Save(riga As Integer, col As Integer, valore As String)
Dim sk As String
If (valore = Null) Or (Len(valore) > 3) Or (Val(valore) > 255) Then Return
If tv[0, tv.Column].Text = valore Then Return
If tv.Columns.Count > 1 Then
If (col > 0) And (tv.Column <> inx + 1) Then sk = "\n\n Seek #st, " & CStr(col)
If (col = 0) And (primus = False) Then sk = "\n\n Seek #st, " & CStr(col)
Endif
tv[riga, col].Text = valore
With ta
.Text = Left(.Text, Len(.Text) - (Len(chd)))
.Text &= sk & "\n Write #st, " & valore & " As Byte" & chd
End With
sk = Null
primus = False
inx = tv.Column
End
Private Procedure ImpostaTextArea(n As Byte)
chd = "\n\n st.Close\n\n ......\n ......\n\n Free(p)"
With ta = New TextArea(Me)
.X = 20
.Y = tv.Y + tv.H + 40
.W = tv.W
.H = 300
.Text = "Dim p As Pointer\nDim st As Stream\n\n" &
" p = Alloc(SizeOf(gb.byte), " & CStr(n) & ")\n\n" &
" st = Memory p For Write" & chd
End With
End
Private ta As TextArea
Private chd As String
Private primus As Boolean
Private inx As Short = -1
Public Sub Form_Open()
Dim b As Byte
Dim index As TableView
Do
b = Val(InputBox("Elige la cantidad de memoria que debe ser reservada<BR>(min 1, max 16):", Null, "8"))
Loop Until (b > 0) And (b < 17)
With index = New TableView(Me)
.X = 20
.Y = 40
.W = 500
.H = 20
.Rows.Count = 1
.Rows.Height = index.H
.Columns.Count = b
.ScrollBar = 0
End With
For b = 0 To index.Columns.Count - 1
With index
.Columns.W = .W \ .Columns.Count
.Columns[b].Alignment = Align.Center
index[0, b].Text = CStr(b)
End With
Next
With tv = New TableView(Me) As "TableView"
.X = 20
.Y = index.Y + index.H + 5
.W = 500
.H = 50
.Rows.Count = 1
.Rows.Height = tv.H
.Columns.Count = b
.ScrollBar = 0
End With
For b = 0 To tv.Columns.Count - 1
With tv
.Columns.W = .W \ .Columns.Count
.Columns[b].Alignment = Align.Center
tv[0, b].Text = "0"
End With
Next
ImpostaTextArea(b)
primus = True
End
Public Sub TableView_Click()
tv.Edit
End
Public Sub TableView_Save(riga As Integer, col As Integer, valore As String)
Dim sk As String
If (valore = Null) Or (Len(valore) > 3) Or (Val(valore) > 255) Then Return
If tv[0, tv.Column].Text = valore Then Return
If tv.Columns.Count > 1 Then
If (col > 0) And (tv.Column <> inx + 1) Then sk = "\n\n Seek #st, " & CStr(col)
If (col = 0) And (primus = False) Then sk = "\n\n Seek #st, " & CStr(col)
Endif
tv[riga, col].Text = valore
With ta
.Text = Left(.Text, Len(.Text) - (Len(chd)))
.Text &= sk & "\n Write #st, " & valore & " As Byte" & chd
End With
sk = Null
primus = False
inx = tv.Column
End
Private Procedure ImpostaTextArea(n As Byte)
chd = "\n\n st.Close\n\n ......\n ......\n\n Free(p)"
With ta = New TextArea(Me)
.X = 20
.Y = tv.Y + tv.H + 40
.W = tv.W
.H = 300
.Text = "Dim p As Pointer\nDim st As Stream\n\n" &
" p = Alloc(SizeOf(gb.byte), " & CStr(n) & ")\n\n" &
" st = Memory p For Write" & chd
End With
End