19. oktober 2000 - 21:14Der er
26 kommentarer og 1 løsning
HTMLFormating
Er der en ekspert der kan hjælpe mig med HTMLFormating, mit script virker (Fint) men når jeg har lavet 50-60 linjer og vil indtaste eks: i linje 25 springer den ned i bunden af skrivefæltet hvor ungår jeg det.
Dim color Private Sub main_Click() Dim s As String s = LCase(RichTextBox1.Text) color = &HFF0000 Call Replace(s, \"<html>\") Call Replace(s, \"</html>\") Call Replace(s, \"<br>\") Call Replace(s, \"</br>\") Call Replace(s, \"<i>\") Call Replace(s, \"</i>\") Call Replace(s, \"<u>\") Call Replace(s, \"</u>\") Call Replace(s, \"<b>\") Call Replace(s, \"</b>\") Call Replace(s, \"<center>\") Call Replace(s, \"</center>\") Call Replace(s, \"/\") Call Replace(s, \"<head>\") Call Replace(s, \"</head>\") Call Replace(s, \"<body>\") Call Replace(s, \"</body>\") Call Replace(s, \"<a href=\") Call Replace(s, \"</a>\") color = &HC0& Call Replace(s, \"<title>\") Call Replace(s, \"</title>\") Call Replace(s, \"<a href\") Call Replace(s, \"</a>\") Call Replace(s, \"color\") Call Replace(s, \"font\") Call Replace(s, \"width\") Call Replace(s, \"height\") Call Replace(s, \"img\") Call Replace(s, \"=\") End Sub
Sub Replace(sSource As String, ByVal sSearch As String) Call ReplaceAux(1, sSource, sSearch) End Sub
Sub ReplaceAux(lPos As Long, sSource As String, ByVal sSearch As String) lPos = InStr(lPos, sSource, sSearch) If lPos <> 0 Then Call ChangeFormat(lPos, Len(sSearch)) lPos = lPos + 1 Call ReplaceAux(lPos, sSource, sSearch) End If End Sub
Sub ChangeFormat(ByVal lPos As Long, ByVal lLength As Long) RichTextBox1.SelStart = lPos - 1 RichTextBox1.SelLength = lLength RichTextBox1.SelColor = color End Sub
Jeg forstår dit problem sådan at du har to Richtextboxe, editerer du i midten af en text i den ene, havner den i slutningen af den anden box? Er det korekt.
Den smarte: Du mangler en form for \"linjetæller\", så den altid ved hvor den skal sætte ændringerne ind, hvis den ikke ved hvor ændringerne skal være bliver de tilført til sidst.
Den langsomme: At du opdaterer hele boksen igen. Så du starter med at slette den richbox som har oversat koden for dig. og fylder den med den nye kode.
sjh: WinME har lige \"slettet\" alle mine partioner. Så jeg har ca. 2 dage fixet det op igen... med Powerquest Lost and Found !!! (cool stuff)...
Jeg har lige en stor rodemappe (et drev), og jeg har svært ved at finde rundt i den (det er ca. 4 partioner der er sat i rodedrevet, så jeg skal lige finde ud af det med farver...) det bliver nok til i morgen, siden jeg har noget andet at lave...
denne script kan: finde <> og </> og farve dem... ;)
Jeg har fået lavet et nyt script som jeg synes virker beder, hvor den ikke springer ned i bunden af skrivefæltet, det var RichTextBox1.Visible = False og True der skulle til, og så bruger det kun en RichTextBox.
Men, som powell skræv \"Den langsomme: At du opdaterer hele boksen igen\"
\'----------- NytScript ----------- Dim TextColor Dim HtmlColor Dim GåseColor
tag_closeA = 1: tag_closeB = 1 Do \'------------------------------ HtmlColor ------------------------------ tag_openA = InStr(tag_closeA, .Text, \"<\") If tag_openA = 0 Then Exit Do tag_closeA = InStr(tag_openA, .Text, \">\") If tag_openA = 0 Then tag_closeA = 0
.SelStart = tag_openA - 1 .SelLength = tag_closeA - tag_openA + 1 .SelColor = HtmlColor .SelBold = 1 Loop \'------------------------------ HtmlColor ------------------------------ Do \'------------------------------ GåseColor ------------------------------ tag_openB = InStr(tag_closeB, .Text, \"=\" & Chr(34)) If tag_openB = 0 Then Exit Do tag_closeB = InStr(tag_openB + 2, .Text, Chr(34)) If tag_openB = 0 Then tag_closeB = 0
.SelStart = tag_openB .SelLength = tag_closeB - tag_openB .SelColor = GåseColor: .SelBold = 0 Loop \'------------------------------ GåseColor ------------------------------ .Visible = True .SelStart = Getselstart .SetFocus End With End Sub Private Sub Form_Load() TextColor = 0 HtmlColor = &H800000 GåseColor = &HC00000 End Sub
Hvis man kunne lave et søge script som søger tilbage fra SelStart til den første \"<html tag>\" og opdater den stump når man trykker en tast ville det nok værer Nummer 1.
Her tæller den linjer, men hvordan man for markøren til at stå i en bestemt linje???
\'--- (999999) er max linjetæller *2 (hvis der står (10) vil den kun tælle 5 linje) --- Private Sub RichTextBox1_Change() Text1.Text = RichTextBox1.GetLineFromChar(999999) End Sub
powell: Jeg fant en tæller i melem mine script, den kan hjælpe dig og mig med at komme vider.
Script:
\'--- Intast i Form --- \' (1) TextBox \' (1) RichTextBox \'---------------------
Private Sub RichTextBox1_Click() Call LinePos(RichTextBox1, Text1) End Sub
Private Sub RichTextBox1_KeyDown(KeyCode As Integer, Shift As Integer) Call LinePos(RichTextBox1, Text1) End Sub
Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer) Call LinePos(RichTextBox1, Text1) End Sub \'--- Intast i Form ---
\'--- Intast i Module ---
Private Declare Function SendMessageLong Lib \"USER32\" Alias _ \"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Long) As Long
Private Declare Function SendMessageByRef Lib \"USER32\" Alias \"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, wParam As Long, lParam As Any) As Long Private Declare Function SendMessageByLong Lib \"USER32\" Alias \"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessageLong Lib \"USER32\" Alias _ \"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Long) As Long
Private Declare Function SendMessageByRef Lib \"USER32\" Alias \"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, wParam As Long, lParam As Any) As Long Private Declare Function SendMessageByLong Lib \"USER32\" Alias \"SendMessageA\" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
En anden løsning kunne være at du smed din email. Og lukkede dette spørgsmål, så hvis vbghost eller jeg havde et svar kunne vi maile det til dig, så kunne du altid derefter åbne et nyt spørgsmål!
Nu har jeg \"leget\" lidt med forskellige modeler. Der findes forskellige muligheder for at tælle sig frem til et bestemt punkt.
1. At man kaster alle linierne over i en database. (den nemme og forholdsvis hurtigt) 2. At man har en \"usynlig\" listefelt, som alle linierne kastes ned i. (den er en anelse sværere, men også en løsning) 3. At man sætter et tegn i slutningen af hver skrevet linje og derefter et nummer. (Dette er den dumme, men kald den også, jeg-gider-ikke-sætte-mig-ind-i-andre-løsninger-løsningen)
<powell/vbghost/andre> hvis i finder et svar på mit spørgsmål, åbne jeg det igen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.