2016-02-23 4 views
1

Quelqu'un peut-il m'aider, comment est-ce que je peux le transférer pour travailler avec tcxCheckgroup? Ma procédure peut être vérifiée par chargement. Les éléments sont affichés dans cxchecklistbox.De tcxchecklistbox à tcxcheckgroupbox (Charger les états à partir de TStringStream)

Exemple de travail avec tcxchecklistbox ...

procedure Tfrm.LoadStatesFromStream(SS: TStringStream); 
var 
    i : integer; 
    S2 : String; 
begin 

    SS.Position := 0; 
    i := 0; 
while (i <= cxCheckListBox1.Items.Count - 1) and (SS.Position < SS.Size) do  
begin 
    S2 := SS.ReadString(1); 
    cxCheckListBox1.Items[i].Checked := S2 = '+'; 
    Inc(i); 
end; 
end; 

je besoin d'une aide ...

procedure Tfrm.LoadStatesFromStream(SS: TStringStream); 
var 
    i : integer; 
    S2 : String; 
begin 
    SS.Position := 0; 
    i := 0; 
while (i <= cxCheckGroup1.Properties.Items.Count - 1) and (SS.Position < SS.Size) do 
begin 
    S2 := SS.ReadString(1); 
    (cxCheckGroup1.States[i] = cbschecked):= S2 = '+'; //I have a problem here 

    Inc(i); 
end; 
end; 

Merci pour l'aide!

+0

Vous abordez ce la mauvaise façon. Vous devez utiliser un cadre structuré format comme JSON au lieu de réinventer la roue –

+0

Je suis très nouveau à Delphes, je ne fais que l'apprendre, merci pour vos conseils, je serai sûr de m'occuper du format JSON, mais j'ai besoin de ce formulaire dès maintenant. – Steve88

+0

Non, vous accumulez beaucoup d'ennuis dans le futur –

Répondre

0

Voir le code ci-dessous; Je suppose que vous voulez inclure la possibilité que l'état d'une case à cocher peut être cbsGrayed (que je suis représenté par un espace dans le stringstream.

function CheckBoxStateToString(CheckBoxState : TcxCheckBoxState) : String; 
begin 
    Result := ''; 
    case CheckBoxState of 
    cbsChecked : Result := '+'; 
    cbsUnChecked : Result := '-'; 
    cbsGrayed : Result := ' '; 
    end; 
end; 

function StringToCheckBoxState(Input : String) : TcxCheckBoxState; 
begin 
    Result := cbsGrayed; 
    if Input = '+' then 
    Result := cbsChecked 
    else 
    if Input = '-' then 
     Result := cbsUnChecked 
end; 

procedure TForm1.SaveCheckGroupStatesToStream(SS : TStringStream); 
var 
    i : integer; 
begin 
    SS.Clear; 
    SS.Position := 0; 
    for i := 0 to cxCheckGroup1.Properties.Items.Count - 1 do begin 
     SS.WriteString(CheckBoxStateToString(cxCheckGroup1.States[i])); 
    end; 
    Memo1.Lines.Add('>' + SS.DataString + '<'); 
end; 

procedure TForm1.LoadCheckGroupStatesFromStream(SS : TStringStream); 
var 
    i : integer; 
    S : String; 
begin 
    CheckBoxList.ClearCheckmarks; 
    SS.Position := 0; 
    i := 0; 
    while (i <= cxCheckGroup1.Properties.Items.Count - 1) and (SS.Position < SS.Size) do begin 
    S := SS.ReadString(1); 
    cxCheckGroup1.States[i] := StringToCheckBoxState(S); 
    Inc(i); 
    end; 
end;