Bonjour tout le monde.
J’aimerais savoir si il etait possible avec BCB 6 de faire qu’une TForm soit dans une TForm de base ?
Si cela est possible par quel biais autre que qt et wxwidget ?
Merci beaucoup pour vos indications.
Amitiés.
Bonjour tout le monde.
J’aimerais savoir si il etait possible avec BCB 6 de faire qu’une TForm soit dans une TForm de base ?
Si cela est possible par quel biais autre que qt et wxwidget ?
Merci beaucoup pour vos indications.
Amitiés.
Oui c'est tout à fait possible je fait ça courrament pour gérer le contenu dynamique (j'ai BCB 5):
Il suffit de surcharger le CreateParams:
Le host peut-être n'importe quelle TForm ou TPanel ou autre Handle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void __fastcall TfrmViewAwk::CreateParams(TCreateParams &Params) { TForm::CreateParams(Params); Params.Style = WS_CHILD | WS_CLIPSIBLINGS; Params.WndParent = frmMain->dwAwk->Handle; Params.X = 0; Params.Y = 0; Params.Width = ... Params.Height= ... }
J'instancie les forms dynamiquement en fonction des besoins.
Voici le code pour l'instanciation:
C'est tout, je ne crois pas qu'il en manque (sauf le delete frmViewAwk
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (frmViewAwk==NULL) { frmViewAwk = new TfrmViewAwk(dwAwk); frmViewAwk->Parent = dwAwk; frmViewAwk->Show(); }.
Je trouve cette façon de faire tout simplement magique, et ça permet aussi d'avoir des objets indépendants ce qui est également un grand plus.
yarp
www.senosoft.com
Faut t il faire une form en plus de celle de base puis surcharger la form de base ou faut t il que je crée la forme avec le code directement ?
Par ce que la pour le moment, j’ai un code de base simple
Unit1.cpp
Unit1.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
Bon jusque la ca me crée une fenêtre simple avec un status bar en bas, j’en aurais besoin plus tard. Mais encore que pour le moment ce n’est pas utile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Composants gérés par l'EDI private: // Déclarations de l'utilisateur public: // Déclarations de l'utilisateur __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
Merci beaucoup pour tes explications et le bout de code du départ.
Amitiés.
J'aurais du être plus clair.
Tu n'as pas besoin de dériver TForm, il te suffit de déclarer CreateParams dans le header de ta frame (c'est une méthode overridable).
La classe qui doit être overridée est celle de la child window.
CreateParams -> child
Instanciation -> parent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class TForm1 : public TForm { ... private: void __fastcall CreateParams(TCreateParams &Params); }
Donc en gros, si je me doit de créer une fenêtre dans la fenêtre, je vais dans le Unit.h puis j’instancie celle-ci.
Mais alors qu’en est t il de son remplissage ?
Est-ce comme avec une form normal, on place les objets dedans ou alors elle se fait à l’extérieur puis appelé avec le code ?
Je sait je pose la question de noob mais c’est important par ce qu’il peut en résulté plein de possibilités dans le futur.
Merci pour ces indications.
Amitiés.
Oui c'est une form comme une autre, et tu pose les composants que tu veux dedant. Tu les géreras à partir de cette from là (les évenements et tutti quanti) de toute façon c'est l'inspecteur d'objet qui décide. C'est pour ça que je disais au début que cela crée des objets indépendants, car cela à aussi un effet structurant sur le projet. La classe/frame qui affiche les objets 3D (dans mon soft) encapsule tout le code 3D et seulement elle. En collant un TPaintBox dans la main frame la 3D aurait cotoyé la status bar, les menus, les fonctions (difficile à gérer et on s'éloigne de la philosophie de l'objet).
ps Je précise que ce ne sera pas Unit1 puisque Unit1 est le nom de la main frame (perso je renomme toujours la main en frmMain c'est plus clair comme ça).
Partager