Accueil > Forum > > > > Besoin d'explication : Pourquoi ca marche ?
Besoin d'explication : Pourquoi ca marche ?
samedi 27 janvier 2007 à 15:59:55 |
Besoin d'explication : Pourquoi ca marche ?

bradlemon
|
Tout d'abord bonjour à tous et bonne année !!!
Je débute en delphi et histoire de comprendre comment ca marche je fais quelques petits "essais" et je suis tombé sur un problème de compréhension du langage.
Voici ma question : mon projet contient un programme principal (essai) 2 forms (main et client) . Sur la première Form, j'ai 2 boutons : 'Consulter' et 'Modifier' qui comme vous l'aurez compris vont ouvrir la seconde Form soit en consultation soit en modification. le code ci-joint fonctionne (pour tester, je modifie simplement le titre de la seconde fenêtre).
Ma question est la suivante : pourquoi suis-je obligé de mettre Application.CreateForm(TForm_client, Form_client); dans mon programme principal (ligne en rouge) alors que j'ai déjà Form_client.FormCreate(Form_client,mode_choisi); dans les fonctions évenementielles des boutons (lignes en bleu) ?
D'avance merci pour vos réponses.
voici le codes des trois Unit : ******************************************** le programe ******************************************** program essai;
uses Forms, main in 'main.pas' {Form_main}, client in 'client.pas' {Form_client};
{$R *.res}
begin Application.Initialize; Application.CreateForm(TForm_main, Form_main); Application.CreateForm(TForm_client, Form_client); Application.Run; end.
****************************************** Unit main : contient les deux boutons ****************************************** unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, client;
type TForm_main = class(TForm) Btn_consulter: TButton; Btn_modifier: TButton; procedure Btn_consulterClick(Sender: TObject); procedure Btn_modifierClick(Sender: TObject); private public
end;
var Form_main: TForm_main; mode_choisi:string;
implementation
{$R *.dfm}
procedure TForm_main.Btn_consulterClick(Sender: TObject); begin
mode_choisi:='consulter'; Form_client.FormCreate(Form_client,mode_choisi); Form_client.ShowModal; end;
procedure TForm_main.Btn_modifierClick(Sender: TObject); begin mode_choisi:='modifier'; Form_client.FormCreate(Form_client,mode_choisi); Form_client.ShowModal; end; end.
************************************************ Unit client : une fenetre vierge où seul le Caption est mis à jour ************************************************ unit client;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm_client = class(TForm) procedure FormCreate(Sender :TObject; var mode:string); private { Private declarations } public end;
var Form_client: TForm_client;
implementation
{$R *.dfm} procedure TForm_client.FormCreate(Sender :TObject; var mode: string); begin
if mode='consulter' then Form_client.Caption:='Consultation' else Form_client.Caption:='Modification' end;
end.
|
|
samedi 27 janvier 2007 à 16:44:51 |
Re : Besoin d'explication : Pourquoi ca marche ?

f0xi
|
Réponse acceptée !
mon dieu ... faut pas faire comme ça mon ami! bon deja, bon point pour toi, tu utilise ShowModal ce qui est bien pour ce type d'application. mais c'est mieux de faire comme cela : unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm_main = class(TForm) Btn_consulter: TButton; Btn_modifier: TButton; procedure Btn_consulterClick(Sender: TObject); procedure Btn_modifierClick(Sender: TObject); private public
end;
var Form_main: TForm_main;
implementation
{$R *.dfm}
uses Client;
procedure TForm_main.Btn_consulterClick(Sender: TObject); begin Form_Client.Execute(FCL_SHOW);
{ // variante d'utilisation :
if Form_Client.Execute(FCL_SHOW) then
ShowMessage('La fiche viens d''être consultée.');
} end;
procedure TForm_main.Btn_modifierClick(Sender: TObject); begin Form_Client.Execute(FCL_EDIT); { // variante d'utilisation :
if Form_Client.Execute(FCL_SHOW) then
ShowMessage('La fiche viens d''être modifiée.') else
ShowMessage('Modification de la fiche annulée.')
} end;
end.
unit client;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm_client = class(TForm) Btn_Ok : TButton; { propriété ModalResult sur mrOK } Btn_Cancel : TButton; { propriété ModalResult sur mrCancel } private public function Execute(const Mode : word) : boolean; end;
var Form_client: TForm_client;
const FCL_SHOW = word($0001); FCL_EDIT = word($0002);
implementation
{$R *.dfm}
function TForm_client.Execute(const Mode : word) : boolean; begin case Mode of FCL_SHOW : Caption := 'Consultation'; FCL_EDIT : Caption := 'Modification'; end;
// en mode consultation pas de boutton "annuler" Btn_Cancel.Enabled := Mode <> FCL_SHOW;
// Execute ne renvois True que si le boutton Ok est préssé Result := ShowModal = mrOK; end; end. Croc (click me)
|
|
dimanche 28 janvier 2007 à 07:52:05 |
Re : Besoin d'explication : Pourquoi ca marche ?

