Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tekstikentän fontin väri

Sivun loppuun

TJR [27.12.2004 22:17:21]

#

Onko mahdollista tehdä vb:llä sellaista koodin pätkää jolla fontin värin voisi muuttaa nappia painamalla ja valitsemalla värin esim text.boxissa

Gaxx [27.12.2004 22:23:25]

#

On mahdollista. Fontin värin saa vaihdettua muuttamalla formin ForeColor-ominaisuutta.

Antti Laaksonen [27.12.2004 22:26:25]

#

TextBoxissa koko teksti on aina samalla värillä. Jos tämä ei haittaa, niin voit tosiaan käyttää ForeColor-ominaisuutta. Jos tekstin eri osien pitää olla eri värillä, joudut turvautumaan erilliseen RichTextBox-kontrolliin, jonka pystyy valitsemaan Project->Components-valikosta.

TJR [27.12.2004 22:31:45]

#

Tarkoitus olisi tarvittaessa pysytä muuttamaan tekstin eri osia eriväreille. RichTextBox kontrollinen käyttö on aika vierasta. voisitko hiukan valaista sen käyttöä ?

Blaze [27.12.2004 22:44:37]

#

Se osa, jonka väriä muutetaan, pitää ensin valita määrittämällä SelStart ja SelLength. Valittuna olevan osan väriä voi sitten muuttaa SelColor-ominaisuudella.

TJR [27.12.2004 23:13:29]

#

tuollakin päästään taas eteenpäin, kiitos. vielä yksi tarkennus, onko mahdollista tehdä saman tyylinen fontin värivalikko kuin esimerkiksi wordissa on työkalupalkkiin yms.

tuomas [27.12.2004 23:18:05]

#

Lähtökohta on että kaikki on mahdollista.
Ja kyllä tuo onnistuu, tapoja on varmasti monia.

TJR [27.12.2004 23:24:16]

#

ihailtava asenne ! kunpa joku voisi vihjata vähän vasta alkajallekkin että miten ja miksi.

Antti Laaksonen [27.12.2004 23:43:24]

#

Jos haluat päästä helpolla, voit tehdä värinvalinnan suoraan CommonDialogin avulla. Silloin riittää muutama rivi koodia:

' näytetään värinvalintaikkuna
CommonDialog1.ShowColor
' muutetaan valitun kohdan väri
RichTextBox1.SelColor = CommonDialog1.Color

Värinvalinnan voi tehdä myös itse, jolloin siitä saa juuri semmoisen, kuin haluaa. Valinnan voi tehdä vaikka niin, että PictureBoxiin ensin piirretään kutakin väriä vastaavat laatikot (Line-komento riittää). Sitten kun käyttäjä painaa PictureBoxista, tekstin väri muuttuu hiiren kohdalla olevaksi väriksi (MouseDown tunnistaa painamisen, Point ilmoittaa tietyn kohdan värin). Värivalikon näyttäminen ja piilottaminen Wordin tapaan onnistuu Visible-ominaisuuden avulla.

Gaxx [28.12.2004 00:09:28]

#

Grrr... Tarkotit siis tekstikentän tekstin väriä :/

Tässä taas nähdään se, että olisi hyvä laittaa tarvittavat tiedot VIESTIIN eikä lykätä osaa aiheen otsikkoon. En sitä lukenut kun tulin viestiketjuun tuosta oikealla olevasta "uusin viesti"-lootan linkin kautta.

Mutta eipä tuo nyt niin kauheeta ole... :)

TJR [28.12.2004 19:49:09]

#

no nyt opin tekemään niitä laatikoita line-komennolla, mutta on tämä niin vaiketa aluksi. voisitko laittaa vähän mallia koodista jolla tuon väripaletti hässäkän saisi aikaiseksi ja toimimaan.

Antti Laaksonen [28.12.2004 22:27:56]

#

Väripaletti kannattaa kasata sopivan silmukan avulla. Tässä esimerkissä näytetään 16 väriä, jotka saadaan suoraan QBColor-funktion avulla. Värin valinta on näppärintä tunnistaa lukemalla suoraan kuvakehyksestä hiiren kohdalla olevan pikselin väri. Kuitenkin pitää ensin tarkistaa, että lukukohta on tosiaan jonkun värin kohdalla eikä paletin taustan tai värien reunusten päällä. Kun käyt huolellisesti läpi nuo laskutoimitukset, ymmärrät varmaan, mistä on kyse (Mod on jakojäännös).

