Tekst editor i VB

Tags:    visual-basic
Skrevet af Bruger #1330 @ 18.08.2002
Simpel Guide til at lave en Tekst Editor


Guide til en Text Editor:


Man er måske forundret of Microsoft Word. Men hvorfor. Hvad kan Word som du ikke kan lave, ikke meget or det er nemt at lave. Her er en lille guide til at lave en god solid Text Editor som kan en del.

Lav editoren


Det første du skal bruge er selve Text editoren. Her bruges ”Rich Text Box” fra Microsoft. Dette Komponent indsetter du midt I programmet.
Lav en menu. Som Name skriver du: ”mFil” som caption ”Fil”. Som undermenuer til denne laver du nu 3 knapper. En hvis name bliver ”mFilNy”
of some caption ”Ny”, en hvor name = ”mFilåben” og caption = ”Åben” og
den sidstes name = ”mFilGem” og caption er ”Gem”.
Derefter finder du komponentet Microsoft Common Dialog og indsætter det i programmet.

Nyt Dokument


Koden til at lave et nyt dokument
Private sub mFilNy_click()

’Ser om dokumentet er tomt
if richtextbox.text  = ”” then
’Hvis dokumentet er tomt sker der ingeting.
exit sub


else
’Ellers Spørger programmet om brugeren vil gemme dokumentet ’Gemmer resultatet af spøgsmålet som msg Dim Msg As VbMsgBoxResult, cnt As Long 'sætter et spørgsmålstegn og en ok knap . Msg = msgbox ”Vil du gemmer dokumentet?”, vbQuestion + vbYesNo, _ App.Title)
‘Hvis ja gå til gemfilen If Msg = vbYes Then mFilgem_Click End if
End sub

Tilføjer nu kode til at åbne dokumenter med

Åben Dokumenter

 Private sub mFilåben_click()

’Ser om dokumentet er tomt
if richtextbox.text  = ”” then
’Hvis dokumentet er tomt sker der ingeting.
exit sub

else

’Ellers Spørger programmet om brugeren vil gemme dokumentet
’Gemmer resultatet af spøgsmålet som msg
Dim Msg As VbMsgBoxResult, cnt As Long        
‘sætter et spørgsmålstegn og en ok knap .


Msg = msgbox ”Vil du gemmer dokumentet?”, _ vbQuestion + vbYesNo, App.Title)
‘Hvis ja gå til gemfilen If Msg = vbYes Then mFilgem_Click End if End sub
’Sætter fil filteret for ”åben” Dialog Boxen commondialog.filter = ”Alle understøttede , _ formater|*.txt;*.rtf;*.INI;*.htm|Almindelige Tekst Filer (txt|*.txt|, _ Rich Text Format (rtf)|*.rtf|Ini Filer|*.ini|Htm/Html filer|*.htm”
’Sætter Titlen på dialogen commondialog.dialogtitle = ”Åben fil”
’Åbner ”åben dokument” dialog boxen commondialog.showopen
’Ser om brugeren har åbnet et dokument if commondialog.filename = ”” then ’Hvis brugeren ikke har valgt noget dokument
else
’Ellers åbner programmet dokumentet. Richtextbox1.loadfile commondialog.filename End if
End sub


Gemme Dokumenter


’Koden til at gemme dokumentet
Private sub mFilGem_click()


’Sætter fil filteret for ”åben” Dialog Boxen commondialog.filter = ”Alle understøttede formater|, _ *.txt;*.rtf;*.INI;*.htm|Almindelige Tekst Filer (txt)|*.txt|, _ Rich Text Format (rtf)|*.rtf|Ini Filer|*.ini|Htm/Html filer|*.htm”
’Sætter Titlen på dialogen commondialog.dialogtitle = ”Gem filen”
’Åbner ”Gem” dialog boxen commondialog.showsave
’Hvis dokumentet ikke er et Rich Text Format formateres det rigtigt. (hvis , _ ikke gemmes dokumentet bare some et RTF men hedder eks: TXT)
if commondialog.filterindex = 3 then richtextbox.savefile commondialog.filename
else
richtextbox.savefile commondialog.filename, rtftext end if
end sub


PRINT

Nu har du en simpel tekst editor hvori du kan åbne og gemme dokumenter. Men man skal da også kunne printe dokumenterne ud. Dette gøres ved at lave endnu en knap i menu ”fil” hvis name bliver ”mFilPrint” of caption bliver ”Print”.
’Kode til at printe Dokumenter.


Private sub mFilPrint_click()
’Sætter dialog titlen. Commondialog.dialogtitle = ”Print Dokumentet”
’Viser dialogen commondialog.showprinter
’Printer dokumentet ud RichTextBox1.SelPrint CommonDialog.PrinterDefault, rtfText
End sub


Luk Programmet


Der mangler lige en knap Programmet skal vel også kunne lukkes (ikke kun gennem X et.)
Så du laver en knap i ”fil” menuen hvis name er ”mFilAfslut” og caption = ”Afslut”
Så indsætter du denne kode
Private sub mFilAfslut_click()


’Ser om dokumentet er tomt if richtextbox.text = ”” then ’Hvis dokumentet er tomt afluttes programmet. end
else ’Ellers Spørger programmet om brugeren vil gemme dokumentet ’Gemmer resultatet af spøgsmålet som msg Dim Msg As VbMsgBoxResult, cnt As Long ‘sætter et spørgsmålstegn og en ok knap . Msg = msgbox ”Vil du gemmer dokumentet?”, vbQuestion + vbYesNo, App.Title)
‘Hvis ja gå til gemfilen If Msg = vbYes Then mFilgem_Click end End if
end sub

