Tem aquele velho problema com icones quando o botão usando o método disable(), a qualidade do icone fica muito ruim, quase não dá pra saber o que é, então criei esse artifÃcio para criar uma botão simulando disable sem perder a qualidade. O trabalho é criar o icone cinza, eu uso IcoFx para criar o icone cinza ex:
O código abaixo dá a ideia de como simular o enable/disable sem perder a qualidade do icone
FUNCTION TestarEnableDisable()
oIconPastaC := HIcon():AddFile("ICON_PASTAC.ICO", 24, 24)
oIconPastaD := HIcon():AddFile("ICON_PASTAD.ICO", 24, 24)
INIT DIALOG oDlg ;
TITLE "Testar Icone Cor / Cinza" ;
AT 0, 0 ;
SIZE 637,120 ;
ICON oIconPastaC ;
NOEXIT ;
STYLE WS_POPUP + WS_CAPTION + WS_SYSMENU + DS_CENTER
ThisForm := oDlg
@ 10,72 BUTTONEX oBtnPasta ;
CAPTION "" ;
SIZE 32,32 ;
ICON oIconPastaC:handle ;
STYLE BS_CENTER + WS_TABSTOP ;
ON CLICK {|| TestarPasta() }
ACTIVATE DIALOG oDlg
RETURN Nil
FUNCTION Enable( oBtn, bClick, oColor )
ThisForm:oBtn:bClick := bClick
ThisForm:oBtn:SetIcon( oColor:handle )
RETURN Nil
FUNCTION Disable( oBtn, oColor )
ThisForm:oBtn:bClick := Nil
ThisForm:oBtn:SetIcon( oColor:handle )
RETURN Nil
FUNCTION TestarPasta()
Disable( oBtnPasta, oIconPastaD )
Hwg_MsgInfo( "Botão do Icone ficou disable e trocou a cor para cinza, simulando o Disable()")
Enable( oBtnPasta, {|| TestarPasta() }, oIconPastaC )
Hwg_MsgInfo( "Botão do Icone ficou enable e trocou a cor para colorido, simulando o Enable()")
RETURN Nil