draft61
Messages postés7Date d'inscriptionsamedi 16 juillet 2005StatutMembreDernière intervention28 juillet 2005
-
22 juil. 2005 à 01:14
draft61
Messages postés7Date d'inscriptionsamedi 16 juillet 2005StatutMembreDernière intervention28 juillet 2005
-
28 juil. 2005 à 22:03
Bonjour,
je dois créer un prog dans lequel il y a un Form Recherche, permmettant de rechercher des Utilisateurs, Fournisseurs, Equipements...
Il existe un lien entre ces Données: Un équipement est vendu par un fournisseur et attribué à un utilisateur.
J'aimerais donc pouvoir appeler l'unique Form Recherche pour me renvoyer la bonne information :
* un IdUser si on appelle le Form Recherche depuis le Form Utilisateur
* un IdDealer si on appelle le Form Recherche depuis le Form Fournisseur...
J'aimerais donc savoir si le Form appelant peut-être reconnu dans le Form appellé et s'il y a moyen de renvoyé une variable à la fermeture du Form Recherche (ou plus exactement si on clique sur OK. Rien ne serait renvoyé sur clic de Cancel).
J'ai une solution avec des variables locales, modifiées à chaque appel, mais le code ressemble un peu à du bricolage.
draft61
Messages postés7Date d'inscriptionsamedi 16 juillet 2005StatutMembreDernière intervention28 juillet 2005 23 juil. 2005 à 01:25
Tu n'aurais pas un exemple du WM_USER?? je ne trouve pas d'explication concrète. Il y a bien des exemples mais qui ne correspondent pas du tout à l'application que je veux faire et je ne sais pas l'adapter.
jinh68
Messages postés215Date d'inscriptionmardi 29 juillet 2003StatutMembreDernière intervention 1 septembre 2006 23 juil. 2005 à 12:40
En fait je viens de relire correctement ta question. Lorsque tu
appelles ta form Recherche depuis les deux autres, tu crées
dynamiquement ta fiche Recherche, ou tu la rends juste visible?
draft61
Messages postés7Date d'inscriptionsamedi 16 juillet 2005StatutMembreDernière intervention28 juillet 2005 23 juil. 2005 à 12:55
Le Form Recherche existe déja. Il contient les mêmes composants, qu'il soit appelé du Form Utilisateurs, Fournisseurs ou Equipements. La seul chose qui change, c'est que si on l'appelle du Form Equipement, le curseur se trouvera dans la bonne page du 'PageControl', puisqu'il y a un onglet par type de recherche. Donc Quand le Form Recherche s'ouvre, il contrôle le Form appelant et ouvre la bonne page du PageControl.
Après avoir fait la recherche, si on clique sur OK, le Form Recherche se ferme et renvoie l'Id de l'équipement (si Recherche avait été ouvert à partir du Form Equipement)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 27 juil. 2005 à 00:16
Etant donne que la Form Recherche existe deja , la declaration de sa
classe existe et appartient a ton code donc on peut la modifier .
Personellement j'ajouterais un evenement FOnCloseQuery de type TCloseQueryEvent a la fenetre Recherche
Je declarerais sa propriété OnCloseQuery en accès lecture/ecriture sur FOnCloseQuery.
Dans la procedure OnCreate de ta form principale j'initialiserai :
"SearchForm . OnCloseQuery" en lui affectant une methode de ta form principale
crée pour l'occasion et nommée par exemple "event_OnCloseQuerySearchForm".
Resultat (parce que je suis sur que t'a pas trouvé ca clair ^^ ):
---------------------
// TSearchForm fait reference a la classe de ta fenetre de recherche
//SearchForm sera le nom de ta fenetre de recherceh pour la suite
//La declaration de TSearchForm devrait ressembler a ça :
TSearchForm = class(TObject)
private
// ... du code auto generé et géré par delphi
protected
// Ajoutes la ligne qui suit dans la section private ou protected
FOnCloseQuery : TCloseQueryEvent ;
public
//... du code auto generé et géré par delphi
// Ajoutes ces deux lignes dans public
property OnCloseQuery : TCloseQueryEvent
read FOnCloseQuery write FOnCloseQuery ;
end;
---------------------
Maintenant selectionne SearchFor dans delphi, va dans l'inspecteur d'objet, onglet "evenements".
Là, doubles click dans OnCreate ca crée la methode associe a l'evenement si ce n'etait deja fait :
Ecris/ ajoute a l'interieur de cette methode :
---------------------
FOnCloseQuery := NIL; //Initialise (obligatoire)
---------------------
Toujours dans l'inspecteur , dans les évènements, double click sur OnCloseQuery
Dans la fonction met (le nom de la fonciton ressemble alors a ca ) :
---------------------
TSearchForm.OnCloseQuery(Sender : TObject; var CanClose : Boolean)
Begin
if Assigned(FOnCloseQuery)
FOnCloseQuery (Sender, CanClose);
End;
---------------------
Maintenant :
Dans la classe de la form principale (que je nommerai MainForm ) crées une méthode :
---------------------
procedure event_OnCloseQuerySearchForm(Sender : TObject; var CanClose : Boolean);
---------------------
dans le code de ta classe principale met le code pour cette methode :
---------------------
Procedure TMainForm.event_OnCloseQuerySearchForm(Sender : TObject; var CanClose : Boolean);
Begin
CanClose := false; //indique que SearchForm ne se ferme pas ...
SearchForm.Hide() //par contre toi tu la cache ...
Enabled := true; //et tu restitue le control a cette form
draft61
Messages postés7Date d'inscriptionsamedi 16 juillet 2005StatutMembreDernière intervention28 juillet 2005 27 juil. 2005 à 22:55
... Justement, c'est ça ma question.
J'ai plusieurs Forms qui appellent SearchForm.
J'appelle SearchForm par showmodal. Il faudrait intercepter un paramètre pour savoir quel Form l'a appelé. Ainsi je pourrais me placer dans le champ qui m'intéresse.
- Le champ Utilisateur si SearchForm a été appelé du Form Utilisateur
- Le champ Fournisseur si SearchForm a été appelé du Form Fournisseur.
Idem à la fermeture (en appuyant sur OK), il faudrait renvoyer un paramètre pour indiquer l'Id de l'utilisateur trouvé lors de la recherche dans SearchForm.
J'ai essayé ton code (qui à l'air pas mal) mais il semble que se soit pour gérer l'affichage du SearchForm d'une autre manière. Je voulais l'essayer parce que je ne connais pas les méthodes que tu utilises. Mais j'ai un prob avec la ligne:
SearchForm.OnCloseQuery = event_OnCloseQuerySearchForm;
Tout passe à la compile mais ça plante!
draft61
Messages postés7Date d'inscriptionsamedi 16 juillet 2005StatutMembreDernière intervention28 juillet 2005 28 juil. 2005 à 22:03
... Merci pour tes conseils. Mais je rechche une solution différente. Il s'agit juste de passer des paramètres dans un sens et dans l'autre. Si je ne trouve rien d'autre, je compte utiliser des variables locales et les modifier d'un Form à l'autre.
Si tu as une autre idée entre temps...