Se connecter / S'enregistrer
Votre question

[Resolu] Pascal> Ouvrir et fermer une fenêtre en meme temps

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
27 Octobre 2006 13:56:03

Salut salut à tous,

Je suis encore débutant dans le Pascal ( sans blague :lol:  ) et je suis en train de créer un petit programme qui va récapituler mes cours de maths, physique.... rien de bien joli mais plutôt pratique :sarcastic:  .

Voici l'ebauche ( Boutton Maths, fonction opérationnels ). Programme ici

En bas de la fenêtre Fonction, ou ya le cours " Généralité ", je vais mettre 2 bouttons: Un pour quitter la fenetre ( ça j'y arrive ) et un autre " Suivant ", qui va continuer le cours sur les fonctions. Donc au clic sur le boutton btSuite , je voudrais que s'éxécute en même temps:

fmFonctions1.closemodal
fmFonctions2.ShowModal

Le problème, c'est que c'est soit l'un soit l'autre qui fonctionne :pfff:  . J'ai donc besoin de votre aide.

Merci d'avance. :) 

Autres pages sur : resolu pascal ouvrir fermer fenetre temps

27 Octobre 2006 14:05:09

avec un peu plus de code source, ce serait mieux...
27 Octobre 2006 14:14:36

Oupss, voila voilou le code des 3 fiches:

Unité principale: uCours
Citation :

unit uCours;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;

type
TfmCours = class(TForm)
btMaths: TButton;
btSVT: TButton;
btPhysique: TButton;
Label1: TLabel;
btChimie: TButton;
btQuitter: TButton;
procedure btMathsClick(Sender: TObject);
procedure btQuitterClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
fmCours: TfmCours;

implementation

uses uMaths;

{$R *.dfm}

procedure TfmCours.btMathsClick(Sender: TObject);
begin
fmMaths.showmodal
end;

procedure TfmCours.btQuitterClick(Sender: TObject);
begin
close;
end;

end.


Unité pour les maths: uMaths
Citation :
unit uMaths;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TfmMaths = class(TForm)
btFonctions1: TButton;
btSuites: TButton;
btPolynomes: TButton;
btRetour: TButton;
procedure btFonctions1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
fmMaths: TfmMaths;

implementation

uses uFonctions1;

{$R *.dfm}

procedure TfmMaths.btFonctions1Click(Sender: TObject);
begin
fmFonctions1.showmodal
end;

end.


Unité première pour les fonctions:
Citation :
unit uFonctions1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;

type
TfmFonctions1 = class(TForm)
Label1: TLabel;
btRetour: TButton;
Memo1: TMemo;
Label2: TLabel;
Label3: TLabel;
Memo2: TMemo;
Label4: TLabel;
Memo3: TMemo;
btSuite: TButton;
Label5: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;

var
fmFonctions1: TfmFonctions1;

implementation

uses uFonctions2;

{$R *.dfm}

end.


La fiche suivante est uFonctions2 ( name: fmFonctions2 ). Le boutton btSuite doit fermer fmFonctions1 et ouvrir fmFonctions2.
Contenus similaires
a b L Programmation
28 Octobre 2006 11:15:18

Je dirais que ça doit être géré dans ta fenêtre principale : côté fct1, le bouton fait quitter sans lancer la nouvelle fenêtre, et dans la fenêtre principale, si tu as appuyé sur le bouton (donc état à mémoriser quelque part), tu lancer la fct2.

Je t'explique pourquoi ce que tu fais ne marche pas:
quand tu fais appel au close(), ta fenêtre fct1 se ferme et du coup tout le code qui a derrière ton close() ne sera jamais appelé, car la fenêtre étant détruite, l'objet possédant la méthode est détuit, et donc le code "n'existe plus".
Si tu inverse, comme tu fais une fenêtre modale, ça bloque tant que la fenetre fct2 n'est pas fermée, donc tu continue à voir tes 2 fenêtres.

Une astuce serait de lancer ta seconde fenêtre fct2 en non modal (.show au lieu de .showmodal) et de femer fct1 juste après (je ne sais pas si ça marchera bien).
28 Octobre 2006 11:33:24

Trop trop trop merci !!!!!!!! :D 

Miantenant ça fonctionne. Voila le code source que j'ai mis ( bricolage certe, mais sa fonctionne avec ton astuce ;)  )

Citation :


procedure TfmFonctions2.btRetourClick(Sender: TObject);
begin
fmFonctions1.Show
end;

procedure TfmFonctions2.btSuiteClick(Sender: TObject);
begin
fmFonctions3.show

end;

procedure TfmFonctions2.FormActivate(Sender: TObject);
begin
fmFonctions1.close;
fmFonctions3.Close;

end;


Merci bien à tous et bonne journée :hello: 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS