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 :

Surcharger la méthode Create du composant TImage


Sujet :

Delphi

  1. #21
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par ero-sennin
    Oops, autant pour moi!

    Je débute juste dans le monde de la POO et j'ai encore pas mal à apprendre !

    Pas facile de naviguer entre toutes ces unités

    Merci pour cette info Pedro
    Avec plaisir
    Citation Envoyé par ero-sennin
    Donc, je dois utilisé la VCL et non les CLX ?
    C'était donc ca mon erreur? Mettre les Q... alors qu'il ne fallait mettre que les unités VCL!
    En fait, cela dépend de ce que tu veux faire. Si tu veux du multi plateforme (exporter facilement vers Kylix par exemple), utilise la CLX. Sinon, utilise la VCL. Ce sera beaucoup plus simple.
    En effet, la CLX nécessite le déploiement d'une DLL pour que le programme fonctionne sur un poste sans Delphi (qtintf.dll)
    Toutefois, suivant les versions de Delphi, la VCL et la CLX sont légèrement différentes. Par exemple, sous Delphi 7, MessageDlg de l'unité QDialogs (CLX) permet de spécifier le bouton par défaut de la boite. Ce que ne permet pas par défaut l'unité Dialogs (VCL).
    Ton erreur venait du fait que tu tentais de transtyper des classes VCL avec des classes CLX (ou vice versa). Elles n'ont pas le même nom et n'ont pas les mêmes méthodes. C'est donc impossible.
    Le "Q" devant les unités signifie simplement que l'unité est l'équivalente CLX de l'unité VCL du même nom.
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  2. #22
    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 : 39
    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
    Par défaut
    Que dire de plus, tout est clair !!

    Je comprends mieux le fonctionnement de ces unités!
    Je comprends mieux maintenant pourquoi ca ne fonctionner pas !

    On va rester simple pour commencer, la VCL me suffit amplement !

    Encore merci pour ces infos

  3. #23
    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 : 39
    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
    Par défaut
    Je réouvre le Post ! Bé oui, je m'en sors pas

    Mon soucis :
    ajouter des paramètre supplémentaire à mon create, ton en gardant les paramètres de ceux de la classe mère.

    Dans la classe TTables (héritée de TImage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    constructor Create(AOwner: TComponent);override;
     
    implementation
     
    constructor TTables.Create(AOwner: TComponent);
    begin
    Inherited;
    nbElements:=0;
    indiceCourant:=0;
    end;
    Dans la classe TEntite (héritée de TTables)
    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
    constructor Create(AOwner: TComponent);override;
     
    implementation
     
    constructor TEntite.Create(AOwner: TComponent);
    begin
    inherited;
    Self.Width:=150;
    Self.Height:=200;
    Self.Canvas.Pen.Color:=clBlack;
    Self.Canvas.Brush.Color:= clWhite;
    Self.Canvas.Brush.Style:=bsSolid;
    Self.Canvas.Rectangle(0,0,Self.Width,Self.Height);
    Self.Canvas.Polyline([Point(0,20),Point(Self.Width,20)]);
    Repaint;
    end;
    Dans la classe TRelation (héritée de TTables)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    constructor Create(AOwner: TComponent;EntiteA:TEntite;EntiteB:TEntite);override;
     
    implementation
     
    constructor TRelation.Create(AOwner: TComponent;EntiteA:TEntite;EntiteB:TEntite);
    begin
    inherited;
    //suite du code à définir
    end;
    Mais j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Erreur] Relation.pas(11): La déclaration de 'Create' diffère de la déclaration précédente
    Cela viendrait-il du fait que le create de TTables diffère de celui défini dans TRelation?

    Compliquer les constructeurs quand même !

  4. #24
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Utilise reintroduce en lieu et place de override
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    constructor Create(AOwner: TComponent;EntiteA:TEntite;EntiteB:TEntite);reintroduce;
    Cela aura pour effet de pouvoir ajouter des paramètres à la déclaration de l'ancêtre.
    Attention dans ce cas, ce que j'ai dis avant à Cl@udius tient toujours: Puisque les paramètres sont différents, tu ne peux plus faire:
    Tu es obligé d'appeler le Create explicitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inherited Create(AOwner);
    sinon, Delphi se perd
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #25
    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 : 39
    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
    Par défaut
    Encore une fois, ca fonctionne!

    Ca fait beaucoup de choses assimilées en peu de temps!
    Donc reintroduce pour ajouter des paramètres.

    Mais je ne comprends pas une chose.
    Pourquoi ne puis-je pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    constructor Create(AOwner: TComponent;EntiteA:TEntite;EntiteB:TEntite);reintroduce;override;
    Car si j'ai suivis :
    - override permet de surcharger sans redéfinir les paramètre de la méthode
    - reintroduce permet d'ajouter des paramères à une méthode tous en masquant les avertissements du compilateur informant qu'une méthode virtuelle précédemment déclarée est masquée.

    EDIT :

    J'ai vu sur certains posts, qu'il fallait mettre overload.
    C'est donc ceci que je dois utiliser si je veux surcharger mon create?

  6. #26
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par ero-sennin
    J'ai vu sur certains posts, qu'il fallait mettre overload.
    C'est donc ceci que je dois utilié si je veux en surcharger mon create?
    Tu te mélanges un peu les pinceaux:
    overload: permet de déclarer 2 fonctions avec des paramètres différents mais toujours accessibles
    exemple:
    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
     
    TMaClasse = class
    private
      procedure MaProcedure(Param: double); virtual
    end;
     
    TMaClasse2 = class(TMaClass)
    private
      procedure MaProcedure(Param: integer);overload;
    end;
     
    procedure Machin;
    begin
      MaClasse2.MaProcedure(12.4);
      MaClasse2.MaProcedure(12);
      //Tu gardes la possibilité d'appeler la méthode de la classe ancêtre
    end;
    reintroduce: permet de surcharger une méthode de l'ancêtre en modifiant les paramètres. Exemple:
    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
     
    TMaClasse = class
    private
      procedure MaProcedure(Param: double); virtual
    end;
     
    TMaClasse2 = class(TMaClass)
    private
      procedure MaProcedure(Param: integer);reintroduce;
    end;
     
    procedure Machin;
    begin
      MaClasse2.MaProcedure(12);
      //Tu ne peux que appeler ce Create
    end;
    Voila en gros sans les subtilités et j'espère que je ne me plante pas

    Citation Envoyé par ero-senin
    - reintroduce permet d'ajouter des paramères à une méthode tous en masquant les avertissements du compilateur informant qu'une méthode virtuelle précédemment déclarée est masquée.
    Ca sert à plus qu'à ça
    En fait, si le compilo te dit ça, c'est que tu redéclares une méthode avec le même nom qu'un méthode virtuelle de l'ancêtre. Donc la méthode ancêtre est cachée. Tu n'y a plus accès. Alors qu'en la surchargeant (override, overload ou reintroduce) tu gardes la possibilité de faire un inherited.
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #27
    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 : 39
    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
    Par défaut
    OK!

    En effet, je me perds un peu dans tout ca...

    Je vais faire quelques tests simple comme tu as fais afin de bien cerner ces mots clés car c'est hyper important de bien comprendre les différences entre ces divers mots clés !

    Merci d'avoir pris le temps de bien tout m'expliquer Pedro!

    Allez, je vais faire mes quelques tests

  8. #28
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par ero-sennin
    Allez, je vais faire mes quelques tests
    Si après tes tests, tu vois que je me suis planté, n'hésite pas à venir me corriger
    J'ai un doute surtout sur l'utilisation de inherited dans une méthode non-surchargée...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/12/2010, 12h26
  2. Comment surcharger la méthode OnClose d'un TFrame ?
    Par sdebrois dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/01/2005, 21h57
  3. [BCB6]Redimentionnement manuel d'un composant TImage
    Par vsavoir dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/09/2004, 12h55
  4. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 15h41
  5. mettre a blanc le composant TImage
    Par Chonchon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/11/2003, 10h24

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