[RESOLU] Ordre d'execution a la creation dune form ?

Ordre d'execution a la creation dune form ? [RESOLU] - Delphi/Pascal - Programmation

Marsh Posté le 10-11-2006 à 16:25:29    

Bon voila j ai un soucy et je ne pige absolument rien.
 
 
Je cree dynamiquement une nouvelle form (j ai donc bien modifie dans mes options de projets que la fenetre designee serait creee dynamiquement) et j ai mis un code asez standard selon moi que je resume vite fait ainsi :
 

Code :
  1. try
  2.     wNewWindow = TwNewWindow.Create(Self);
  3.     wNewWindows.MySettings := MySettings;
  4.     try
  5.       wNewWindow.ShowModal;
  6.     finally
  7.       wNewWindow.free;
  8.   except
  9.      blabla pour logger la quelconque erreur.
  10.   end;


 
j'etais persuade, et je le suis toujours que les evenements oncreate est appelé apres le create de la form et que le onshow est appele au moment d un show ou showmodal, et qu ensuite on a un onactivate a chaque focus de la fenetre en question, ou je me gourre qq part ?
 
Mon pb est que j ai mis du code dans l evenement onshow ou j'utilise des proprietes de l objet MySettings, or qd je debug au pas a pas je passe du oncreate directement au onshow sans revenir dans mon code principal ou j affecte mon objet MySettings par celui de la form principale (-> wNewWindows.MySettings := MySettings;) donc bien evidement ca plante lamentablement....
 
Bref qqun a t il une idee ? comment se fait il que ma fenetre s affiche directement ? y a rien dans le oncreate....
 
Merci d avance pour toute aide apportée.

Message cité 2 fois
Message édité par mkracing66 le 13-11-2006 à 12:13:36
Reply

Marsh Posté le 10-11-2006 à 16:25:29   

Reply

Marsh Posté le 11-11-2006 à 15:01:49    

Je comprenais pas que ton code plante suivant la description que tu en fais alors j'ai lancé delphi 7 pour tester.
 
J'ai crée une fiche principale Form1 et une fiche Form2 que j'ai sortie de la création automatique.
J'ai alors posé un Bouton1 dont le click lance le code de création dynamique de la Form2.
 
Dans la Form2 j'ai placée un champs public du type TButton qui joue le rôle de ton onbjet MySettings.
 
Dans le OnShow de Form2 je change le caption de Form2.Button1 et cela change bien le Form1.Button1.Caption...
 
Le fait que cela ne plante pas est trés logique et le OnShow de ma Form2 est bien lancé lors de l'exécution de la ligne Form2.ShowModal;
 
