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

 Delphi Discussion :

[Delphi 7] Déclaration d'un composant dynamique


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut [Delphi 7] Déclaration d'un composant dynamique
    Bonjour à toutes et tous.
    Je souhaite créer un TCheckList dynamiquement depuis un événement OnClicK.
    Le code suivant fonctionne :
    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
     
    var GroupCheckBox: TCheckListBox; // uses CheckLst !!!!;
        i,Nb_Items:integer;
    begin
       ...............
     
      GroupCheckBox:=TCheckListBox.Create(Form1);
      with GroupCheckBox do
        begin
          Parent:=Form1;
          Name:='GroupCheckBox'; // redondant !!!
          Caption:='Genre';
          Color:=clSkyBlue;
          Left:=RadioGroupGenre.Left+50;
          Top:=RadioGroupGenre.Top;
          Width:=RadioGroupGenre.Width;
          Style:=lbOwnerDrawFixed;
          ItemHeight:=20;
        end;
     
      for i:=0 to Nb_Items-1 do
        begin
          GroupCheckBox.Items.Add(RadioGroupGenre.Items[i]);
        end;
      GroupCheckBox.Height:=(Nb_Items+1)*20;
     
    ...............
    end;
    Mais si j'essaie d'utiliser le composant créé depuis une autre procédure, par exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        if not GroupCheckBox.Items[i].Checked then
    ..., j'obtiens un vilain message à la compilation : Identificateur non déclaré : 'GroupCheckBox' ! J'ai donc essayé diverses pistes, dont le déplacement de la déclaration GroupCheckBox: TCheckListBox ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        GroupCheckBox: TCheckListBox // j'ai essayé Ici !!!
    end;
     
    var
      Form1: TForm1;
      GroupCheckBox: TCheckListBox // puis j'ai essayé Là !!!
    ... sans succès (presqu'un après-midi complet )
    D'avance merci.
    Alain

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 090
    Par défaut
    ne déclare GroupCheckBox qu'une seule et unique fois !

    soit Private si juste pour l'intérieur de la fenêtre
    soit Public si accesible depuis une autre unité !

    le Name n'est pas obligatoire !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci pour ta réponse, ShaiLeTroll.
    J'ai opté pour Private, mais j'obtiens un nouveau message d'erreur : Type Record, Object ou Class requis (à la compilation de la même ligne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if not GroupCheckBox.Items[i].Checked then

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Désolé, mais j'ai de gros progrès basiques à réaliser .
    Code erroné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if not GroupCheckBox.Items[i].Checked then
    Bon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if not GroupCheckBox.Checked[i] then
    Toutefois, j'avoue ne pas saisir le distinguo
    Bon week-end.
    Cordialement,
    Alain

  5. #5
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    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
    unit Unit22;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, CheckLst, StdCtrls, ExtCtrls;
     
    type
      TFormMain = class(TForm)
        ButtonCheckList: TButton;
        RadioGroupGenre: TRadioGroup;
        procedure ButtonCheckListClick(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      public
        CheckList : TCheckListBox;
        procedure DoCheckListClick(Sender: TObject);
        procedure DoCheckListDblClick(Sender: TObject);
      end;
     
    var
      FormMain: TFormMain;
     
    implementation
     
    {$R *.dfm}
     
    procedure TFormMain.DoCheckListClick(Sender: TObject);
    begin
      //
    end;
     
    procedure TFormMain.DoCheckListDblClick(Sender: TObject);
    begin
      //
    end;
     
    procedure TFormMain.ButtonCheckListClick(Sender: TObject);
    var N : integer;
    begin
      if not assigned(fCheckList) then
      begin
        CheckList := TCheckListBox.Create(Self);
     
          CheckList.SetBounds(RadioGroupGenre.left+RadioGroupGenre.Width+4,
                               RadioGroupGenre.Top,
                               RadioGroupGenre.Width,
                               RadioGroupGenre.Height);
     
          CheckList.Color        := clSkyBlue;
          CheckList.Style        := lbOwnerDrawFixed;
          CheckList.ItemHeight   := 20;
     
          CheckList.OnClick      := DoCheckListClick;
          CheckList.OnDblClick   := DoCheckListDblClick;
     
          CheckList.Parent       := Self;
     
          CheckList.Items.Assign(RadioGroupGenre.Items);
          for N := 0 to CheckList.Count - 1 do
            CheckList.Checked[N] := true;
      end;
     
      (Sender as TButton).Enabled := not assigned(CheckList);
    end;
     
    procedure TFormMain.FormDestroy(Sender: TObject);
    begin
      if Assigned(fCheckList) then
        CheckList.Free;
    end;
     
    end.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 181
    Par défaut
    Merci,Dr.Who.
    Je vais potasser ton code pour essayer de progresser un peu dans ma compréhension de Delphi (il ne faut pas se contenter d'un pur et simple copier-coller de code )
    Bon week-end.
    Cordialement,
    Alain

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

Discussions similaires

  1. Déclaration d'un composant dynamique
    Par darkman13130 dans le forum C++Builder
    Réponses: 9
    Dernier message: 12/02/2009, 15h05
  2. Réponses: 14
    Dernier message: 17/12/2008, 09h49
  3. créer composant dynamiquement avec sa déclaration
    Par Mihalis dans le forum Delphi
    Réponses: 27
    Dernier message: 13/06/2007, 09h14
  4. [THandle][DLL] Composant dynamique et THandle
    Par el_diablos dans le forum Langage
    Réponses: 10
    Dernier message: 01/07/2004, 15h01
  5. [JTabbedPane] Accès à des composants dynamiques
    Par SamRay1024 dans le forum Composants
    Réponses: 8
    Dernier message: 26/05/2004, 13h04

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