Couleur dans une forme

Ecrire la méthode displayOption() sur la datasource. L’exple ci-dessous met le texte de purchtable en bleu si le nombre de lignes de cde est == 0, sinon le texte est rouge.

public void displayOption(Common _record, FormRowDisplayOption _options)
{
    PurchTable 	purchTable;
    PurchLine	purchLine;
;
    if(_record.TableId == tableNum(PurchTable))
    {
         purchTable = _record;
    }
 
    select count (RecId) from purchLine where purchLine.PurchId == purchTable.PurchId;

    if (purchLine.RecId == 0)
    {
        _options.textColor(WINAPI::RGB2int(0,0,255));//texte en bleu
    }
    else
    {
        _options.textColor(WINAPI::RGB2int(255,0,0));//texte en rouge
    }
 
    super(_record, _options);
}

Si maintenant, on ajoute une ligne, il faut que la ligne soit directement coloriée et que l’on ne perde pas le record sur lequel on est. On peut ajouter ceci dans la méthode “Active” de la data source.

PurchTable_ds.clearDisplayOption(purchTable_ds.cursor());

Ou pour cela, on va écrire ceci dans la méthode write() de la Data Source.

public void write()
{
    PurchTable purchTable1;
    ;

    super();

    //sauvegarde de la position du record
    purchTable1.data(PurchTable);

    //executeQuery pour relancer mettre à jour la couleur
    PurchTable_ds.executeQuery();

    //on se repositionne sur le record sur lequel on était
    PurchTable_ds.findRecord(purchTable1);
}

Highlighting individual grid cells

To highlight one or more individual cells, use the ._options.affectedElementsByControl() method to limit the effect to only the cells in which you are interested.

Note that while this method can display the same colour in multiple cells, there is no way to display different colours in a single row.

public void displayOption(Common _record, FormRowDisplayOption _options)
{
    _options.backColor(WinApi::RGB2int(255,255,0)); // Yellow  
    _options.affectedElementsByControl(Control_Name.id());
    _options.affectedElementsByControl(Another_Control_Name.id());
}