Private Sub Form_Load()
    With Picture1
        .AutoRedraw = True  ' kuva säilyy muistissa
        .BorderStyle = 0    ' ei kehystä
        .ScaleMode = 3      ' mittayksikkö pikseli
        ' paletin koko 105x105 pikseliä
        .Width = 105 * Screen.TwipsPerPixelX
        .Height = 105 * Screen.TwipsPerPixelY
    End With

    Dim i As Integer, j As Integer
    For i = 0 To 3
        For j = 0 To 3
            ' piirretään värilaatikko
            Picture1.Line (5 + i * 25, 5 + j * 25)-Step(20, 20), QBColor(4 * i + j), BF
            ' piirretään musta reunus
            Picture1.Line (5 + i * 25, 5 + j * 25)-Step(20, 20), QBColor(0), B
        Next
    Next
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ' jos valintakohta on värien alueella...
    If (X + 19) Mod 25 < 19 And (Y + 19) Mod 25 < 19 Then
        ' ...muutetaan tekstin väriä
        RichTextBox1.SelColor = Picture1.Point(X, Y)
    End If
End Sub

TJR [28.12.2004 23:24:49]

#

paletti näkyy hienosti mutta ongelmia tulee kun painan hiirtä paletin päällä. herjaa tuota loppukohtaa koodissa
"RichTextBox1.SelColor = Picture1.Point(X, Y)"

laitan koodin alkuosaa seuraavaksi, jos joku keksii vian.

Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
    Dim tnimi As String
    ' muodostetaan tiedoston nimi
    tnimi = "C:\Kalenteri\loki" & "\" & DateClicked & ".txt"
    ' jos tiedosto on olemassa, luetaan sen tiedot tekstilaatikkoon
    If Dir(tnimi) <> "" Then
        Open tnimi For Input As #1
        Text1.Text = Input(LOF(1), #1)
        Close #1
    ' muuten tyhjennetään tekstilaatikko
    Else
        Text1.Text = ""
    End If
End Sub

Private Sub Command1_Click()
    Dim tnimi As String
    ' muodostetaan tiedoston nimi
    tnimi = "C:\Kalenteri\loki" & "\" & MonthView1.Value & ".txt"
    ' kirjoitetaan tiedostoon tekstilaatikon sisältö
    Open tnimi For Output As #1
    Print #1, Text1.Text
    Close #1
End Sub

Antti Laaksonen [28.12.2004 23:53:02]

#

Mitä virheilmoituksessa sanotaan? Ovathan kontrollien nimet oikein? Kirjoittamasi koodinpätkä ei kuulu värinvalintaan laisinkaan.

TJR [29.12.2004 10:39:07]

#

"Ovathan kontrollien nimet oikein? "
tuota epäilinitsekkin, kun tuossa sinun esimerkissä on kohta " RichTextBox1.SelColor = Picture1.Point(X, Y)"
niin onko sillä vaikutusta, kun minun koodissa on kontrolli nimeltään "Text1.text"

muuten tuo värivalinta on tehty tuon sinun esimerkin mukaan.

zigilii [29.12.2004 10:52:09]

#

Luulen että et ole laittanut ollenkaan RichTextBoxia vaan laitoit tavallisen TextBoxin

tuomas [29.12.2004 12:22:25]

#

Zigilii on oikeassa, olet laittanut richtextboxin sijasta tavallisen. Tuon oikean saat käyttöösi klikkaamalla sitä palkkia jossa muut komponentit ovat hiiren oikealla näppäimellä ja sieltä avautuvasta valikosta components kohtaa.
Sitten vain valitset oikean kontrollin listasta.

TJR [30.12.2004 11:10:29]

#

jep, nyt toimii tuo värinvaihto hienosti, mutta kun tulostan kyseisen "sivun" komennolla "Print #1, RichTextBox1" tulostaa se ensin ilmeisesti valitun värin koodin. onko mahdollista saada se värikoodi pätkä pois tulostuksesta ? aikaisemmin tulostus onnistui hienosti, eli pelkkä teksti tuli paperille.

Antti Laaksonen [30.12.2004 11:35:41]

#

Pelkkä teksti on ominaisuudessa RichTextBox1.Text. Silloin tosin menetät tekstin värityksen ja muut muotoilut.

Tekstin voi myös tallentaa ja ladata RTF-muodossa näin:

RichTextBox1.SaveFile "c:\omat\testi.rtf" ' tallennus
RichTextBox1.LoadFile "c:\omat\testi.rtf" ' lataus

TJR [30.12.2004 19:25:49]

#

kyllä vain sain sen tallennettua .rtf muotoon ja luettua myös oman ohjelman kautta. Mutta jos tulostan sen omasta ohjelman pätkästä niin taas tulee koodia ennen teksiä mutta jos menen sinne kansioon johon olen tallentanut nuo .rtf tiedostot ja avaan ne word-ohjelmalla ja tulostan ne sieltä, toimii tulostus aivan oikein.
Siis mikä neuvoksi jotta tulostuksen saisi toimimaan myös omasta ohjelmasta ?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta