Newsgroup: it.comp.lang.visual-basic
Titolo: [?] RichTextBox e sfondo/colore evidenziato

Ciao... forse qualche d'uno mi puņ aiutare....
non riesco a fare un "backcolor" (ma non sono sicuro sia il "colore di 
sfondo evidenziatore" o di tutto lo sfondo...)
In pratica ho questa sequenza e vorrei che il solo "PIPPO" venga messo in 
colore EVIDENZIATO come nell'esempio:
rtb.SelColor = vbBlack
rtb.SelText = "CIAO," + " "
rtb.SelColor = vbRed
rtb.SelText = "PIPPO"
rtb.SelColor = vbBlack
rtb.SelText = " E' IL MIO NOME" & vbCrLf
quindi continuo con un'altra sequenza dove il prossimo "NOME" dovrebbe 
essere evidenziato anche lui...ecc...
Non ci riesco...
col backolor ma mi da un colore di sfondo a tutto il RTB...
Ho cercato anche con F1 ma non trovo come farlo...chi mi saprebbe dare una 
dritta?
GRAZIE MILLE!
Anto
----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeeds.com
 The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----

 colore EVIDENZIATO come nell'esempio:
Da quel che ho trovato non c'e' un comando "diretto"?
arghh?!?


 Da quel che ho trovato non c'e' un comando "diretto"?
No, vai di API.
Avevo postato qualcosa, gugla nei miei post qui con parola chiave
Charformat2, se hai problemi chiedi che domani ne parliamo.
Ora ho da fare e devo correre come un pazzo :-)
Bye, G.

 Ora ho da fare e devo correre come un pazzo :-)
Spero non disturbarti troppo ma un aiuto beeeeenveeengaaa! GRAZIE!
ciao


Public Type CHARFORMAT2
    cbSize As Integer    '2
    wPad1 As Integer  '4
    dwMask As Long    '8
    dwEffects As Long    '12
    yHeight As Long   '16
    yOffset As Long   '20
    crTextColor As Long    '24
    bCharSet As Byte    '25
    bPitchAndFamily As Byte    '26
    szFaceName(0 To LF_FACESIZE - 1) As Byte    ' 58
    wPad2 As Integer    ' 60
    ' Additional stuff supported by RICHEDIT20
    wWeight As Integer            ' /* Font weight (LOGFONT value)      */
    sSpacing As Integer           ' /* Amount to space between letters  */
    crBackColor As Long        ' /* Background color                 */
    lLCID As Long               ' /* Locale ID                        */
    dwReserved As Long         ' /* Reserved. Must be 0              */
    sStyle As Integer            ' /* Style handle                     */
    wKerning As Integer            ' /* Twip size above which to kern char
pair*/
    bUnderlineType As Byte     ' /* Underline type                   */
    bAnimation As Byte         ' /* Animated text like marching ants */
    bRevAuthor As Byte         ' /* Revision author index            */
    bReserved1 As Byte
End Type
Public Const CFM_BACKCOLOR = &H4000000
Public Const EM_GETCHARFORMAT = (WM_USER + 58)
Public Const CFM_BACKCOLOR = &H4000000
Public Const CFE_AUTOBACKCOLOR = CFM_BACKCOLOR
Public Const EM_SETCHARFORMAT = (WM_USER + 68)
Public Const SCF_SELECTION = &H1&
Public Const SCF_WORD = &H2&
Public Declare Function OleTranslateColor Lib "oleaut32.dll" (ByVal
lOleColor As Long, ByVal lHPalette As Long, lColorRef As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As
Long
Public Property Get FontBackColour() As OLE_COLOR
    Dim tCF2 As CHARFORMAT2
    Dim lR As Long
    tCF2.dwMask = CFM_BACKCOLOR
    tCF2.cbSize = Len(tCF2)
    lR = SendMessage(richedit.hwnd, EM_GETCHARFORMAT, SCF_WORD Or
SCF_SELECTION, tCF2)
    FontBackColour = tCF2.crBackColor
End Property
Public Property Let FontBackColour(ByVal oColor As OLE_COLOR)
    Dim tCF2 As CHARFORMAT2
    Dim lR As Long
    If oColor = -1 Then
        tCF2.dwMask = CFM_BACKCOLOR
        tCF2.dwEffects = CFE_AUTOBACKCOLOR
        tCF2.crBackColor = -1
    Else
        tCF2.dwMask = CFM_BACKCOLOR
        tCF2.crBackColor = TranslateColor(oColor)
    End If
    tCF2.cbSize = Len(tCF2)
    lR = SendMessage(richedit.hwnd, EM_SETCHARFORMAT, SCF_WORD Or
SCF_SELECTION, tCF2)
End Property
Public Function TranslateColor(ByVal clr As OLE_COLOR, _
                               Optional hPal As Long = 0) As Long
    If OleTranslateColor(clr, hPal, TranslateColor) Then
        TranslateColor = -1
    End If
End Function
Dovrebbe essere tutto ciauz
"ApipApip" <as...@chiedime.lo> ha scritto nel messaggio
news:42839f1c$1...@spool9-west.superfeed.net...


rtb.SelText = nome
Come faccio diventare il nome "PIPPO" in una di tutte quelle possibilità da 
animazione a sfondo al resto e subito dopo farlo ritornare "normale" per il 
resto del testo?
GRAZIE ma non ci arrivo....


 rtb.SelText = "CIAO," + " "
Questo fa rabbrividire. A parte che puoi usare un semplice
    rtb.SelText = "CIAO, "
per la concatenazione di stringhe usa sempre "&" e non "+".
Per il perché, guarda l'help. Ora, torniamo al problema originale :-)
[BEGIN PAPPAFATTA]
Inserisci un modulo vuoto nel prog e incollaci 'sta roba:
'***********************
Option Explicit
Public Const LF_FACESIZE = 32
Public Const WM_USER = &H400
Public Const EM_SETCHARFORMAT = (WM_USER + 68)
Public Const CFM_BACKCOLOR = &H4000000
' EM_SETCHARFORMAT wParam masks
Public Const SCF_SELECTION = &H1&
Public Const SCF_WORD = &H2&
Public Const SCF_DEFAULT = &H0&    ' set the default charformat or PARAFORMAT
Public Const SCF_ALL = &H4&    ' not valid with SCF_SELECTION or SCF_WORD
Public Const SCF_USEUIRULES = &H8&    ' modifier for SCF_SELECTION  says that
' the format came from a toolbar, etc. and
' therefore UI formatting rules should be
' used instead of strictly formatting the
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal uMgs As Long, ByVal wParam As Long,
lParam As Any) As Long
Public Type CharRange
    cpMin As Long
    cpMax As Long
