# Texteditor



## JackyD (28. Dezember 2004)

Hallo @ all,
Ich habe ein Textfeld mit Multiline=true. Wenn aber jetzt der Text mehr wird als die Länge des Textfeldes möchte ich mit einem seitlich angebrachten Scrollbalken den Inhalt hoch und runter scrollen können.

```
Private Sub cmdoeffnen_Click()
On Error Resume Next
Dim DateiNr As Integer
Dim Temp As String
Dim Name As String

DateiNr = FreeFile
Name = oeffnen.FileName

Open Name For Input As DateiNr

Input #DateiNr, Temp
txtaus.Text = Temp

Close DateiNr
End Sub
```
Wenn ich über den CommonDialog öffnen wird immer nur die erste Zeile des Textes aus der Textdatei ausgelesen und dargestellt. Wie kann ich es machen, dass alle Zeilen ausgelesen werden und im Textfeld ausgegeben werden?

Danke schon mal im Vorraus.


----------



## Shakie (28. Dezember 2004)

Input liest grundsätzlich nur eine Zeile aus. Verwende einfach Get statt Inputt, dann wird der gesamte Inhalt der Datei ausgelesen:


```
Get #DateiNr, , Temp
```
 
Oder du verwendest Input so lange, bis du das Ende der Datei erreicht hast:

```
While Not EOF(DateiNr)
Input #DateiNr, Temp
txtaus.Text = txtaus.Text & Temp
Wend
```


----------



## JackyD (28. Dezember 2004)

Danke.
für welchen Teil wird da was freigelassen?

```
Get #DateiNr, , Temp
```


----------



## JackyD (28. Dezember 2004)

Mit der get Methode lädt er gar nichts aus der Textdatei. Wenn ich wieder auf input ändere lädt es wieder die erste Zeile. Bei open hab ich auch schon alle 4 enstellungen für Input probiert geht aber auch net.


----------



## meilon (28. Dezember 2004)

Hi,
zu dem einlesen kann ich dir nicht helfen, aber mit dem Scrollen!
Wenn du es dir einfach machen willst, benutzt du eine RichTextBox. Aber leider musste ich feststellen, dass dann das Programm nicht auf jedem PC läuft. 
Daher müsstest du selberprüfen, wieviele Zeilen deine Textbox verträgt und abwann du die Scrollbalken aktivierst.

mfg


----------



## Shakie (29. Dezember 2004)

Naja, eigentlich müsste das mit dem Get funktionieren.....Ich hab hier aber noch eine andere Möglichkeit:
	
	
	



```
Dim strDateipfad As String
Dim intNummer As Integer
 
strDateipfad = "D:\Test.txt"
intNummer = FreeFile	
Open strDateipfad For Input As intNummer	 
txtaus.Text = Input(LOF(intNummer), intNummer)		
Close intNummer
```
LOF liefert die Länge einer Datei in Bytes.


----------



## JackyD (31. Dezember 2004)

Danke @ Shakie so gehts jetzt.
Ich möchte noch, damit, wenn man auf einen Menüeintrag klickt, dass dann der php Tag oder das HTML grundgerüst ins Textfeld geschrieben wird. Das hab ich jetzt mal probiert. Allerdings wird es nur ans ende angehängt, ich hätte gern, damit es da eingefügt wird, wo der Focus ist und es wäre schön, wenn das auch gleich formatiert passiert, momentan kommt das ganze HTML grundgerüst in einer Zeile.
Ich habe einfac in eier Prozedur angegeben:

```
txtaus.Text=txtaus:Text + "<?php ?>"
```
&

```
txtaus.Text=txtaus:Text + "<html><head>....</html>"
```


----------



## Shakie (31. Dezember 2004)

Hast du die Eigenschaft "*Multiline*" bei der Textbox auf True gestellt? Das musst du tun damit mehrzeiliger Text überhaupt zugelassen ist.

Das einfügen eines Textes kannst du so realisieren:

```
Dim strEinfügen As String
strEinfügen = "Dieser Text soll eingefügt werden."
'Position ermitteln, an der der Text eingefügt werden soll:
Dim lngPosition As Long
lngPosition = Text1.SelStart
'neuen Text der Textbos zusammenbasteln (=zusätzlichen Text einfügen):
Dim strNeuerText As String
strNeuerText = Mid$(Text1.Text, 1, lngPosition) & strEinfügen & Mid$(Text1.Text, lngPosition + 1)
'neuen Text in der Textbox ausgeben:
Text1.Text = strNeuerText
```
Text1.SelStart gibt die Position des Cursors in der Textbox aus.

Oder du kannst auch gleich alles etwas kompakter realisieren:
	
	
	



```
Dim strEinfügen As String
strEinfügen = "Dieser Text soll eingefügt werden."
 
Text1.Text = Mid$(Text1.Text, 1, Text1.SelStart) & strEinfügen & Mid$(Text1.Text, Text1.SelStart + 1)
```


----------



## JackyD (1. Januar 2005)

Hallo das funktioniert sehr gut. Wie kann ich das formatieren?
Momentan wird alles in einer Zeile ausgegeben, ich hätte es aber gern, wenn es so ausgegeben wird:

```
<html>
<head>
.......
</html>
```


----------



## Julian Maicher (1. Januar 2005)

Mit vbcrlf machst du einen Zeilenumbruch.


----------



## RamonR (1. Januar 2005)

vbnewline tut's auch und ist meiner Meinung nach im Quellcode besser lesbar.


----------



## Operator_Jon (2. Januar 2005)

Chr(13)


----------



## JackyD (2. Januar 2005)

Chr(13) hab ich schon probiert, das hat aber nicht funktioniert. Da wurde in der Textbox nur ein strich, so ähnlich wie der | dargestellt, aber kein umbruch.


----------



## Shakie (2. Januar 2005)

Wie bereits gesagt musst du erst mal die Eigenschaft *Multiline* auf TRUE stellen, hast du das getan?


----------



## Julian Maicher (2. Januar 2005)

vbcrlf ist nicht anderes als *vb* *C*arriage *R*eturn (Chr(13)) *L*ine *F*eed (Chr(10)) - das nur so nebenbei.


----------



## JackyD (2. Januar 2005)

Ja multiline ist auf true. Die anderen beiden gehen vbcrlf und vbNewLine. Wenn ich aber Chr(13) nehme wird nur so ein strich dargestellt aber kein umbruch. Ich habs so eingebunden:

```
..Text" & Chr(13) & "Text....
..Text" & vbcrlf & "Text....
..Text" & vbNewLine & "Text....
```
 
Edit:
Wie kann ich bestimmte Texteingaben farbig darstellen?
Wenn <html> oder </html> eingegeben wird soll es blau dargestellt werden.
Wenn <? oder ?> eingegeben wird soll dies rot dargestellt werden.
In einer TextBox oder benötige ich dazu eine RichTextBox?


----------



## NRFi (4. Januar 2005)

du benötigst tatsächlich eine richtextbox, weil du mit einer normalen textbox nur selektieren, aber nicht formatieren kannst.


----------

