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

smartyan007 21 Messages postés vendredi 18 mars 2005Date d'inscription 24 octobre 2009 Dernière intervention - 3 août 2009 à 13:06 - Dernière réponse : delphinovice 6 Messages postés samedi 12 avril 2008Date d'inscription 15 mars 2010 Dernière intervention
- 22 sept. 2009 à 13:22
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
rozg 8 Messages postés vendredi 12 décembre 2008Date d'inscription 11 juin 2014 Dernière intervention - 10 sept. 2009 à 17:19
3
Merci
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;

Merci rozg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de rozg
Utilisateur anonyme - 3 août 2009 à 13:47
0
Merci
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;
Commenter la réponse de Utilisateur anonyme
smartyan007 21 Messages postés vendredi 18 mars 2005Date d'inscription 24 octobre 2009 Dernière intervention - 3 août 2009 à 13:58
0
Merci
OK Ca me va très bien

merci
Commenter la réponse de smartyan007
smartyan007 21 Messages postés vendredi 18 mars 2005Date d'inscription 24 octobre 2009 Dernière intervention - 3 août 2009 à 14:35
0
Merci
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?
Commenter la réponse de smartyan007
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 3 août 2009 à 14:56
0
Merci
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.
Commenter la réponse de f0xi
smartyan007 21 Messages postés vendredi 18 mars 2005Date d'inscription 24 octobre 2009 Dernière intervention - 3 août 2009 à 15:13
0
Merci
@ fOxi

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

Merci pour ton temps!
Commenter la réponse de smartyan007
lg_brest 2 Messages postés vendredi 3 octobre 2003Date d'inscription 8 août 2009 Dernière intervention - 8 août 2009 à 10:19
0
Merci
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;
Commenter la réponse de lg_brest
delphinovice 6 Messages postés samedi 12 avril 2008Date d'inscription 15 mars 2010 Dernière intervention - 22 sept. 2009 à 13:22
0
Merci
with TmAdialogForm.Create(nil) do
try

showmodal();



finally
Free();
end;
Commenter la réponse de delphinovice

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.