2017-08-12 8 views
1

J'ai lu this manual, et je le suis, mais le highlighting ne fonctionne pas.Delphi-FastReport VCL 5 Surlignement conditionnel

Qu'est-ce que j'ai?

  • Créer une nouvelle application VCL.

  • Supprimez les composants TEdit et TButton sous la forme (pour transmettre la valeur).

  • Supprimez un TfrxReport sur le formulaire.

  • Ouvrez le rapport en mode Création.

  • Supprimez une bande ReportTile dans la page de rapport.

  • Supprimez un TfrxMemoView dans la bande ReportTitle.

  • Ajouter conditions:

    1- Value <= 0 -> Red color 
    2- Value > 0 -> Green color 
    

La couleur de remplissage de la note encore Black même la valeur est >0 ou <=0.

La question:

Pourquoi ces conditions ne fonctionne pas? et comment puis-je faire fonctionner les conditions?

enter image description here

Mise à jour:

La valeur a été adoptée à la composante TfrxMemoView comme:

procedure TForm1.Button1Click(Sender: TObject); 
Var Mem : TfrxMemoView; 
begin 
Mem := frxReport1.FindObject('Memo1') as TfrxMemoView; 
Mem.Text := Edit1.Text; 
frxReport1.ShowReport(); 
end; 
+0

Votre objet 'TfrxMemoView' a-t-il une valeur numérique' Value'? Il semble être vide sur votre capture d'écran. – Victoria

+0

@Victoria J'envoie la valeur d'un composant 'TEdit' au composant' TfrxMemoView', va mettre à jour la question. – Sami

+0

Ne pas avoir FastReport à la main, mais cela ne devrait-il pas être la propriété 'Value' qui devrait être définie (pas' Text')? Et si c'est le cas, il devrait s'agir d'un type de données variant qui peut attendre un type de données entier pour cette expression plutôt que du texte, donc peut-être que vous devez écrire 'Mem.Value: = StrToInt (Edit1.Text);'. – Victoria

Répondre

0

Aucune des règles est appliquée parce que la Valeur propriété reste NULL . Pour attribuer une valeur constante à partir du code Delphi vous pouvez écrire une expression constante, par exemple:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Memo: TfrxMemoView; 
begin 
    Memo := frxReport1.FindObject('Memo1') as TfrxMemoView; 
    Memo.Text := Format('[%s]', [Edit1.Text]); 
    frxReport1.ShowReport; 
end; 

Dans le code ci-dessus, j'ai omis vérifier si le contrôle a été trouvé. Et, vous devez faire attention avec le texte d'entrée. Il n'accepte que les valeurs à virgule flottante dans un format qui ne doit pas entrer en collision dans le séparateur décimal avec les séparateurs définis dans la propriété ExpressionDelimiters.

Ou simplement définir la valeur propriété ainsi:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Memo: TfrxMemoView; 
begin 
    Memo := frxReport1.FindObject('Memo1') as TfrxMemoView; 
    Memo.Text := Edit1.Text; 
    Memo.Value := StrToFloat(Edit1.Text); 
    frxReport1.ShowReport; 
end; 

Dans celui-ci le contrôle si le contrôle a été trouvé il manque aussi. Et la conversion en float n'est pas nécessaire là. Le Valeur peut être juste une chaîne convertible pour flotter.

+0

Ou utilisez 'Memo.Text: = '[' + 'StrToInt (Edit1.Text) +'] ';' – gpi

+1

@ gpi Vraiment? assigner 'Integer' à un' WideString'? En aucune façon. mybe tu veux dire 'Memo.Text: = '[' + Edit1.Text + ']';' et c'est vrai. – Sami

+1

Oui, je veux dire 'Memo.Text: = '[' + Edit1.Text + ']'' – gpi