49.1 Otevření existujícího dokumentu v MDI
49.2 Teoretický rozbor problému funkcí vpřed a zpět
49.3 Tvorba třídy
49.4 Využití třídy vytváření objektů paměti
49.5 Domácí úkol
49.6 V další lekci
49.1 Otevření existujícího dokumentu v MDI
Kód pro otevření nového dokumentu v MDI je velice jednoduchý:
Private Sub mnope_Click()
On Error GoTo konec
Dim strCelyText As String
Dim strRadekTextu As String
Dim path As String
With MainForm.CommonDialog1 'výběr dokumentu
.CancelError = True
.Filter = "Textové soubory *.txt|*.txt; Vše *.*|*.*"
.ShowOpen
path = .FileName
Open path For Input As #1
Do Until EOF(1)
Line Input #1, RadekTextu
strCelyText = strCelyText & RadekTextu & Chr(13) & Chr(10)
Loop
Close #1
End With
Set objDoc = New Form1 'vytvoření nového fromuláře
objDoc.Caption = "Soubor: " & path
objDoc.txtMain.Text = strCelyText
objDoc.Show
Exit Sub
konec: 'oprava chyb
If Err.Number = 32755 Then
MsgBox "Nebyl vybrán soubor", vbInformation, "Chyba:"
Else:
MsgBox "Nastala chyba při otevírání dokumentu" & path, vbCritical, "Chyba:"
End If
End Sub
Bloky jsou popsány v komentářích a jejich funkce by měla být zřejmá. Pomocí commondialogu je vybrán dokument, ten je zpracován běžným způsobem, poté se vytvoří nový formulář do nějž je vložen text
49.2 Teoretický rozbor problému funkcí vpřed a zpět
Takže o co nám zde vlastně jde? Jde o to, vytvořit paměť, která příliš nezdržuje program a je schopna pojmout určité množství informací. Paměť bude typu zásobník. Při každé změně se do paměti musí uložit data, a to taková, jaká v objektu byla před tím, než se změna zapsala. My tedy tuto změnu zaznamenáme vždy poté, co se nějaká změna stane (budou to data zaznamenaná před změnou, co bude následovat). Vhodný typ paměti je paměť kruhová. Když tedy do paměti budeme vkládat více dat než na kolik je, data prvně vložená se smažou. A tedy o ně příjdeme. Tutéž paměť jen lehce upravenou použijeme pro funkci Vpřed. S tím rozdílem že do paměti této funkce ze data budou zapisovat jen když použijeme funkci zpět.
49.3 Tvorba třídy
Tvorba třídy tedy může vypadat podobně jako zde.
Dim strData(128) As String 'deklarace proměnných
Dim bytPointer As Byte
Dim strLastData As String
Public Function StrSetData(Data As String) As String 'vložení proměnné
strData(bytPointer) = Data
bytPointer = bytPointer + 1
If bytPointer = 128 Then bytPointer = 0
End Function
Public Function StrGetData() As String 'čtení proměnné
If bytPointer = 0 Then bytPointer = 128
bytPointer = bytPointer - 1
If strData(bytPointer) <> "" Then
StrGetData = strData(bytPointer)
strLastData = strData(bytPointer)
Else
StrGetData = strLastData
End If
strData(bytPointer) = ""
End Function
Kód si samozřejmě můžete vylepšit a upravit podle sebe. Tento kód jedno vylepšení potřebuje a je jen na vás, zjistit jaké.
49.4 Využití třídy vytváření objektů paměti
Teď už jde jen o to objekt si vytvořit a vědět, kdy ho zavolat. Já to mám momentálně řešené tako:
Dim PathS As String
Dim objZ As Object
Dim objV As Object
Private Sub Form_Load()
Set frmLastShow = Me
Set objZ = New clsZasobnik
Set objV = New clsZasobnik
End Sub
Public Function Zpet() As String
Call objV.StrSetData(txtMain.text)
txtMain.text = objZ.StrGetData
txtMain.text = objZ.StrGetData
txtMain.SelStart = Len(txtMain.text)
End Function
Public Function Vpred() As String
txtMain.text = objV.StrGetData
txtMain.SelStart = Len(txtMain.text)
End Function
Private Sub txtMain_change()
Call objZ.StrSetData(txtMain.text)
End Sub
Zde jsou spíše výjimečně použity funkce, jejich obsah jinak můžete dát do přímého volání pomocí menu formuláře.
49.5 Domácí úkol
Za domácí úkol je obohatit minulý domácí úkol o tyto funkce.
49.6 V další lekci
Podíváme se nejspíš na tvorbu ActiveX a nebo budeme pokrčovat v MDI.