Newsgroup: it.comp.lang.visual-basic
Titolo: API SetTextColor

Ciao,
ho dei problemi con la SetTextColor.
Spiego brevemente: sto sublcassando delle TextBox per fare in modo che sul WM_MOUSEHOVER 
il testo cambi stile. (Lo so, si può fare anche senza subclass..)
Ora, nella WindowProc io ho solo l'handle della TB ma l'API SetTextColor richiede un 
handle al device context, se gli passo l'handle è la stessa cosa?
Con le istruzioni:
OleTranslateColor &HC00000, 0, lCOlor
OldTextColor = SetTextColor(hwnd, lCOlor)
l'API fallisce.
Avete qualche suggerimento?
LeleB.

 handle al device context, se gli passo l'handle è la stessa cosa?
No, devi passargli l'hDC.
Fai così:
hDC = GetDC(obj.hWnd)
...
Call ReleaseDC(hWnd, hDC) 'SEMPRE!
Ciao

 
Grazie Zanna!! Ora provo!
Cmq, che differenza c'č esattamente tra l'handle (che so cos'č) e un device context?
LeleB.

 Cmq, che differenza c'è esattamente tra l'handle (che so cos'è) e un
device context?
Beh, un handle è un "puntatore" generico.
l'hWnd è l'handle della finestra.
l'hDC è l'handle del device context.
Per completezza, la finestra definisce le caratteristiche del form, il DC è
l'area di memoria dove sta la parte puramente grafica.
Ciao
-- 
NeoDataType : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 l'area di memoria dove sta la parte puramente grafica.
Non si finisce mai di imparare! Grazie!
Cmq..ho provato ma non funge bene...
Incollo qui il codice:
#################################################################
             lpClassName = Space(50)
             RetVal = GetClassName(hwnd, lpClassName, 50)
             If InStr(1, lpClassName, "TextBox") <> 0 Then
                 'E' una text box
                 'Recupero l'handle del font
                 hCurrFont = SendMessage(hwnd, WM_GETFONT, 0, ByVal 0)
                 If GetObject(hCurrFont, LenB(LF), LF) > 0 Then
                     With LF
                         .lfUnderline = 1
                         .lfItalic = 1
                     End With
                     If hNewFont > 0 Then Call DeleteObject(hNewFont)
                     'Recupero l'HDC della textbox
                     hdc = GetDC(hwnd)
                     hNewFont = CreateFontIndirect(LF)
                     hOldFont = SelectObject(hdc, hNewFont)
                     'Setto il nuovo colore
                     OleTranslateColor &HC00000, 0, lCOlor
                     OldTextColor = SetTextColor(hdc, lCOlor)	<- RITORNA 0!!!!
                     'Informo la TextBox del cambiamento di Font
                     Call SendMessage(hwnd, WM_SETFONT, hNewFont, ByVal True)
                     Call ReleaseDC(hwnd, hdc) 'SEMPRE!
                 End If
#################################################################
Tutto funziona tranne il cambio di colore...Why!?
Inoltre nel messaggio WM_MOUSELEAVE pensavo bastasse eliminare il font creato:
'Elimino il font precedentemente creato
If hNewFont > 0 Then
    Call DeleteObject(hNewFont)
    'Informo la TextBox del cambiamento di Font
    Call SendMessage(hwnd, WM_SETFONT, hOldFont, ByVal True)
End If
Ma il font non ritorna come l'originale, bensě piů piccolo!
Qualche aiuto?
LeleB!


Secondo me l'approccio è sbagliato.
Non userei la SendMessage per queste cose, ma andrei tutto di SelectObject,
per il font e magari anche per la penna, che forse è quella usata dal
controllo per scrivere sull'hDC al posto del solo colore.
Ciao

 
In che senso "andrei tutto di SelectObject"?
Non ti seguo...
Grazie!!
Ciao.
LeleB.