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 :

Interaction entre composants d'une même Form [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut Interaction entre composants d'une même Form
    Bonjour,

    J'ai un problème d'interaction entre deux composants d'une même Form...
    Le deuxième composant fait appel au premier. Si je déclare le premier dans une property du second : RAS. Je supprime alors le premier composant de la Form... et cela déclenche un plantage "sec" de l'IDE.

    Je me suis demandé si le plantage est lié au déclenchement d'un évènement du second composant, évènement qui serait lancé automatiquement par l'IDE lors de la suppression du premier sans le trouver... A moins que le problème ne soit lié directement à la Form et à son .lfm ? Mais en général dans ce cas, un message explicite d'erreur apparaît et ce n'est pas le cas ici.

    Des informations sur le mécanisme de fonctionnement de l'Inspecteur d'Objet ?

    Merci.
    Cordialement. Gilles

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

    Voici un code qui permet d'éviter le plantage (ici suppression d'un DataSet lié au ComposantDeTest)
    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
    type
      TComposantDeTest = class(TCustomStringGrid)
      private
        { Private declarations }
        FDataSet : TDataset;
      protected
        { Protected declarations }
       public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        procedure Notification(aComponent: TComponent; Operation: TOperation); override;
      published
        { Published declarations }
       property Dataset : TDataset read FDataset write FDataset;
    end;
     
    [...]
     
    implementation
     
    [...]
    { TComposantDeTest }
    procedure TComposantDeTest.Notification(aComponent: TComponent;  Operation: TOperation);
    begin
      inherited;
      if (Operation = opRemove) and (Assigned(FDataset)) and (aComponent = FDataset) then
        FDataset := nil;
    end;
    Ceci est évidemment transposable à autre chose qu'un DataSet.

    En ce qui concerne le fonctionnement des composants, c'est assez curieux. En réalité cela dépend si la property est remplie ou non et comment sa valeur est définie (dans l'Inspecteur d'objet ou/et par programmation dans le code de l'unit qui l'utilise). Par exemple, on peut avoir Create-Lecture de la Property-Loaded. Mais on peut avoir aussi Create-Lecture de la Property-Loaded et reLecture de la Property... Pour me remémorer facilement tout cela, j'ai fait un pdf (en mode csDesigning et Running). Si cela intéresse quelqu'un...


    Cordialement. Gilles
    Dernière modification par Invité ; 19/02/2011 à 20h54.

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

Discussions similaires

  1. Lire plusieurs vidéos sur une même form en même temps
    Par kurul1 dans le forum C++Builder
    Réponses: 33
    Dernier message: 21/04/2008, 09h04
  2. Comment partager une même form entre 2 projets ?
    Par WebPac dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/12/2007, 16h17
  3. Créer par code des relations entre tables d'une même base ?
    Par AndréPe dans le forum Modélisation
    Réponses: 2
    Dernier message: 21/11/2007, 18h27
  4. Affichage de plusieurs graphiques sur une même form
    Par redpulse dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/02/2007, 08h41
  5. Ouvrir une même Form x fois à partir de y Forms
    Par Hobbi1 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/09/2006, 11h50

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