Attendre réponse d'une autre form [Résolu]

Signaler
Messages postés
21
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
24 octobre 2009
-
Messages postés
6
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
15 mars 2010
-
Bonjour,

Quelqu'un à-t-il une idée pour un code du genre

procedure machin();
begin
if truc then
begin
form2.onshow;
wait click button ok sur form
form2.close;
insturction suivate
end;
end;

Je m'explique: Je voudrais que cette procédure ouvre une autre form et attende que l'utilisateur clique sur un boutton pour fermer la form2 et continuer le code de la procédure machin().

Merci de prendre le temps de me répondre

8 réponses

Messages postés
8
Date d'inscription
vendredi 12 décembre 2008
Statut
Membre
Dernière intervention
11 juin 2014
1
Quand j'execute le code suivant, la deuxième form s'ouvre et le bouton n'est pas bien déssiné et impossible de cliquer dessus ou sur un autre controle de la fiche.
L'appli semble en attente de quelque chose...





procedure FirstUse();
begin
ButtonClicked:=False;
Application.CreateForm(TUserNameForm , UserNameForm);
UserNameForm.show;
while not ButtonClicked Do
begin

end;
UserNameForm.Close;
end;


Ton code tu 3/08 ne marche pas tout simplement parce que la boucle
while not ButtonClicked Do
begin

end;

Empèche le traitement des messages Windows (le dessin du bouton, le click...)
Il suffit d'ajouter une instruction :
while not ButtonClicked Do
begin
Application.ProcessMessages;
end;

Salut,

Une astuce (Peut etre un peu bourrin) : utiliser un boolean


Var
  ButtonClicked:Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ButtonClicked:=False;
end;


procedure machin();
begin
  if truc then
    begin
      form2.onshow;
      While Not ButtonClicked Do
        Begin

        End;
      form2.close;
      //insturction suivate
    end;
end;


Biensur au niveau de l'évenement OnClick du bouton de la form 2 faire

procedure TForm2.Button1Click(Sender: TObject);
begin
  //Instructions
  ButtonClicked:=True;
end;
Messages postés
21
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
24 octobre 2009

OK Ca me va très bien

merci
Messages postés
21
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
24 octobre 2009

En fait non, j'ai un petit souci:

Quand j'execute le code suivant, la deuxième form s'ouvre et le bouton n'est pas bien déssiné et impossible de cliquer dessus ou sur un autre controle de la fiche.
L'appli semble en attente de quelque chose...

procedure FirstUse();
begin
ButtonClicked:=False;
Application.CreateForm(TUserNameForm , UserNameForm);
UserNameForm.show;
while not ButtonClicked Do
begin

end;
UserNameForm.Close;
end;


Peux-tu m'aider?
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
ShowModal et ModalResult.


FICHE 1 :

unit Main;

interface

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

type
  TFormMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

uses Main2;

procedure TFormMain.Button1Click(Sender: TObject);
begin
  Button1.Enabled := false;
  if Main2.FormModal.Execute then
    Button1.Enabled := true;
end;

end.


FICHE 2 :

unit Main2;

interface

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

type
  TFormModal = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
    function Execute: boolean; overload;
    function ExecuteOn(const AModalResult: integer): boolean; overload;
    function Execute(const AParam: integer): boolean; overload;
    function Execute(const AParam: integer; var AResult: integer): boolean; overload;
  end;

var
  FormModal: TFormModal;

implementation

{$R *.dfm}

{ TFormModal }

function TFormModal.Execute: boolean;
begin
  BringToFront;
  result :ShowModal mrOk;
end;

function TFormModal.ExecuteOn(const AModalResult: integer): boolean;
begin
  BringToFront;
  result :ShowModal AModalResult;
end;

function TFormModal.Execute(const AParam: integer): boolean;
begin
  {
  case AParam of
   -1 :
    0 :
    1 :
  end;
  }
  result := execute;
end;

function TFormModal.Execute(const AParam: integer; var AResult: integer): boolean;
begin
  {
  case AParam of
    0: begin
         //...//
         AResult := 0;
       end;
  end;
  }
  result := execute;
end;

procedure TFormModal.FormCreate(Sender: TObject);
begin
  Button1.ModalResult := mrOk;
end;

end.
Messages postés
21
Date d'inscription
vendredi 18 mars 2005
Statut
Membre
Dernière intervention
24 octobre 2009

@ fOxi

Peux-tu me commenter la Form2, je comprends pas...

Merci pour ton temps!
Messages postés
2
Date d'inscription
vendredi 3 octobre 2003
Statut
Membre
Dernière intervention
8 août 2009

Salut,

Si tu peux restreinte l'application à la form2, tu peux utiliser comme indiquer précédemnt ShowModal :

procedure machin();
begin
if truc then
begin
form2.ShowModal;
form2.close;
instruction suivante
end;
end;

Moi, j'utilise plutôt :

procedure machin();
begin
if truc then
begin
with Tform2.Create(Self) do
try
if ShowModal = mrOk then
do_il_a_cliqué_ok;
finally
free;
end;
instruction suivante
end;
end;
Messages postés
6
Date d'inscription
samedi 12 avril 2008
Statut
Membre
Dernière intervention
15 mars 2010

with TmAdialogForm.Create(nil) do
try

showmodal();



finally
Free();
end;