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

Langage Delphi Discussion :

LiveBindings au runtime : Construction d'instance <nominstance> contenant la méthode abstraite <nomméthode>


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 227
    Points : 38 431
    Points
    38 431
    Billets dans le blog
    59
    Par défaut LiveBindings au runtime : Construction d'instance <nominstance> contenant la méthode abstraite <nomméthode>
    Bonjour,

    Créer des liens au runtime, c'est possible quelque soit le "framework" VCL ou FMX ce n'est pas là le propos de ma question .

    Voici par exemple comment je crée un lien entre une grille et un prototypebindsource (donc, en gros, une liste d'objets)
    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
     
    procedure TForm2.FormCreate(Sender: TObject);
    var ALinkGrid : TLinkGridToDataSource;
    begin
       ALinkGrid:=TLinkGridToDataSource.Create(Self);
       with ALinkGrid do
        begin
          DataSource := MasterPrototype;
          GridControl :=Grid1;
          with Columns.Add do MemberName:='IdCommande';
          with Columns.Add do
            begin
              MemberName := 'NomClient';
              Width := 120;
            end;
          with Columns.Add do MemberName := 'DateCommande';
          OnAssignedValue := LinkGridToDataSourceMasterPrototypeAssignedValue
         end;
     
      .....
      MasterPrototype.Active:=True;
    end;
    ma question concerne ce type de message du compilateur donc voici un extrait
    [dcc32 Avertissement] MainUnit.pas(39): W1020 Construction d'instance de 'TLinkGridToDataSource' contenant la méthode abstraite 'TBindComponentDelegate.Reactivate'
    [dcc32 Avertissement] MainUnit.pas(39): W1020 Construction d'instance de 'TLinkGridToDataSource' contenant la méthode abstraite 'TBindComponentDelegate.RequiresControlHandler'
    Qu'est-ce que ces messages d'avertissement impliquent en clair ? (j'ai bien lu ceci mais
    Comment ne pas les avoir dans ce contexte particulier ? (bien entendu pas en indiquant simplement de les ignorer)
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 227
    Points : 38 431
    Points
    38 431
    Billets dans le blog
    59
    Par défaut
    En appliquant ce qui est indiqué
    Une autre approche du problème serait de dériver une classe de Base puis de fournir une version concrète d'Abstraction.
    j'ai hacké la classe ainsi est-ce la bonne méthode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type
      THackLink = class(TLinkGridToDataSource)
        procedure Reactivate; virtual;
        procedure RequiresControlHandler; virtual;
      end;
    j'obtiens maintenant cet avertissement , peut-être moins grave ?
    [dcc32 Avertissement] MainUnit.pas(15): W1010 La méthode 'Reactivate' cache une méthode virtuelle de type de base 'TBindComponentDelegate'
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    mars 2005
    Messages
    3 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : mars 2005
    Messages : 3 745
    Points : 10 930
    Points
    10 930
    Billets dans le blog
    6
    Par défaut
    Bonjour Serge,

    A quoi pourraient servir ces procédures prévues mais pas implémentées dans un TLinkGridToDataSource, qu'il hérite d'un TBindComponentDelegate ?

    Je lis ici que certains objets de liaison rapide (comme le TLinkGridToDataSource ?) utilisent des délégués pour exécuter les expressions et surveiller les saisies utilisateur.

    Sont-ce des méthodes qui n'ont pas à être appelées dans le contexte de cet objet et n'ont donc pas été implémentées ? Montrant dans ce cas une hiérarchie insuffisamment séparée.

    Si c'est le cas, mieux vaut dériver un objet en implémentant ces méthodes par un DoNone pour échapper aux avertissements, mais ça ressemble un peu à balayer la poussière sous le tapis !
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 227
    Points : 38 431
    Points
    38 431
    Billets dans le blog
    59
    Par défaut
    Bonjour,

    Citation Envoyé par tourlourou
    certains objets de liaison rapide (comme le TLinkGridToDataSource ?) utilisent des délégués
    Cette petite phrase ou plus exactement le "liaison rapide" m'a mis sur la voie

    Il ne fallait pas que je m'inspire d'une liaison rapide mais d'une liaison manuelle pour créer mes liens au runtime
    en changeant donc mon fusil d'épaule cela donne cela
    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
    procedure TForm2.FormCreate(Sender: TObject);
    var ALinkGrid : TBindGridlink;
        AColExpression : TColumnLinkExpressionItem;
    begin
     ALinkGrid:=TBindGridLink.Create(self);
     with ALinkGrid do
      begin
          ControlComponent := Grid1;
          SourceComponent := MasterPrototype;
          AColExpression:= ColumnExpressions.AddExpression;
          With AColExpression do
            begin
              ColumnName := 'IdCommande';
              ColumnIndex := 0;
              SourceMemberName := 'IdCommande';
              with FormatCellExpressions.AddExpression do
                begin
                  ControlExpression := 'Data';
                  SourceExpression := 'Value';
                end;
            end;
          AColExpression:= ColumnExpressions.AddExpression;
          With AColExpression do
            begin
              ColumnName := 'NomClient';
              ColumnIndex := 1;
              SourceMemberName := 'NomClient';
              With FormatCellExpressions.AddExpression do
                begin
                  ControlExpression := 'Data';
                  SourceExpression := 'Value';
                end;
            end;
          With PosControlExpressions.AddExpression do
           begin
              ControlExpression := 'Selected';
              SourceExpression := 'Math_Max(0,ItemIndex)';
            end;
          with PosSourceExpressions.AddExpression do
            begin
              ControlExpression := 'Math_Max(0,Selected)';
              SourceExpression := 'ItemIndex';
            end;
      end;
    MasterPrototype.Active:=True;
    end;
    et plus d'erreur d'avertissement
    Pff !!! je vais en avoir à expliquer des choses dans ce tutoriel la démarche n'est quand même pas aussi simple que cela !
    j'ai même eu quelques soucis entre des expressions comme Cells[0] ou Data, Text ou Value et même DB_Utilsxxxx versus ItemIndex
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

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

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