Det samme skal vel også ske når brugeren trykker på Xet oppe i hjørnet. For at gøre dette indsættes denne kode.
Private sub form _Terminate()
‘Går til kommandoen fra mFilAfslut i stedet for at skrive koden igen.
mFilAfslut_Click


end sub

Resize

For at brugeren kan ændre størrelsen på programmet uden at Rich Text Box´en bliver en forkert størelse skal denne kode indsættes

Private Sub Form_Resize()
Dim vbresize As FormWindowStateConstants
     

‘Hvis programmet gøres en anden størelse (end maksimeret) If WindowState = vbresize Then ’Sætter breden på Rich Text Box RichTextBox.Width = Me.Width - 100 ‘Sætter højden på Rich Text Box RichTextBox.Height = Me.Height - 1770 End If
‘Hvis programmet maksimeres If WindowState = vbMaximized Then ‘Sætter breden RichTextBox.Width = Me.Width – 100 ’Sætter højden RichTextBox.Height = Me.Height - 1800 End If
End sub

Andre Funktioner


Funktioner som Skrift type. Skrift Farve, Kopier, Flyt, Sæt Ind, Slet osv er også funktioner some ere et must for en editor.

Kopier. Flyt og Sætind

For at lave dette Laver du nu en menu hvis name = ”mEdit” og Caption = ”Edit”. I denne menu laver du nu 3 knapper. Du kalder dem hendholdsvis ”mEditKopier”, ”mEditFlyt” og ”mEditsætind” som deres Name og som Caption ”Kopier”, ”Flyt” og ”Sæt Ind”. Koderne for disse er:

Koden for Kopier
Private sub mEditKopier_click()
‘Sender teksten til “Clipboarded”
Clipboard.SetText RichTextBox.SelText
End sub

Koden for at Flytte

Private sub mEditFlyt_click()
‘Sender teksten til “Clipboarded”
Clipboard.settext Richtextbox.seltext
‘Fjerner den valgte tekst fra Rich Text box
richtextbox.seltext = ””
End sub


’Koden for ”Sæt Ind”
Private sub mEditSætind_click()
’Sætter enden den valgte tekst (hvis nogen) eller teksten efter ”cursoren” til hvad end der er kopieret
RichTextBox1.SelText = Clipboard.GetText
End sub



Farver og Skriftyper

For at skifte farve laver du nu en ny menu som du kalder ”mFormat” og caption = ”Format”. Her i laver du nu 2 knapper. Som navne kalder du dem ”mFormatSkrift” og ”mFormatFarve”. Som captio kalder du dem ”Skrift Type” og ”Skrift Farve”. Koderne er som følger:
Private sub mFormatSkrift_click()
’Sætter dialog titlen til ”Vælg Skrifttype”
Commondialog.dialogtitle = ”Vælg Skrifttype”
’Viser Dialogen
Commondialog.showfont
’Sætter Rich Text Box´en til at bruge den valgte skrift type
richtextbox.font commondialog.fontname
end sub


Private Sub mFormatfarve_click()
‘Sætter dialog titlen til ”Vælg Farve”
commondialog.dialogtitle  = ”Vælg Farve”
’viser dialogen
commondialog.showcolor
’Sætter Rich Text Box´en til at bruge den valgte skrift farve
RichTextBox.SelColor = CommonDialog.Color
End sub



Undo & Redo


Alle Editorer skal da også have en Undo/Redo Feature. Denne laves ved at lave 2 knapper hvis name = ”mEditUndo” og ”mEditRedo” som Caption = ”Undo” & ”Redo”. Disse to knapper skal i ”Edit” menuen. For at disse koder virker skal disse linier skrives i ”Option Explicit”
'Disse er variablerne for Undo & Redo
Option Explicit
Dim gblnIgnoreChange As Boolean
Dim gintIndex As Integer
Dim gstrStack(1000) As String



