Récupération des données des fiches non modales
Remonter à Développement de l'interface utilisateur des applications - Index
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: // Composants gérés par l'EDI TListBox *ColorListBox; void __fastcall ColorListBoxClick(TObject *Sender); private: // Déclarations de l'utilisateur String getColor(); void setColor(String); String curColor; public: // Déclarations de l'utilisateur 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) { CurrentColor = ColorListBox->Items->Strings[index]; } else 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; {faire quelque chose avec la chaîne MainColor} end; end;
void __fastcall TResultsForm::UpdateButtonClick(TObject *Sender) { if (ColorForm) { String s = ColorForm->CurrentColor; // faire quelque chose avec la chaîne nom de la couleur } }
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 TColorForm::getColor() { return curColor; }
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.