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 :

Création d'une class contenant un TEdit (Débutant)


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut Création d'une class contenant un TEdit (Débutant)
    Bonjour, j'aimerai créer une class contenant un TEdit.
    Voila comment j'ai fait:

    Voici la declaration de la class contenant le TEdit:
    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
     
    type
     Tmyclass = class
      private
        t:TEdit;
      public
        constructor Create;
        destructor Destroy;
      published
        property text1:string read t.text write t.text;
      end;
     
    constructor Tmyclass.Create;
    begin
      t.Text:='new';
    end;
     
    destructor Tmyclass.Destroy;
    begin
    end;
    Voici le bout de code dans lequel je teste ma class:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
    ex:Tmyclass;
    begin
    ex:= Tmyclass.Create;
    button2.Caption:=ex.text1;
    end;
    Deux problemes se pose a moi:
    1) D'apres mon exemple losque j'appuis sur le bouton2 on devrait voir marqué dessu 'new'. Or je me fais jeter a la compilation car le compiateur de delphi n'aime pas: ' property text1:string read t.text write t.text; '
    Pk?

    sinon j'ai reussi a compiler en retirant cette ligne et en mettant a la place le teste suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
    ex:Tmyclass;
    begin
    ex:= Tmyclass.Create;
    button2.Caption:=ex.t.Text;
    end;
    Mais la il quand j'appui sur le bouton2 il me marque dedans du vide au lieu de me mettre 'new'. Si quelqu'un pouvait me dire ce qui cloche dans ce code?

    2) Le deuxieme probleme qui se pose a moi est pourquoi le TEdit ne s'affiche pas dans le Form1?
    Comment faire pour le voir s'afficher?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
     
     Tmyclass = class(TCustomPanel)
      private
        FEdit:TEdit;
        FText: string;
        procedure SetText(const Value: string);
        function GetText: string;
      public
        constructor Create(AOwner: TComponent);
        destructor Destroy;
      published
        property Text: string read GetText write SetText;
      end;
     
    var
      Form1: TForm1;
      Compo: Tmyclass;
    implementation
     
    {$R *.DFM}
     
    { Tmyclass }
     
    constructor Tmyclass.Create(AOwner: TComponent);
    begin
      inherited;
      FEdit := TEdit.Create(nil);
      with FEdit do
      begin
        Parent := Self;
        SetBounds(10,10,100,100);
        Visible := True;
      end;
    end;
     
    destructor Tmyclass.Destroy;
    begin
      if Assigned(FEdit) then FreeAndNil(FEdit);
      inherited;
    end;
     
    function Tmyclass.GetText: string;
    begin
      Result := FEdit.Text;
    end;
     
    procedure Tmyclass.SetText(const Value: string);
    begin
      FText := Value;
      FEdit.Text := Value;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Compo := Tmyclass.Create(Form1);
     with Compo do
     begin
      Parent := FOrm1;
      SetBounds(0,0,200,200);
      Visible := True;
      Color := clGray;
     end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Button1.Caption := Compo.Text;
    end;
     
    end.
    le dfm:
    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
    object Form1: TForm1
      Left = 206
      Top = 223
      Width = 783
      Height = 540
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 344
        Top = 6
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 0
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 344
        Top = 42
        Width = 75
        Height = 25
        Caption = 'Button2'
        TabOrder = 1
        OnClick = Button2Click
      end
    end

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Salut fabrice,

    J'ai pris ton code et ca marche bien.
    Cependant que je comprends pas tout.

    A quoi sert l'instruction 'inherited'?

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Inherited permet de faire appel, dans le constructeur par exemple, à la méthode create du composant hérité ...

    De cette façon, le Create de ta classe va appeler le Create de la class TCustumPanel ...

    J'espère que c'est clair

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par ero-sennin
    Inherited permet de faire appel, dans le constructeur par exemple, à la méthode create du composant hérité ...
    C'est parce qu'il fait un temps pourri chez moi, alors...
    J'aurais plutot tourné la phrase ainsi:

    Inherited permet de faire appel, dans le constructeur par exemple, à la méthode create du composant dont il hérite ...

    @+ Claudius

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Merci a tous pour ces infos...

    Je pense qu'il est temps que je me trouve un bon tutorial sur les classes.

    Si vous avez en connaissé je suis preneur...

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

Discussions similaires

  1. [PDO] Création d'une classe contenant du PDO -> Erreur avec les 'fetch'
    Par Cedrinho dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/06/2010, 08h53
  2. Réponses: 19
    Dernier message: 14/08/2007, 14h41
  3. Réponses: 3
    Dernier message: 06/05/2007, 19h46
  4. Réponses: 7
    Dernier message: 01/09/2006, 14h19
  5. Réponses: 10
    Dernier message: 10/01/2006, 14h14

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