IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Optimisation d'exécution en parallèle de plusieurs formulaires [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut Optimisation d'exécution en parallèle de plusieurs formulaires
    Bonjour à tous, débutant en langage Pascal encore plus sous Lazarus, j'ai eu un problème sur un projet avec un formulaire maître et un autre formulaire dont le but est d'afficher un QCM chronométré.
    J'ai donc créé un mini projet pour voir comment je pouvais gérer ça : aucune aide trouvée sur la toile à ce sujet :/.

    Voici la composition de mon interface :
    Form1 :
    NOM : frmPrime
    Unité : UPrime

    Objets (5):
    TEdit => edUp ; edDown ; edLeft ; edRight
    Tmemo => mmoPrime

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure TfrmPrime.FormKeyDown
    Form2 :
    NOM : frmDeus
    Unité : UDeus

    Objets (3):
    TEdit => edStart ; edMsg
    TTimer => tmrTxt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure FormCreate
    procedure FormKeyPress
    procedure tmrTxtTimer
    Le code source se trouvera à la suite de ce message.

    Le premier formulaire gère la saisie clavier : il répond aux flèches et affiche son nom dans la case TEdit correspondante.
    et de l'appuis sur 'Espace' et 'Entrée' pour activer le second formulaire.

    En reprenant ce projet j'ai vu une erreur toute bête : l'utilisation de 'form create' n'a pas été judicieux : je testerai ce soir le changement d'état du TEdit correspondant au test d'activation virtuel de mon formulaire secondaire.

    Le problème rencontré une mini boucle "For i := 1 To 5 Do showMessage('Count down :' + intToStr(5 - i));"
    Ecrit au début du second formulaire et qui s'affiche dés le lancement de l’exécutable : pour palier à ce problème, j'ai crée un TEdit : 'edStart' initialisé à '0' et qui change sa valeur quand le premier formulaire le décide pour que Form2 s’exécute en différé.

    Je voulais savoir si une autre solution existait pour empêcher les formulaires secondaires d'être actif dés le départ.
    Cordialement

  2. #2
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    ======= Code Source =======
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    procedure TfrmPrime.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    Var txt, rc : String;
    Begin
    	rc := Chr(10)+Chr(13);	(* Retour Chariot *)
    	If ((Key = VK_SPACE) Or (Key = VK_RETURN)) Then Begin
    		txt := 'You press a special key for this program :' + rc;
    		If (Key = VK_SPACE)
    			Then txt := txt + 'Key [Espace] detected !!' + rc
    			Else txt := txt + 'Key [Entrée] detected !!' + rc;
    		txt := txt + 'lancement du second formulaire ...';
    		showMessage(txt);
    		frmDeus.edStart.Text := '1';
    		(* element initialisé à '0' pour empecher son lancement automatique *)
    		frmDeus.Visible := True;
    	End Else If (Key = VK_ESCAPE) Then Begin
    		txt := 'You press [Echap] key !!' + rc + 'Au revoir !!' + rc +'Et à bientôt ;) !!';
    		showMessage(txt);
    		Application.Terminate;
    	End;
    	If (Key = VK_UP)
    		Then edUp.Text := 'HAUT'
    		Else edUp.Text := '';
    	If (Key = VK_DOWN)
    		Then edDown.TExt := 'BAS'
    		Else edDown.Text := '';
    	If (key = VK_LEFT)
    		Then edLeft.Text := 'GAUCHE'
    		Else edLeft.Text := '';
    	If (Key = VK_RIGHT)
    		Then edRight.Text := 'DROITE'
    		Else edRight.Text := '';
    	key := 0;
    End;
     
    	*** Unit 2 : UDeus ***
     
    procedure scrollTxt();
    Var txt, t2 : String;
    Begin
    	txt := frmDeus.edMsg.Text;
    	(* copie de tous les caracteres sauf le premier : *)
    	t2 := copy(txt, 2, Length(txt) - 1);
    	(*scroll vers la gauche du message originale : *)
    	frmDeus.edMsg.Text := t2 + txt[1];
    End;
     
    procedure TfrmDeus.tmrTxtTimer(Sender: TObject);
    Begin
    	scrollTxt();
    End;
     
    procedure TfrmDeus.FormKeyPress(Sender/ TObject; var Key: char);
    Begin
    	tmrTxt.Enabled := False;
    End;
     
    procedure TfrmDeus.FormCreate(Sender: TObject);
    Var
    	i, dim, n, r : Byte;
    	runUnit : Boolean;
    	txt, rc : String;
    Begin
            (* création d'un Tedit 'edStart' initialisé à '0' pour éviter
                l'affichage des 'showMessage()' de la boucle : cette fameuse boucle
                m'a démontré que ce deuxième formulaire était bien exécuté dés le lancement de l'application
                pour empêcher ça, je n'ai trouvé que cette solution. *)
    	runUnit := (edStart.Text = '1');
    	rc := Chr(10) + Chr(13);
    	If (runUnit) Then Begin
    		showMessage('This message don''t read at the beginning' + rc +'I am Unit Two !!');
    		For i := 1 To 5 Do showMessage('Count Down : ' + intToStr(5 - i));
    		txt := 'Ready For Question 1 ?';
    		(* calcul pour centrer le text dans le TEdit pouvant contenir 45 caracteres : *)
    		dim := Length(txt);
    		n := Floor((45 - dim) / 2);
    		r := 45 - (dim + 2 * n);
    		For i := 1 To n Dotxt := ' ' + txt + ' ';
    		If (r = 1) Then txt := ' ' + txt;
    		edMsg.Text := txt;
    		tmrTxt.Enabled := True;
    	End;
    End;
    Ce soir je supprimerai le code create form et le remplacerai par procedure TfrmDeus.edStartChange(Sender: TObject);

  3. #3
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    J'espère que ma question est assez clair => empêcher l'exécution d'un autre formulaire avec un 'Tedit'
    qui se verra se mettre à une valeur donné pour retardé le déroulement de ses commandes ; événements ; etc ...

    Aucune autre solution en travaillant depuis le formulaire de base, ou par paramétrage des formulaires secondaires.
    Peut-être que des personnes maîtrisant un langage visuel (visual Basic, visual c++, ou encore mieux lazarus) pourrait m'éclaircir sur ce point .
    Cordialement.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 300
    Points
    11 300
    Billets dans le blog
    6
    Par défaut
    Bonsoir,
    Je voulais savoir si une autre solution existait pour empêcher les formulaires secondaires d'être actif dés le départ.
    Si la seconde fiche est créée automatiquement par l'application, ce qui figure dans son OnCreate s'exécute dès sa création, donc au démarrage.
    Le code à n'exécuter qu'à la demande gagne donc à être logé dans une méthode de cette fiche, appelée par celle maîtresse.
    Sinon, il suffit de ne pas laisser l'application créer cette fiche automatiquement (Options du projet ; retirer la fiche de la liste des créations auto) ou bien de la créer (puis détruire) par code dans la fiche maîtresse au moment du besoin.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    [Edité]
    Merci, j'ai étudié les cas énoncés :
    Si j'ai bien compris le premier : créer des procédures spécifiques pour une fiche secondaire mais les gérer que par la fiche primaire pour mieux maitriser l'exécution du code :
    Le code à n'exécuter qu'à la demande gagne donc à être logé dans une méthode de cette fiche, appelée par celle maîtresse.
    ça me semble très logique d'un côté pour une meilleure maitrise, mais impose de bien planifier une stratégie d'appel des méthodes de la fiche subalterne, de ses évènements, etc ...

    J'ai testé avec succès la seconde proposition qui est exactement ce dont j'avais besoin : retirer la fiche secondaire de la liste des créations auto, mais je dois combiner cette solution avec la gestion détruire / créer une fiche pour mon projet de fenêtres QCM.
    Par contre, gérer une fiche je n'y suis pas arriver, je vais tester la méthode similaire à l'ouverture d'un fichier : utiliser une variable mais si ça demande des procédures spécifiques et que je ne trouve rien je risque de revenir faire un nouveau tread sur votre forum.

    Voilà, juste pour obtenir les quelques petit renseignements sur ma compréhension avant de passer le sujet en 'problème résolu', sinon en ce qui concerne la gestion de fiches j'espère trouver la solution très prochainement !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GUNICORN] [FLASK] Optimisation nombre exécutions parallèles
    Par pimpin190 dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 06/05/2019, 15h50
  2. Optimisation de lecture parallèle de plusieurs fichiers
    Par thebop dans le forum Programmation parallèle, calcul scientifique et de haute performance (HPC)
    Réponses: 19
    Dernier message: 02/01/2012, 17h00
  3. Exécution en parallèle de plusieurs procédures
    Par sofiane2011 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 25/02/2011, 15h56
  4. [optimisation] Plusieurs formulaires vs 1 seul ?
    Par Mos dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/11/2004, 14h10
  5. [C#] Utiliser plusieurs formulaires serveur
    Par Anomaly dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/10/2003, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo