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 :

Evénement onShow et onActivate d'une form


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut Evénement onShow et onActivate d'une form
    Bonjour,

    Je suis sous Fedora 16 64bits et j'utilisais depuis un certain temps une application développée sous Lazarus qui fonctionnait correctement sous Lazarus 0.9.31. Et voilà, problème.
    Je m'explique : j'ai écrit une application de gestion de données avec Sqlite ; je démarre une fiche principale et j'appelle d'autres fiches selon l'opération à réaliser par appui sur un bouton qui appelle l'autre fiche par ****.show comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFslcl.BArchiverClick(Sender: TObject);
    begin
      // archivage des données supérieures à 300 jours et validées
      if MTRANSFERT=False then TransfertPossible;
      Farchiver.Show;
    end;
    Dans cette nouvelle fiche archiver, j'ouvre une base avec un filtre concernant la date du jour - 300 et un autre élément du filtre une variable à oui voir ci-dessous
    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
    procedure TFarchiver.FormShow(Sender: TObject);
    begin
       // affichage des données archivables
      GridBank.Visible:=False;
      MVERIFIE:='OUI';
      MCODEDATE:=FloatToStr(Date()-300);
      Q1:=quotedstr(MCODEDATE);
      Q2:=quotedstr(MVERIFIE);
      data.bank.Close;
      MQ:='Select * from BANK WHERE CODEDATE< ('+Q1+') AND VERIFIE= ('+Q2+')';
      data.bank.SQL:=MQ;
      data.bank.Open;
      data.bank.ExecSQL;
      ENb.Text:=IntToStr(data.bank.RecordCount);
      ENb.Update;
        if data.bank.RecordCount=0 then
        begin
        MMESSAGE:='Pas de données à archiver';
        MessageInformation;
        Close;
        end
        else BValider.Enabled:=True;
    end;
    Puis ensuite je lance une boucle de traitement des données sélectionnées où je copie l'enregistrement dans une table d'archivage et j'efface l'enregistrement dans bank.

    Le problème est que j'utilisais l'événement FormShow pour lancer l'affichage filtré au moment de l'affichage de la fiche.
    Mon filtrage ne fonctionne plus et mon application recopie tous les éléments et vide donc ma table bank.
    Cherchant à résoudre le problème, j'ai fait du pas à pas en modifiant mon application et je constate que l'événement FormShow est activé dès le lancement de mon application.
    J'ai voulu remplacer FormShow par FormActivate mas je n'ai pas trouvé sur le Web en français l'explication de leur différence et leur usage.
    Donc je trouve étrange d'avoir ce problème aujourd'hui et de ne pas trouver d'explication sur la différence entre ces 2 événements. L'ancien wiki avec des explications de programmation semble avoir disparu, ou bien je suis aveugle.

    Merci d'avance pour une petite aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je ne sais pas si ce petit bout de code peut vous servir. Au fil des versions et des inconstances de Lazarus, échaudé par les déclenchements des activate, show & co, j'ai pris l'habitude d'overrider la méthode update des Forms (comme celle également de dériver pratiquement tous les composants majeurs notamment graphiques que j'utilise). Cela me permet de compenser pour une grande part les problèmes typiquement lazarusiens... Voilà pourquoi, je n'ai pas lâché(encore totalement) Lazarus.

    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
     TFormSplash = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { private declarations }
         procedure Update; override;
      public
        { public declarations }
      end;
     
    procedure TFormSplash.Update;
    var
     TimeDeb, TimeFin : TTime;
     DureeMilliSec    : Integer;
    begin
     inherited;
     //Pour Test
      TimeDeb := Now;
      Screen.Cursor:= crNone;
      {Définition des répertoires : Ts les répertoires st IncludepathDelimiter}
      Label1.Caption := rs002ServerConnections;
      Application.ProcessMessages;
      Sleep(1500);
    [...]
    end;
    Appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FormSplash:=TFormsplash.Create(Application);
      FormSplash.Show;
      FormSplash.Update;
      Application.ProcessMessages; // to be sure to show the splash
      [...]
    L'avantage est qu'on peut appeler la méthode au moment choisi... et d'où l'on veut.
    Ici l'affichage d'une Splash maison....

    Cordialement. Gilles
    Dernière modification par Invité ; 12/07/2012 à 16h58.

  3. #3
    Membre actif
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2008
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2008
    Messages : 385
    Points : 223
    Points
    223
    Par défaut
    Merci Gilles pour cette réponse rapide, mais il est dommage de devoir contourner des problèmes en écrivant de nouvelles fonctions.
    J'ai l'impression que le développement de Lazarus est dans un brouillard dense.
    Des problèmes anciens n'sont pas encore trouvé de solutions comme un composant que j'utilise beaucoup MaskEdit ou la mise en forme après validation laisse des espaces dans les valeurs décimales. C'est un petit problème simple que j'ai résolu via une fonction personnelle, mais je me demande si Lazarus arrivera à la version 1.0 et suivantes.
    C'est bien dommage.
    A+

Discussions similaires

  1. fermer une forme dans le OnActivate
    Par nn2009 dans le forum Débuter
    Réponses: 8
    Dernier message: 01/02/2012, 11h42
  2. [VB6] [Excel] Feuille dans une form, sans excel installé
    Par ro2v dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 05/05/2010, 13h45
  3. Evénement de fermeture d'une form
    Par abbd dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/04/2008, 16h33
  4. Evénement après l'affichage d'une Form
    Par nikhil dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/06/2005, 14h57
  5. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 04h51

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