Bjour
c'est samedi
@jipété
comme c'est vendredi et que je suis bon prince
je vais alors essayé d'être royal ![:ptdr:](https://www.developpez.net/forums/images/smilies/ptdr.gif)
il y a bien sur trop de suppositions (j'ai connu un grand chef de projet anglais qui disait "d'nt ass/u/me") et bien des manières de faire
la première manière est déjà fournie par Jipété , les deux formes étant crées au démarrage de l'application ;
cependant il a oublié d'indiquer qu'il fallait bien évidemment afficher la deuxième forme (show) et même ainsi , petit problème on n'obtient pas la bonne valeur mais la précédente
1 2 3 4 5 6 7 8 9 10 11 12 13
|
var
Form1: TForm1;
implementation
{$R *.lfm}
uses Unit2;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
Label1.Caption:=Form2.Edit1.Text;
end; |
en reprenant le code basique , après clic du bouton j'ai la valeur 'Edit1' dans label1 et non le hello que j'avais écrit , ce n'est qu'en redemandant l'affichage que j'ai mon 'Hello' , de plus , autre inconvénient de la programmation évènementielle , on peut cliquer ailleurs que dans form2 ! Bref , pas top
maintenant au lieu de Show on peut utiliser Showmodal mais ce ne sera pas suffisant il va falloir ajouter un bouton sur form2 et surtout gérer le fait de devoir cacher la form2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
var
Form2: TForm2;
implementation
{$R *.lfm}
{ TForm2 }
procedure TForm2.Button1Click(Sender: TObject);
begin
Close; // a remplacer avantageusement par modalresult:=mrok;
end;
procedure TForm2.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
CloseAction:=caHide; // cache la forme 2
end; |
on avance , ça fonctionne bien que ce ne soit pas vraiment le top au niveau mémoire.
on va améliorer ça en créant la form2 lorsque l'on clique sur le bouton et la supprimer quand on n'en a plus besoin
tout d'abord , modifions le projet de façon a ce que la forme2 ne soit pas crée au démarrage , soit via les options du projet / fiches et basculant form2 dans les fiches disponibles , soit en ouvrant le source du projet et en supprimant sa ligne de création
// Application.CreateForm(TForm2, Form2);
on va également modifier l'action à faire lorsque la Form2 sera fermée de caHide on passe à caFree ; et plutôt que de mettre un bouton , on va mettre 2 bitBtn (plus jolis
) mais aussi qui permettent d'avoir directement des valeurs modales (propriétés ModalResult ) le premier bitbtn Ok avec modalResult=mrOk , le second Annuler avec ModalResult=mrCancel;
luxe , plus besoin du code
1 2 3 4
| procedure TForm2.Button1Click(Sender: TObject);
begin
// Close;
end; |
reste à créer la forme 2 au runtime
1 2 3 4 5 6 7 8 9 10 11 12
|
procedure TForm1.Button1Click(Sender: TObject);
var F : TForm2; // déclaration
begin
F:=TForm2.Create(nil); // création
try
F.Edit1.Text:=Label1.Caption; // initialisation de la valeur
if F.Showmodal=mrOk then Label1.Caption:=F.Edit1.Text; // traitement
finally
F.Free; // 'libération'
end;
end; |
Partager