Kαλησπερα.
Το πρόγραμμα το εχω προχωρησει αρκετα. Εχουν μεινει καποια μικροπροβληματα που νομιζω οτι θα ειναι θεμα μιας λεπτομεριες στον κωδικα. Σε αυτα λοιπον θα ηθελα λιγη βοήθεια.
Με αυτον τον κωδικα εισαγω χαρακτηρες στο rtb:
Private Sub insertText(ByVal txt As String)
With rtbDoc
Dim start As Integer = .SelectionStart
.Text = .Text.Substring(0, start) + txt + .Text.Substring(start)
.SelectionStart = start + 1
.ScrollToCaret()
.Focus()
End With
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Select Case True
Case CheckBox1.Checked = True
If System.Drawing.ColorTranslator.ToOle(Button24.BackColor) = &HFFFF Then
TextBox1.Text = TextBox1.Text & "α"
Else
TextBox1.Text = TextBox1.Text & "Α"
End If
TextBox1.SelectionStart = TextBox1.Text.Length
TextBox1.ScrollToCaret()
TextBox1.Focus()
Case CheckBox1.Checked = False
If System.Drawing.ColorTranslator.ToOle(Button24.BackColor) = &HFFFF Then
insertText("α")
Else
insertText("Α")
End If
End Select
End Sub
Με αυτον τον κωδικα το "α" ή το "Α" εισαγεται στο σημειο που ειναι ο κερσορας.
Για το backspace χρησιμοποιω αυτο:
If CheckBox1.Checked = False Then
Dim L As Integer = Len(rtbDoc.Text) - 1 'Σβησιμο
If L < 0 Then Return
rtbDoc.Text = Strings.Left(rtbDoc.Text, L)
rtbDoc.SelectionStart = rtbDoc.Text.Length
rtbDoc.ScrollToCaret()
rtbDoc.Focus()
Else
Dim L As Integer = Len(TextBox1.Text) - 1 'Σβησιμο
If L < 0 Then Return
TextBox1.Text = Strings.Left(TextBox1.Text, L)
TextBox1.SelectionStart = TextBox1.Text.Length
TextBox1.ScrollToCaret()
TextBox1.Focus()
End If
Δεν σβηνει ομως τον χαρακτηρα αριστερα απο τον κερσορα, σβηνει τον τελευταιο χαρακτηρα του κειμενου. Πως το φτιαχνω αυτο;
Για το enter χρησιμοποιω αυτο: insertText(vbCrLf). Δουλευει μια χαρα αλλα, αν εχω μια λεξη στοιχησμενη στο κεντρο ας πουμε, βαλω τον κερσορα στην μεση της λεξης και πατησω το enter, δουλευει αλλα η στοιχηση παει αριστερα. Πως διορθωνεται αυτο;
Για την στοιχηση χρησιμοποιουσα τον κωδικα που προτεινεις. Αυτος ομως αλλαζει το font σε μια γραμμη, ακομα και αν δεν ειναι μαρκαρισμενη. Αυτο ειναι λαθος για την επεξεργασια του κειμενου. Πρεπει το κουμπι να ανταποκρινεται μονο αν υπαρχει μαρκαρισμενο κειμενο ή αν δεν υπαρχει ότι γραφτεί μετα να εχει την αναλογη στοιχηση. Τωρα χρησιμοποιω αυτο:
If rtbDoc.SelectedText > "" Then
rtbDoc.SelectionAlignment = HorizontalAlignment.Right
End If
rtbDoc.SelectionStart = rtbDoc.Text.Length
rtbDoc.ScrollToCaret()
rtbDoc.Focus()
Αλλαζει την στοιχηση στο μαρκαρισμενο κειμενο αλλα δεν αλλαζει την στοιχηση αν το rtb ειναι κενο. Λογικα θα ειναι κατι απλο και αυτο...
Τέλος, το font και το colorfont. Αυτος ειναι ο κωδικας:
Private Sub Button15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button15.Click, Button122.Click, Button101.Click
If Not rtbDoc.SelectionFont Is Nothing Then
FontDialog1.Font = rtbDoc.SelectionFont
Else
FontDialog1.Font = rtbDoc.Font
End If
FontDialog1.ShowApply = True
If FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
rtbDoc.SelectionFont = FontDialog1.Font
End If
rtbDoc.SelectionStart = rtbDoc.Text.Length
rtbDoc.ScrollToCaret()
rtbDoc.Focus()
End Sub
Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click, Button123.Click, Button102.Click
ColorDialog1.Color = rtbDoc.ForeColor
If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
rtbDoc.SelectionColor = ColorDialog1.Color
End If
rtbDoc.SelectionStart = rtbDoc.Text.Length
rtbDoc.ScrollToCaret()
rtbDoc.Focus()
End Sub
Το προβλημα ειναι ιδιο με το font. Αν δεν υπαρχει μαρκαρισμενο κειμενο ή το rtb ειναι κενο δεν δουλευει, δηλαδη αν γραψω ενα γραμμα μετα απο την αλλαγη του font το γραμμα δεν θα εχει το νεο font αλλα το παλιο.
Ευχαριστώ.
Γιωργος - Κορυδαλλος