’Selve koderne for undo/redo
Private Sub mEditredo_Click()
    gblnIgnoreChange = True
    gintIndex = gintIndex + 1
    On Error Resume Next
    RichTextBox.TextRTF = gstrStack(gintIndex)
    gblnIgnoreChange = False
End Sub



Private Sub mEditundo_Click()
    ‘Hvis index = 0, Så skal den ikke “undoe” mere
    If gintIndex = 0 Then Exit Sub
    
    gblnIgnoreChange = True
    gintIndex = gintIndex - 1
    RichTextBox.TextRTF = gstrStack(gintIndex)
    gblnIgnoreChange = False
End Sub



Statusbar


I bunden af editoren skal der vel også være en ”Status Bar” Denne laves ved at vælge den og indsætte den i programmet. Så Trykker du på ”Custom” (I ”properties” menuen)
Vælg Panels for at indsætte ”Punkter”. Du kan lave ”normale” Tekst punkter men du kan også lave ”punkter” der viser specielle ting som Dato, Klokken, om specielle knapper er trykket på. Når denne menu er lavet skal der ændres lidt på Private sub form_resize()

Private Sub Form_Resize()
      Dim vbresize As FormWindowStateConstants


‘Hvis programmet gøres en anden størelse (end maksimeret) If WindowState = vbresize Then ’Sætter breden på Rich Text Box RichTextBox.Width = Me.Width - 100 ‘Sætter højden på Rich Text Box. Og sørger for at rich text box ikke går ned over 'din Statusbar RichTextBox.Height = (Me.Height + statusbar.height )- 1770 End If
‘Hvis programmet maksimeres If WindowState = vbMaximized Then ‘Sætter breden RichTextBox.Width = Me.Width – 100 ’Sætter højden RichTextBox.Height = Me.Height - 1800 End If End sub


Afslutning

Dette er så slut på denne Guide. Håber I/du kan bruge den



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (13)

User
Bruger #4089 @ 18.06.03 14:37
Er der nogle der har fået det her til at virke ? Den ser ellers godt nok ud...
User
Bruger #1927 @ 07.07.03 15:12
God Artikel. Meen...Det med statusbaren hvor man skal indsætte en anden kode i resize proceduren når man har indsat en statusbar, det kunne jeg gøre med 2 linjers kode. Nemlig:

txtEdit.Width = Me.Width - 100
txtEdit.Height = Me.Height - 1050

Med Venlig Hilsen
Morten Torndahl Pedersen
User
Bruger #4220 @ 18.07.03 20:00
hmm ... ville lige spørge hvor eller hvad Option Explicit er ... en der kan svare mig ... ? ... gerne lige nu ... vil ikke vente så længe :D På forhånd tak...!
User
Bruger #4220 @ 18.07.03 20:07
hmm ... ville lige spørge hvor eller hvad Option Explicit er ... en der kan svare mig ... ? ... gerne lige nu ... vil ikke vente så længe :D På forhånd tak...!
User
Bruger #4416 @ 08.09.03 22:11
fed artikel men..
der er en fejl i
Msg = msgbox ”Vil du gemmer dokumentet?”, vbQuestion + vbYesNo, _ App.Title)

jeg har prøvet at rette den men det virker ikk!
nogen som ved hvad der er galt??
User
Bruger #1330 @ 02.10.03 13:19
Greger, well... er c/p fra programmet som jeg selv engang lavede.. & der virkede det..
Du kan evt. downloade programmet & source her: http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=36807&lngWId=1. dog er der vist lidt ændringer i mellem de 2 sources, da den på psc nok er lidt nyere.
User
Bruger #4862 @ 26.01.04 05:20
jeg kan ikke finde Rich Text Box ... hvor er den?
User
Bruger #4862 @ 26.01.04 05:21
--sorry har fundet den
User
Bruger #6263 @ 14.09.04 23:13
hvor er rich text box
User
Bruger #65 @ 29.12.04 18:58
(Jens.I) og andre

option explicit, for tæller visual basic og desn compiller eller fortolker afhængig hvad man har valgt, at alle variable skal være deklarert før brug.

-Thomas
User
Bruger #6130 @ 27.03.05 21:05
if richtextbox.text = ”” then
’Hvis dokumentet er tomt sker der ingeting.
exit sub

Den her kode kommer når man skal åbne.
Så hvis man ingenting har skrevet popper den ikke boxen op.
User
Bruger #702 @ 31.03.06 15:04
God artikel med mange af grund ting gem, åben osv..
User
Bruger #10691 @ 16.10.06 18:12
Nu vil jeg ikke klare men lidt for mange fejl
Du skal være logget ind for at skrive en kommentar.
t