Avatar billede martinfrost Nybegynder
27. september 2001 - 09:55 Der er 6 kommentarer og
1 løsning

Mange farver i rich vha kode

Hvorfor virker dette kun en gang??!!

___________________________

Option Explicit
Dim farve As ColorConstants

Private Sub Command1_Click()
If chatinput.Text = \"\" Then Exit Sub
rich1.Text = rich1.Text & vbCrLf & chatinput.Text

With rich1
.SelStart = Len(rich1.Text) - Len(chatinput.Text)
.SelLength = Len(rich1.Text)
.SelColor = farve
.SelStart = 0
.SelLength = 0
End With

chatinput.Text = \"\"

End Sub

Private Sub ChooseColor_Click()

If ChooseColor.Text = \"White\" Then
    farve = &H80000005
    End If
   
If ChooseColor.Text = \"Yellow\" Then
    farve = &HFFFF&
    End If
   
If ChooseColor.Text = \"Red\" Then
    farve = &HFF&
    End If
   
If ChooseColor.Text = \"Green\" Then
    farve = &HFF00&
    End If
   
If ChooseColor.Text = \"Blue\" Then
    farve = &HFFFF00
    End If
   
End Sub

_________________________________

Håber nogen kan hjælpe!!!

/ Martin
Avatar billede cellaneous Nybegynder
27. september 2001 - 10:51 #1
jeg har ikke meget forstand på rich text så meget, men vil tro jelzin snart kommer og hjælper dig med den :-)


(hvad mener du med den ikke virker? bliver tekstfeltet ikke tomt? farver den noget forkert?)

det eneste jeg lige tænker er \"ColorConstants\", du dimensionerer den, men putter ikke værdier i den? har du kørt sub\'en choosecolor forinden (men hvis du har en global variabel eller en form-variabel hvorfor så dimensionere igen)? vil du køre choosecolor sub\'en hver eneste gang brugeren taster noget ind i chatfeltet (sløver dit projekt ned)?

jeg vil tro du med fordel kunne gemme \"farve\" i en global variabel efter du har kørt sub\'en choosecolor (som jeg stærkt vil anbefale bliver lavet om til en commandbutton som vælger farve med commondialog eller en array af optionbuttons\'s click event)

jeg anbefale dig at lave alle dine choose color textboxe med farve om...

da du skal vælge en farve så kan du enten lade brugeren vælge mellem optionbuttons, eller du kan simpelthen lade en commondialog hvor brugeren vælger en farve, hvorefter farvens hexadecimale værdi er puttet i en variabel som du gemmer, så du ikke skal aflæse et textfelt (og spilde tid på at tjekke om brugeren taster tal eller bogstaver (med eller uden stavefejl og capslock) eller negative værdier eller kommaer).
Avatar billede martinfrost Nybegynder
27. september 2001 - 11:36 #2
Problemet er at når den adderede tekst i RTB\'en farves, så bliver resten af teksten i RTB\'en ensfarvet, men dog ikke samme farve, som den adderede.

*********************
Eksempel:

< Udgangspunkt: >

Første linje(med sort)
Anden linje(med rødt)

< Nu adderes 3. linje >

Første linje (med sort)
Anden linje (med sort)
Trejde linje med (blå)

< og læg så mærke til, at nu er linje 2 ikke længere rød. Den er blevet ændret til sort udenom koden. HVORFOR? >
********************

/ martin
Avatar billede jelzin101 Praktikant
27. september 2001 - 19:10 #3
hej martin jeg havde lige 5 minutter :0) - jeg har ikke tid til at læse hele dit sp igennem, men jeg har da lavet et program der \"beholder\" farverne. det du skal sørge for er at det kun er den tekst du vil farve der er markeret. alternativ kan du lave et array der indeholder postitioner for de forskellige farvninger.

koden til mit prog. :
Private Sub Command1_Click()
    RichTextBox1.filename = \"\"
End Sub

Private Sub Command3_Click()
    CommonDialog1.ShowColor
    RichTextBox1.SelColor = CommonDialog1.Color
End Sub
Private Sub Command5_Click()
    End
End Sub

Private Sub Command1_Click()
    Dim openfilename As String
    CommonDialog1.ShowOpen
    openfilename = CommonDialog1.filename
    RichTextBox1.filename = openfilename
End Sub

Private Sub Command4_Click()
    Dim saveFilaName As String
    CommonDialog1.ShowSave
    savefilename = CommonDialog1.filename
    RichTextBox1.SaveFile (savefilename)
End Sub

Private Sub Form_Load()

End Sub

Private Sub mnuNew_Click()
    RichTextBox1.Text = \"\"
End Sub

Private Sub mnuOpen_Click()
    Dim openfilename As String
   
    CommonDialog1.ShowOpen
    openfilename = CommonDialog1.filename
    RichTextBox1.filename = openfilename
End Sub

Private Sub mnuPaste_Click()
    Dim data As String
    data = Clipboard.GetText()
    RichTextBox1.Text = RichTextBox1.Text & data
End Sub

Private Sub mnuQuit_Click()
    End
End Sub

det er sikkert ikke helt det du leder efter men spørg bare igen.

//*Jelzin101
Avatar billede cellaneous Nybegynder
28. september 2001 - 12:07 #4
1) når du skriver

SelLength = Len(rich1.Text)

betyder det at den farve skal påføres et stykke tekst som er ligeså langt som alt teksten, derfor kommer du til at farve al teksten istedetfor kun det nye du har tilføjet

2)

det bliver sort fordi du ikke har puttet nogen værdi i variablen farve og derfor er den lig med 0 og nul er sort i vb.





hvis du laver det om til at putte noget værdi i farve (det jeg skrev tidligere - det der med colorcontants som ikke virker) og ændrer den første SelLength til Len(chatinput.Text) vil jeg tro det hjælper :-) så vil den vælge en anden farve end sort og den vil ikke farve det hele.
Avatar billede martinfrost Nybegynder
28. september 2001 - 12:58 #5
Nej, det er ikke helt rigtigt - eller også misforstår vi bare hinanden lidt.

Den farver den rigtige tekst og den tilføjer og markerer på den rigtige måde - der er ingen problemer der...

Men når markeres formateres til en anden farve, så bliver det undenfor markeringen sat til defualt - altså sort tekst.

Det hjælper ikke, at ændre len(rich1.text) til len(chatinput.text) - det giver samme udslag... :(

/ Martin
Avatar billede cellaneous Nybegynder
28. september 2001 - 14:05 #6
jeg har lavet mig et lille \"testprojekt\" (med en rich og en commandbutton og et chatinput felt) hvor jeg har to optionbuttons med farver (fordi jeg er doven til at lave variabler definerer jeg bare at den farve man skriver med et optionbutton\'ens baggrundsfarve) og i mit projekt skal man vælge farve (har ikke sat en default værdi):

Dim farve

Private Sub Command1_Click()
    Rich1.SelText = chatinput.Text & vbCrLf
End Sub

Private Sub optFarve_Click(Index As Integer)
    If optFarve(Index).Value = True Then farve = optFarve(Index).BackColor
    Rich1.SelColor = farve
End Sub

det virker fint, jeg kan skrive alle de linjer skiftevis rød og blå som jeg har lyst til :-)
Avatar billede martinfrost Nybegynder
28. september 2001 - 17:32 #7
Tak for hjælpen - det virker fint! :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester