impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009
-
31 oct. 2008 à 18:45
impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009
-
3 nov. 2008 à 16:17
bjrs;
j'espére trouver bon echo a mon interogation, j'ai une forme MDI principale (form1) et une MDIshild (Form2) et une forme normale (form3).
j'ai mis un Edit (Edit1) et un Speed (speed1) sur Form2, et Quand je clique le Speed j'affiche en modal (Form3) sur laquelle j'ai mis un DBGrid (DBGrid1) et j'aimerais que: quand je doublclique sur le DBGrid j'affecte la valeur du champs de l'enregistrement actif a l'Edit de la forme2 et que je ferme Form3.
j'ai donc ajouter form2 dans le uses de form3 et j'ai mis le code suivant a l'evenement dblclic du DBGrid de la form3:
Form2.Edit1.Text := Table1.FieldByName('Nom_Champ').AsString;
Form12.Close;
mais ça plante surement du fait que je suis en MDI!!!
Une ame charitable pour me debloquer de cette situation ???
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 31 oct. 2008 à 23:51
Salut !
En fait il ferme la Form12 ^^'
Mais normalement quand on fait un Close sur une fiche non principale, elle ne fait que disparaître - rien n'est libéré est tout est conservé.
Donc pour rebondir sur Cantador, la valeur de l'edit ne change pas.
Sinon, je crois bien qu'une application MDI n'est, au minimum, que une paire de fiches, une principale et une autre. Appelons-les A et B.
A appelle une instance de B
donc A => B1
Si tu réappelles une autre instance de B :
A => B1
A => B2
Bref, si Form2 est la fiche MDI, si tu dis Form2. ..., l'application ne sait pas à quelle instance tu fais référence ! Bref, elle manifeste son problème par un plantage ...
Essaye voir du côté de Form1.MDIChildCount et Form1.MDIChildren[Index: Integer]
Elle permet d'accéder à la fiche de l'instance voulue.
Dans une application MDI, appeler la fiche MDI par sa référence absolue n'a pas de sens, car cette fiche obtient plusieurs instances. Il faut alors faire avec ces instances.
Après, cela n'est écrit nulle-part, c'est juste extrait de mes experiences personnelles d'utilisation d'MDI.
En espérant que cela aura répondu à ton problème :)
Cordialement, Bacterius !
PS : je ne suis absolument pas certain de ce que je dis, je n'ai pas pu tester, mais je pense que cela t'apportera quelques éléments de réponse.
Pense bien à Form1.MDIChildCount et Form1.MDIChildren !
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 1 nov. 2008 à 01:03
Oui en effet "Form2.Close" plante.
Car, conséquence des informations que j'ai développées plus haut, fermer la fenêtre MDI de cette façon n'a pas de sens.
Je pense que ça devrait marcher avec ceci :
impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009 1 nov. 2008 à 10:50
en faite! j'ai pas parler de la fermeture de form2 !! mais plutot de Form3 elle méme donc là ya pas de problemes.
mais pour recuperer la valeur de l'enregistrement actif sur form3 dans l'edit1 de form2 j'ecris:
Form1.ActiveMDIChild.Edit1.Text := Table1.FieldByName('Nom_Champ').AsString;
ou:
Form1:c'est la MDI principale.
Form2: la MDIChild. (et c'est la MDIChild Active dans mon cas).
Form3: une modal non MDI.
function TForm3.ChangeEditValue(EditIndex: Integer): Boolean;
begin
Result := False;
if Form1.ActiveMDIChild.Components[EditIndex] is TEdit then
begin
TEdit(Form1.ActiveMDIChild.Components[EditIndex]).Text := Table1.FieldByName('Nom_Champ').AsString;
Result := True;
end;
end;
Cette fonction te permettra de changer la valeur de ton TEdit en ce que tu désirais.
Tu spécifies juste l'index de l'edit, et la fonction te renverra True si ça a marché, False si ça a foiré.
N'oublie pas que les Index commencent toujours à 0.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 1 nov. 2008 à 12:35
Lol ...
Chez moi ça marche ^^ tu es sur que tu as bien écrit ce que j'ai fait ?
As-tu mis Classes dans les Uses ? Quelle version de Delphi utilises-tu ?
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 2 nov. 2008 à 13:47
Mais normalement quand on fait un Close sur une fiche non principale, elle ne fait que disparaître - rien n'est libéré est tout est conservé.
Donc pour rebondir sur Cantador, la valeur de l'edit ne change pas.
chuis pas d'accord sur ce point Bactérius,
oui pour la forme, mais la valeur saisie dans l'edit elle est perdue sauf à la stocker dans une variable..
impossibleok
Messages postés54Date d'inscriptionlundi 27 mars 2006StatutMembreDernière intervention26 juin 2009 2 nov. 2008 à 18:23
l'edit est dans une autre forme child ok!!
sinon:
si j'ai Form1 MDI principale.
???je peux actualiser une table (Table1) qui est dans une form MDIchild Active (Form2) a partir d'une autre forme modal (Form3) avec ce code?
TTable(Form1.ActiveMDIChild.Components[index de Table1]).Refresh;
???
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 2 nov. 2008 à 21:59
Bien sûr ! Tant que tu peux avoir accès à la forme MDI active, tu peux accéder à ses composants et à leur contenu ! Donc il suffit d'ajouter l'unité de la Form1 en Uses dans ta Form3, et ça devrait coller ;)
@Cantador : je ne savais pas cela en revanche, merci Cantador de cette info :)