Récupération des données des fiches non modales

De RAD Studio
Aller à : navigation, rechercher

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.

Voir aussi