End Type
Private Type CHARFORMAT2
    cbSize  As Integer
    wPad1 As Integer
    dwMask  As Long
    dwEffects  As Long
    yHeight As Long
    yOffset As Long    ' > 0 for superscript, < 0 for subscript
    crTextColor As Long
    bCharSet As Byte
    bPitchAndFamily As Byte
    charszFaceName(0 To LF_FACESIZE - 1) As Byte
    wPad2 As Integer
    wWeight As Integer    ' Font weight (LOGFONT value)
    sSpacing As Integer    ' Amount to space between letters
    crBackColor As Long    ' Background color
    lcid  As Long    ' Locale ID
    dwReserved As Long    ' Reserved. Must be 0
    sStyle As Integer    ' Style handle
    wKerning As Integer    ' Twip size above which to kern char pair
    bUnderlineType As Byte    ' Underline type
    bAnimation As Byte    ' Animated text like marching ants
    bRevAuthor As Byte    ' Revision author index
    bReserved1 As Byte
End Type
Public Sub EvidenziaRTB(Scatola As RichTextBox, Colore As Long)
    Dim FormatoCaratteri As CHARFORMAT2
    Dim lngRet As Long
    Dim hWndr As Long
    hWndr = Scatola.hwnd
    FormatoCaratteri.cbSize = Len(FormatoCaratteri)
    FormatoCaratteri.dwMask = CFM_BACKCOLOR    ' indichiamo di usare l'attributo backcolor
    FormatoCaratteri.crBackColor = Colore    ' e gli settiamo il valore
    ' mandiamo alla RTBox il comando
    lngRet = SendMessage(hWndr, EM_SETCHARFORMAT, SCF_SELECTION, FormatoCaratteri)
    Debug.Print lngRet & " evidenziazione corretta"    ' se stampa 1 è OK, 0 = fallito
End Sub
'***********************
A questo punto nel tuo prog puoi usare queste righe:
'***********************
Nome = "PIPPO"
rtb.SelColor = vbBlack
rtb.SelText = "CIAO, "
rtb.SelColor = vbRed
EvidenziaRTB rtb, vbYellow ' setta l'evidenziazione a giallo
rtb.SelText = Nome
EvidenziaRTB rtb, vbWhite ' la rimette in bianco.
' Se il tuo backcolor di default non è bianco, vedi tu :-)
rtb.SelColor = vbBlack
rtb.SelText = " E' IL MIO NOME" & vbCrLf
'***********************
[END PAPPAFATTA]
Se non funziona, potrebbe essere un problema di versioni dei file,
fammi sapere.
Bye, G.

 [END PAPPAFATTA]
Urlo: PER IL MOMENTO GRAZIE MILLLLE!!!!!!
Come sempre se non ci foste voi... sarei ancora al PRINT "PIPPO" del mio ex 
C64! ma ormai alla soglia dei 50... mi diverto a farmi qualche cosina ogni 
tanto... Provo subito...:-)))
Versione OCX Rtb v6.1.97.82
GRAZIE MILLE!
Spero riuscire al primo colpo!
Anto


 
----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==----


 Da cosa o meglio da quale altro file ocx o dll o altro potrebbe dipendere?
Controlla le versioni di questa roba. Fra parentesi le mie, su W98SE, e funziona.
riched.dll         (4.00.834.839)
riched20.dll     (5.40.11.2210)
riched32.dll     (4.00.834.839)
richtx32.ocx    (6.01.9782)
Bye, G.

 richtx32.ocx    (6.01.9782)
ma che strano, erano versioni uguali ma con lunghezza differente...
addirittura il riched32.dll da oltre 200k a quella attuale di 3.5k... 
comunque funziona perfettamente.
In particolare il riched20.dll , sostituito con quello del mio XP e tutto OK 
anche sul 98...
è che nel PC di win98 c'era sia la richtx32.ocx in win/SYSTEM che in 
win/SYSTEM32...
Ho tolto quella nella system32 e aggiornato quella nella system.
Per caso sai se tra i vari windows 9x/2000/XP prima cercano le dll/ocx nella 
path "system" oppure la "system32" o?
Ancora grazie mille per l'aiuto. Veramente MOLTO gentile!
ciao


 path "system" oppure la "system32" o?
...certo che lo so. La risposta è quarantadue.
:-P
Bye, G.