Récupération des données des fiches non modales
Remonter à Récupération des données des fiches
Il est facile d'extraire des informations de fiches non modales en appelant des fonctions membre publiques de la fiche ou en interrogeant ses propriétés. Soit, par exemple, une application contenant une fiche non modale appelée ColorForm qui contient une boîte liste appelée ColorListBox contenant une liste de couleurs ("Rouge", "Vert", "Bleu", etc.). Le nom de couleur sélectionné dans ColorListBox est automatiquement stocké dans une propriété appelée CurrentColor à chaque fois que l'utilisateur sélectionne une nouvelle couleur. La déclaration de classe pour la fiche est la suivante :
TColorForm = class(TForm)
ColorListBox:TListBox;
procedure ColorListBoxClick(Sender: TObject);
private
FColor:String;
public
property CurColor:String read FColor write FColor;
end;
class TColorForm : public TForm {
__published: // IDE-managed Components
TListBox *ColorListBox;
void __fastcall ColorListBoxClick(TObject *Sender);
private: // User declarations
String getColor();
void setColor(String);
String curColor;
public: // User declarations
virtual __fastcall TColorForm(TComponent* Owner);
__property String CurrentColor = {read = getColor, write = setColor};
};
Le gestionnaire d'événement OnClick de la boîte liste, ColorListBoxClick, initialise la valeur de la propriété CurrentColor à chaque fois qu'un nouvel élément est sélectionné. Le gestionnaire d'événement obtient la chaîne dans la boîte liste qui contient le nom de couleur et l'affecte à CurrentColor. La propriété CurrentColor utilise la fonction d'affectation, SetColor, pour stocker la valeur réelle de la propriété dans la donnée membre privée FColor :
procedure TColorForm.ColorListBoxClick(Sender: TObject);
var
Index: Integer;
begin
Index := ColorListBox.ItemIndex;
if Index >= 0 then
CurrentColor := ColorListBox.Items[Index]
else
CurrentColor := '';
end;
void __fastcall TColorForm::ColorListBoxClick(TObject *Sender) {
int index = ColorListBox->ItemIndex;
if (index >= 0) { // make sure a color is selected
CurrentColor = ColorListBox->Items->Strings[index];
}
else // no color selected
CurrentColor = "";
}
// ---------------------------------------------------------------------
void TColorForm::setColor(String s) {
curColor = s;
}
Supposons maintenant qu'une autre fiche de l'application, appelée ResultsForm, a besoin de connaître la couleur actuellement sélectionnée dans ColorForm à chaque fois qu'un bouton (nommé UpdateButton) de ResultsForm est choisi. Le gestionnaire d'événement OnClick de UpdateButton doit avoir la forme suivante :
procedure TResultForm.UpdateButtonClick(Sender: TObject);
var
MainColor: String;
begin
if Assigned(ColorForm) then
begin
MainColor := ColorForm.CurrentColor;
{do something with the string MainColor}
end;
end;
void __fastcall TResultsForm::UpdateButtonClick(TObject *Sender) {
if (ColorForm) { // verify ColorForm exists
String s = ColorForm->CurrentColor;
// do something with the color name string
}
}
Le gestionnaire d'événement commence par vérifier que ColorForm existe en utilisant la fonction Assigned. Ensuite, il obtient la valeur de la propriété CurrentColor de ColorForm.
En procédant autrement, si ColorForm possède une fonction public nommée GetColor, une autre fiche peut obtenir la couleur en cours sans utiliser la propriété CurrentColor (par exemple, MainColor := ColorForm.GetColor;
). De fait, rien n'empêche l'autre fiche d'obtenir la couleur sélectionnée dans ColorForm en examinant directement la valeur sélectionnée dans la boîte liste :
with ColorForm.ColorListBox do
MainColor := Items[ItemIndex];
String s = ColorListBox->Items->Strings[ColorListBox->ItemIndex];
Néanmoins, l'utilisation d'une propriété rend l'interface avec ColorForm très claire et simple. Tout ce qu'une fiche a besoin de savoir sur ColorForm, c'est comment récupérer la valeur de CurrentColor.