Ai-je bien reproduis ta situation ?? Si oui, ton problème viens d'ailleurs, si non j'attends tes précisions. (genre... qu'est censé faire le TMySettings)
 
En espérant avoir fait avancer le schmilblick.

Reply

Marsh Posté le 13-11-2006 à 10:42:54    

xlogan a écrit :

Je comprenais pas que ton code plante suivant la description que tu en fais alors j'ai lancé delphi 7 pour tester.
 
J'ai crée une fiche principale Form1 et une fiche Form2 que j'ai sortie de la création automatique.
J'ai alors posé un Bouton1 dont le click lance le code de création dynamique de la Form2.
 
Dans la Form2 j'ai placée un champs public du type TButton qui joue le rôle de ton onbjet MySettings.
 
Dans le OnShow de Form2 je change le caption de Form2.Button1 et cela change bien le Form1.Button1.Caption...
 
Le fait que cela ne plante pas est trés logique et le OnShow de ma Form2 est bien lancé lors de l'exécution de la ligne Form2.ShowModal;
 
Ai-je bien reproduis ta situation ?? Si oui, ton problème viens d'ailleurs, si non j'attends tes précisions. (genre... qu'est censé faire le TMySettings)
 
En espérant avoir fait avancer le schmilblick.


 
 
Voici mon code :
 

Code :
  1. procedure TwMain.FormCreate(Sender: TObject);
  2. begin
  3.   //Recuperation du path courant ou se trouve l'appli
  4.   CurrentPath := IncludeTrailingPathDelimiter(
  5.                    ExtractFilePath(Application.ExeName));
  6.   //Creation et initialisation des variables
  7.   ADOConnection.ConnectionString := '';
  8.   ADOQuery.Connection := nil;
  9.   MyError := TuError.Create(Self);
  10.   MyError.LogPath := CurrentPath + NameFileDefault + '.log';
  11.   MySettings                  := TuSettings.Create(Self);
  12.   MySettings.XMLConfigPath    := CurrentPath + NameFileDefault + '_current.xml';
  13.   MySettings.XMLReferencePath := CurrentPath + NameFileDefault + '.xml';
  14.   //Verification des paramètres concernant la base de données et
  15.   //Ouverture de la fenetre de paramétrage si nécessaire
  16.   if (not MySettings.CheckDatabaseinADOConnection(TTDB_Access)) then
  17.   begin
  18.     try
  19.       wConfig := TwConfig.Create(Self);
  20.       wConfig.MySettings := MySettings;
  21.       wConfig.MyError := MyError;
  22.       try
  23.         wConfig.ShowModal;
  24.       finally
  25.         wConfig.Free;
  26.       end;
  27.     except
  28.     end;
  29.   end;
  30. end;


 
 
Il s'agit de la formcreate de ma fiche principale...je cree mes compos, je les initialise, je teste ma bdd à partir d'un fichier de config XML et si y a un soucy je voudrais creer dynamiquement ma fenetre de config et l ouvrir en y passant tous mes objets crees pour mutualiser certaines infos (config, erreurs entre autre).
 
Pourtant qd je fais     wConfig := TwConfig.Create(Self);   cela execute bien le formcreate mais ca passe directement dans le onshow avant meme de continuer le code de ma fiche principale et d arriver sur le showmodal :s
 
 
Une idee ?


Message édité par mkracing66 le 13-11-2006 à 12:20:08
Reply

Marsh Posté le 13-11-2006 à 11:09:13    

mkracing66 a écrit :

Bon voila j ai un soucy et je ne pige absolument rien.

Code :
  1. try
  2.     wNewWindow = TwNewWindow.Create(Self);
  3.     wNewWindows.MySettings := MySettings;
  4.     try
  5.       wNewWindow.ShowModal;
  6.     finally
  7.       wNewWindow.free;
  8.   except
  9.      blabla pour logger la quelconque erreur.
  10.   end;


.


Dans la ligne 3, wNewWindow a un 's' et pas les autres!

Reply

Marsh Posté le 13-11-2006 à 11:52:48    

mkracing66 a écrit :

j'etais persuade, et je le suis toujours que les evenements oncreate est appelé apres le create de la form et que le onshow est appele au moment d un show ou showmodal, et qu ensuite on a un onactivate a chaque focus de la fenetre en question, ou je me gourre qq part ?


Oui, tu te gourance. En tout cas, si tu croi que OnShow ne peut etre déclenché que par Show ou ShowModal.
 
OnShow est appele au moment de l'affichage et l'affichage à lieu (sans mème passer implicitement par la procedure show) à la création si visible=true.

Message cité 1 fois
Message édité par el zozo le 13-11-2006 à 11:54:12
Reply

Marsh Posté le 13-11-2006 à 11:54:38    

lol, je ne m etais pas arrete a une erreur de syntaxe ;)  
 
merci qd meme :)
 
[edit] c etait pour breizhbugs ;)


Message édité par mkracing66 le 13-11-2006 à 12:11:25
Reply

Marsh Posté le 13-11-2006 à 12:13:15    

el zozo a écrit :

Oui, tu te gourance. En tout cas, si tu croi que OnShow ne peut etre déclenché que par Show ou ShowModal.
 
OnShow est appele au moment de l'affichage et l'affichage à lieu (sans mème passer implicitement par la procedure show) à la création si visible=true.


 
oui effectivement il semblerait que le pb soit cela....obligation de mettre visible a false pour ne pas avor de soucy.
 
Merci  :jap:  

Reply

Marsh Posté le 13-11-2006 à 19:43:01    

?? Visible était à True ?? Ce n'est pas la caleur par défaut de la propriété... mais j'aurai dû y pensé.
 
Content que ton problème soit résolu.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed