Ver Mensaje Individual
  #8  
Antiguo 24-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Haz published la propiedad AllowGrayed (igual que Checked) y en el wm_paint ten en cuenta que puede tener 3 valores.

Código Delphi [-]
    if Checked = cbGrayed then // corregido, tenía un error
    begin
       pues eso, como quieras pintarlo
    end
    else Checked= cbChecked then
    begin
        Canvas.Font.Style := [fsBold];
        Canvas.Font.Name := 'Tahoma';
        Canvas.Font.Color := FBoxCheckShadow;        Canvas.TextOut(7,3, 'x');
        Canvas.Font.Color := FBoxCheckColor;         Canvas.TextOut(6,2, 'x');        
      end;

El truco parece estar al tiempo de "crear" El tcheckbox:
Código Delphi [-]
procedure TCustomCheckBox.CreateWnd;
begin
  inherited CreateWnd;
  SendMessage(Handle, BM_SETCHECK, Integer(FState), 0);
end;

Fstate puede tener los valores TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed);

cuando dice Integer(Fstate), está cogiendo el primer valor que es cero, es decir, cbUnchecked.

En el procedimiento Toggle, es donde se usa AllowGrayed:
Código Delphi [-]
procedure TCustomCheckBox.Toggle;
begin
  case State of
    cbUnchecked:
      if AllowGrayed then State := cbGrayed else State := cbChecked;
    cbChecked: State := cbUnchecked;
    cbGrayed: State := cbChecked;
  end;
end;
Si está Unchecked y permite tener 3 estados, se pone a cbGrayed.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 24-11-2008 a las 14:13:39. Razón: correción código
Responder Con Cita