Bestdoud
Messages postés243Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention28 décembre 2008
-
31 janv. 2006 à 00:37
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
1 févr. 2006 à 22:11
Pouvez vous me dire ce qui cloche la dedans.
si je met maform.WindowState := wsmaximized;
ca me met une erreur comme quoi le composants existe déja.lorsque je crée la deuxième fenêtre.
Si je met en fenetre bureau normal ca marche
Ce code permet de créer des formes avec un panel à droite, un edit en bas et un webbrowser et de redimenssionner à chaque appuis sur un bouton de la fenetre principale.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 31 janv. 2006 à 11:25
Salut,
l'erreur est tout à fait normal puisque tu déclare MaForm, MonPanel, MonEdit Etc.
et ensuite tu fais
MaForm := TForm.Create(Self);
....
MonPanel := TPanel.Create(Self)
MonPanel.Name := 'Panel' + MaForm.name;
Jusque la ça va mais dès que tu veux crée une deuxième Form l'erreur se produit puisque
même si tu lui change de nom Maform existe quand même déjà donc dès l'instant ou
MaForm := TForm.Create(Self); est à nouveau appelé l'erreur se produit.
Pour éviter ce genre d'erreur il te faut passer par un tableau genre :
Var
MesForm : Array of TForm;
MesPanel : Array of TPanel;
Procedure TForm1.Button1Click(Sender: TObject);
Begin SetLength(MesForm, Length(MesForm) + 1);
MesForm[High(MesForm)] : = TForm.Create(Self);
With MesForm[High(MesForm)] Do Begin Name := 'Fenetre' + IntToStr(High(MesForm));
Tag := High(MesForm);
OnResize := FormResize;
.....
End;
.....
End;
Procedure TForm1.FormResize(Sender: TObject);
begin
If TForm(Sender).Tag > Heigh(MesForm) Then Exit;
With MesForm[TForm(Sender).Tag ] Do Begin ....
End;
End;
Il faudrait aussi penser à libérer les composants à la fermeture de la Form même si normalement Delphi s'en charge ça fait plus propre. J'éspère avoir été assé claire si non n'hésite pas à demander.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 31 janv. 2006 à 11:30
Oups une petite erreur c'est glissé dans le code :
Procedure TForm1.FormResize(Sender: TObject);
begin
If TForm(Sender).Tag > High(MesForm)Then Exit;
With MesForm[TForm(Sender).Tag ] Do Begin ....
End;
End;
Bestdoud
Messages postés243Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention28 décembre 2008 31 janv. 2006 à 21:26
Var
MesForm : Array of TForm;
MesPanel : Array of TPanel;
MesEdit : Array of Tedit;
MesBrowser : Array of Twebbrowser_V1;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.dffdffClick(Sender: TObject);
Begin
SetLength(MesForm, Length(MesForm) + 1);
MesForm[High(MesForm)] := TForm.Create(Self);
With MesForm[High(MesForm)] Do
Begin
Name := 'Fenetre' + IntToStr(High(MesForm));
Tag := High(MesForm);
formstyle := fsmdichild;
windowstate := wsmaximized;
onresize := FormResize;
visible := true;
SetLength(MesEdit, Length(MesEdit) + 1);
MesEdit[High(MesEdit)] := Tedit.Create(Self);
With MesEdit[High(MesEdit)] Do
Begin
Name := 'edit' + IntToStr(High(MesEdit));
Tag := High(MesEdit);
Align := albottom;
Parent := MesForm[High(MesForm)];
End;
SetLength(MesBrowser, Length(MesBrowser) + 1);
MesBrowser[High(MesBrowser)] := Twebbrowser_V1.Create(Self);
With MesBrowser[High(MesBrowser)] Do
Begin
Name := 'Browser' + IntToStr(High(MesBrowser));
ParentWindow := MesForm[High(MesForm)].Handle;
Tag := High(MesBrowser);
top := 0;
left := 0;
End;
SetLength(MesPanel, Length(MesPanel) + 1);
MesPanel[High(MesPanel)] := Tpanel.Create(Self);
With MesPanel[High(MesPanel)] Do
Begin
Name := 'panel' + IntToStr(High(MesPanel));
Tag := High(MesPanel);
Align := alright;
Parent := MesForm[High(MesForm)];
bevelouter := bvnone;
End;
formresize(MesForm[High(MesForm)]);
End;
End;
Procedure TForm1.FormResize(Sender: TObject);
begin
If TForm(Sender).Tag > High(MesForm) Then Exit;
With MesForm[TForm(Sender).Tag ] Do
Begin
With MesBrowser[TForm(Sender).Tag ] Do
Begin
width := MesForm[TForm(Sender).Tag].Clientwidth - MesPanel[TForm(Sender).Tag].Width;
height:= MesForm[TForm(Sender).Tag].ClientHeight - Mesedit[TForm(Sender).Tag].Height;
End;
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
//pour afficher la fenetre 2 devant les autres
begin
with MesForm[2] do
begin
show;
end;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 1 févr. 2006 à 01:25
Bon alors part manque de temps je n'ai pas tout controlé je suis allé au plus rapide voici ce que ça donne :
Les lignes en vert sont retirée
Les lignes en rouge sont modifiée
Les lignes en bleu sont ajoutée
procedure TForm1.dffdffClick(Sender: TObject);
Begin
SetLength(MesForm, Length(MesForm) + 1);
MesForm[High(MesForm)] := TForm.Create(Self);
With MesForm[High(MesForm)] Do
Begin
Name := 'Fenetre' + IntToStr(High(MesForm));
Tag := High(MesForm);
Parent := Self; // si tu met cette ligne les fenêtres reseteront à l'intérieur de Form1 à tester
// formstyle := fsmdichild; // fsmdichild pose encore un problème je ne sais pas pourquoi
windowstate := wsNormal; // je l'ai mis à WSNormal pour voir quelque chose
visible := true;
SetLength(MesEdit, Length(MesEdit) + 1);
MesEdit[High(MesEdit)] := Tedit.Create(Self);
With MesEdit[High(MesEdit)] Do
Begin
Name := 'edit' + IntToStr(High(MesEdit));
Tag := High(MesEdit);
Align := albottom;
Parent := MesForm[High(MesForm)];
End;
SetLength(MesBrowser, Length(MesBrowser) + 1);
MesBrowser[High(MesBrowser)] := Twebbrowser_V1.Create(Self);
With MesBrowser[High(MesBrowser)] Do
Begin
Name := 'Browser' + IntToStr(High(MesBrowser));
ParentWindow := MesForm[High(MesForm)].Handle;
Tag := High(MesBrowser);
top := 0;
left := 0;
End;
SetLength(MesPanel, Length(MesPanel) + 1);
MesPanel[High(MesPanel)] := Tpanel.Create(Self);
With MesPanel[High(MesPanel)] Do
Begin
Name := 'panel' + IntToStr(High(MesPanel));
Tag := High(MesPanel);
Align := alright;
Parent := MesForm[High(MesForm)];
bevelouter := bvnone;
End;
onresize := FormResize; // celle ci à été déplacé ici quand tous les composants ont étés crées
//formresize(MesForm[High(MesForm)]); // et celle ci je l'ai retirée puisque la ligne précedente appel déjà FormResize
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
//pour afficher la fenetre 2 devant les autres
begin
with MesForm[2] do
showWindow(handle, SW_SHOWNORMAL); // et la j'utilise ShowWindow ce qui permet de restituer la taille et la position de la fenêtre même si elle est réduite où fermer
end;
Attention il te faut crée 3 Form pour pouvoir utiliser la procedure Button1Click puisque la première fenêtre crée porte le N°0 et non 1. Bien sur il faudrai encore étoffé le code il est fonctionnel mais pas achevé.
Bestdoud
Messages postés243Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention28 décembre 2008 1 févr. 2006 à 18:14
showWindow(handle, SW_SHOWNORMAL); ne faisait aucun effet. alors j'ai mis 3 à la place de SW_SHOWNORMAL. ca met la fenetre devant mais toujours le même pb à la fermeture