bradlemon
|
merci FOxi pour ton aide. J'aurai trois questions supplémentaires :
1. dans la déclaration des constantes FCL_SHOW et FCL_EDIT que signifient ($0001) et ($0002) ?
2. Je suis donc obligé de garder Application.CreateForm(TForm_client, Form_client); dans la partie program. Cela signifie-t-il que la Form est créée dès le démarrage du programme ? si oui, la mémoire nécessaire pour la création de la Form_client est également allouée dès le démarrage du programme ?
3. Dois-je mettre une Application.CreateForm(...) dans la partie program pour toutes les Form qui vont exister dans mon logiciel ? Je veux dire que si j'ai une trentaine de Form dans l'ensemble du logiciel, cela fait beaucoup de Form crées dès le démarrage alors que seules quelques-unes ne seront peut-être utilisées par l'utilisateur, non ?
D'avance merci.
|
|
dimanche 28 janvier 2007 à 13:13:45 |
Re : Besoin d'explication : Pourquoi ca marche ?
|
dimanche 28 janvier 2007 à 13:24:54 |
Re : Besoin d'explication : Pourquoi ca marche ?

jace1975
|
Réponse acceptée !
c'est tout bete,
va dans le menu projet/options/fiche. Là tu vois deux listbox, une indiquant les fiches créées dès le début d'execution de ton programme et à droite celles qui ne le sont pas mais que tu peux appeler en cours.
donc si toutes tes fiches sont dans la listbox de gauche, c'est normal que tu es Application.CreateForm(TForm_client, Form_client) dans la partie program et le Form_client.FormCreate(Form_client,mode_choisi); n'est pas nécessaire.
par contre si une fiche est dans la listbox de droite, tu dois la créer avant son appel, donc faire appel à tes Form_client.FormCreate(Form_client,mode_choisi); et ne pas oublier aussi de tous bien libérer si tu as vraiment un probleme de mémoire .
pour plus d'info regarde dans l'aide à tapplication; tu auras la réponse à tes questions
j'espère avoir été clair
|
|
dimanche 28 janvier 2007 à 17:22:42 |
Re : Besoin d'explication : Pourquoi ca marche ?

bradlemon
|
merci à tous pour votre aide. @bientôt.
|
|
dimanche 28 janvier 2007 à 17:48:22 |
Re : Besoin d'explication : Pourquoi ca marche ?

