Código: Selecionar todos
@ nCol, nRow BOARD xControl SIZE nWidth, nHeight ON PAINT { | o, h | LabelPaint( o, h, lBorder ) }
xControl:Title := xValue
RETURN Nil
FUNCTION LabelPaint( o, h, lBorder )
IF o:oFont != Nil
hwg_SelectObject( h, o:oFont:Handle )
ENDIF
IF o:TColor != Nil
hwg_SetTextColor( h, o:TColor )
ENDIF
IF ! Empty( lBorder ) .AND. lBorder
hwg_Rectangle( h, 0, 0, o:nWidth - 1, o:nHeight - 1 )
ENDIF
hwg_SetTransparentMode( h, .T. )
hwg_DrawText( h, o:Title, 2, 2, o:nWidth - 2, o:nHeight - 2 )
hwg_SetTransparentMode( h, .F. )
RETURN Nil
Preste atenção nessa rotina, que o Kresin passou pra substituir o label normal.
seleciona o fonte
muda a cor pra pintura
se tem borda, desenha o retângulo
o desenho de letras pode ter fundo ou não, pode ser transparente.
Então desenha o texto.
As coordenadas de cada controle começam no zero, igual console onde MaxRow() e MaxCol() tem 1 a menos.
Por isso a borda é no -1
Já o texto, tem que respeitar também a borda, por isso é -2
É igual console mesmo, calculando tudo, e desenhando "a mão".
Apenas a LIB trás rotinas prontas para a parte mais comum, que é o que está sendo feito na hwgui.
Mas está liberado pra fazer o que quiser.
Na minigui também é tudo assim.
Mas como eles começaram há muito tempo, já acrescentaram bastante coisa, cálculos mais precisos, etc.
Eu comentei sobre isso faz tempo: com o controle vazio, o usuário pode inventar as pinturas, e a LIB pode ir incorporando as melhores idéias.