f0xi
|
Réponse acceptée !
1. dans la déclaration des constantes FCL_SHOW et FCL_EDIT que signifient ($0001) et ($0002) ?
$ signifie que le chiffre qui suis vas etre en hexadecimal, $0001 et $0002 sont equivalant a 1 et 2, mais dans le cas de constante qu'on utilise comme des "flags" (switch de mode etc) on prefere souvent les ecrires en hexa avec parfois un transtypage inclus dans l'affectation : word($0001) pour signifier que FCL_? ne vas prendre que deux octets (registre 16 bits) et non dans un integer (registre 32bits). ici on aurait meme pus signifier : byte($01) et byte($02) pour les stocker dans un registre 8 bits. 2. Je suis donc obligé de garder Application.CreateForm(TForm_client, Form_client); dans la partie program.
Cela signifie-t-il que la Form est créée dès le démarrage du programme
? si oui, la mémoire nécessaire pour la création de la Form_client est
également allouée dès le démarrage du programme ?
en effet, avec cette methode c'est l'appli qui gere la creation de la fiche Form_Client, elle alloue egalement la memoire necessaire pour cette fiche dés le demarrage. la ou Cantador a tort et a la fois raison, c'est qu'il faut reflechir a 2 choses, en effet des petites fiches ne prendrons pas beaucoup de ressources memoire mais, une grosse fiche pourrait etre plus longue a etre crée. il faut donc reflechir au confort d'utilisation, soit on economise les ressources, soit on prefere la rapiditée d'utilisation. sincerement je prefere toujours laisser l'appli gerer les fiches consequentes ou petites, de toute façon, les ressources devront etre allouée tot ou tard, au moins, en allouant dés le debut, on est sur de la disponibilitée de ces dernieres quand on appeleras nos fiches enfants.
3. Dois-je mettre une Application.CreateForm(...) dans la partie program
pour toutes les Form qui vont exister dans mon logiciel ? Je veux dire
que si j'ai une trentaine de Form dans l'ensemble du logiciel, cela
fait beaucoup de Form crées dès le démarrage alors que seules
quelques-unes ne seront peut-être utilisées par l'utilisateur, non ?
voir ma reponse au dessus, a toi de gerrer correctement l'equilibre ressource/performance. voir TOpenDialog, TSaveDialog et surtout TCustomDialog, cela peut etre une bonne idée quand on a besoin de plusieurs fenetre "outils". on les appel directement par leur fonction Execute qui se charge de la creation et de la liberation. Croc (click me)
|
|
dimanche 28 janvier 2007 à 19:53:23 |
Re : Besoin d'explication : Pourquoi ca marche ?

cantador
|
Réponse acceptée !
Oui foxi, ce qui également intéressant afin de compléter ton explication, est qu'une fois la fiche créée, il n'est pas nécessaire de la re-contruire une deuxième fois, ainsi l'utilisateur verra le sablier (en cas de grosse fiche) au premier click mais lors du 2e la fiche s'ouvrira instantément... @+ cantador 
|
|
lundi 29 janvier 2007 à 04:10:54 |
Re : Besoin d'explication : Pourquoi ca marche ?
|
Cette discussion est classée dans : form, end, client, tform, main
Répondre à ce message
Sujets en rapport avec ce message
Create Form explication [ par Bruto ]
Salut,voila comme je débute en Delphi ( migration VB oblige ), je rencontre qq prob's.Explication ( ce que je voudrais ) :Mon programme se lance et pa
pb a creer un exe avec la principal form invisible [ par Winniez ]
J'ai voulu au demarrage de exe afficher une autre form que la form principal. a l'execution sa me met une erreur, apres g mis le meme code dans un bou
Form dans une dll mIRC [ par Delirium ]
Je suis en train de faire ma première source en Delphi pour me familiariser avec ce language, et je créer une dll pour mIRC.Je voudrais afficher une F
Réccupérer des données sur un autre Unit [ par m_cyril1 ]
J'ai fait un petit programme, celui-ci mémorise des chiffres entier sur une première form et sur la deuxième le résultat de la somme des chiffres s'af
dériver une form ? [ par DeltaFX ]
En fait j'ai besoin d'ajouter à la class Tform une procedure, donc de créer une classe du genre TExtendForm qui reprendraient tout d'une TForm normale
TIdTCPServer réouverture de connexion impossible [ par nitrique ]
Bonjour à tous,J'ai une connection TCP/IP indy avec TIdTCPServer et client.Sur le serveur, je lance mon application: OKSur le client je lance mon appl
Thread : Synchronize Bloqué !!!! [ par picolo5 ]
Bonjour à tous !Je dev un projet qui utlise une dll. Cette dll me permet de me connecter à un serveur et de recuperer une trame.J ai donc mis en place
TImage et TForm [ par Zareth ]
Wou, bon j'ai un autre soucis, je possède 2 composant TForm et dans l'un d'entre eux une TImage qui est définit comme alignée en alclient. Cette Form
deplacement de la form [ par Nicolas___ ]
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if appuie thenbeginform1.Left:=x;form1.Top:=y;end;end;Pourqu
configurer en client serveur [ par kadje84 ]
Salut à tous, bonne et heureuse année 2007svp, je voudrais un coup de main pour configurer mon ordinateur afin de tester les codes sources des applica
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|