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

Composants FMX Delphi Discussion :

Equivalent usage QTableView


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Equivalent usage QTableView
    Bonjour,

    je cherche à réaliser la même chose en FMX (Windows-Linux et mac OS) qu'en Qt.

    J'utilise une QtableView (une sorte de TGrid) dont les cellules d'une même ligne contiennent des objets différents : Par exemple, la première colonne contient un ID (caché), la seconde un TLabel et la troisieme un TMemo (HTML ). En Qt, je promeus une QTableview classique. Par essence même, son approche est "ouverte" pour réaliser ce genre d'approche.

    En Lazarus, je doute que cela soit possible et je n'ai pas d'idée de contenant ? Un espèce de TFlowPanel avec ScrollBar ? Cela existe cela ?

    Mais en FMX, est-il possible d'encapsuler dans les cellules d'une ????, des objets différents, objets évidemment que je peux rendre actifs (i.e. dans lesquels je peux travailler notamment le TMemo) ? Un TGridPanel semble envisageable mais sans aucune certitude. J'aimerais voir les images

    Pourriez-vous m'orienter ?

    Merci. Cordialement. Gilles
    Dernière modification par Invité ; 10/05/2022 à 13h57.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    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 101
    Par défaut
    Un TDBCtrlGrid en VCL resemble-t-elle un peu à un QTableview ?

    Si oui
    En FMX comme tout peut être parent d'un composant, il faut utiliser un TListView, on peut mettre des checkbox, progressebar ... c'est Appearances

    A lire Customizing FireMonkey ListView Appearance

    Si non,
    Une maquette de la grille souhaitée peut-être ?
    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
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Bonjour Gilles,
    Alors si tu veux pouvoir faire de la saisie ce n'est pas un TListView qu'il faut choisir.
    Un scrollbox contenant des Frames me semble plus adapté (bien qu'il faille gérer beaucoup de choses "à la main") s'il s'agit d'un ensemble d'enregistrements

    Un FlowPanelLayout ou un GridPanelLayout (plus complexe à mon avis), serait pour un enregistrement unique (pourquoi pas dans une Frame d'ailleurs).

    Quant à l'HTML rien dans la parie Embarcadero, mais il y a toujours les composants tiers (https://github.com/digao-dalpiaz/DzHTMLText)

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

    merci pour ces réponses.

    Alors va pour un TScrollBox, même un TVertScrollBox chez Delphi.
    J'avais regardé en Lazarus et je trouvais la solution fastidieuse : Il m'aurait fallu déclarer un array de TspeedButton, un autre de TMemo,... et j'aurais créé mes lignes [TEdit-TMemo-TSpeedButton1-TSpêedButton2] dynamiquement à partir du parcours des tables de la BDD. Et comme je voulais pouvoir modifier la hauteur de chaque TMemo à la souris, pour garder une structure "ligne par ligne", la gestion des ancrages des objets les uns par rapport aux autres aurait nécessité pas mal de lignes de code. Mais avec Lazarus, les ancrages sont assez performants et surtout ne nécessitent pas de composant supplémentaire... La création dynamiquement (ie le code de leur création) est facile à produire.

    Avec Delphi, il va falloir que j'ajoute au moins un voire plusieurs composants (des layouts ?) pour gérer la géométrie de l'ensemble à l'intérieur du TVertScrolllBox notamment quand je vais modifier la hauteur d'un des TMemo. Je crains que cela n'ait une grande influence sur le TVertScrollBox (ie sur son SCrollBar). Mais ce n'est qu'une crainte pour l'instant.

    Je regarde cela de plus près.
    Cordialement. Gilles

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Bonjour Gilles,

    en fait je ne comprends pas vraiment le besoin. Tout ce que j'ai vu de QTableView ressemble furieusement à un TGrid .
    Sauf bien sûr ce problème de HTML, je vais mettre ça dans ma todolist "dans un an" : "créer un nouveau type de colonne contenant un dzHTMLText" ça pourrait être sympa
    de même que "ajouter un autre type d'objet (un dzHTMLText) a un TListview"
    à moins qu'un style (une de tes bêtes noires) + un Tlistbox soit une solution

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

    oui, à la base un QTableView est un TGrid sauf que le premier tient les promesses reprécisées par ShaïLeTroll pour Delphi... que je ne parviens pas à réaliser en FMX
    Citation Envoyé par ShaiLeTroll Voir le message
    [...]En FMX comme tout peut être parent d'un composant[...]
    sauf que dans la même phrase cela se gâte :
    Citation Envoyé par ShaiLeTroll Voir le message
    [...]il faut utiliser un TListView, on peut mettre des checkbox, progressebar,...
    Donc un TGrid, puisque le TGrid fait partie de "tout", on peut pas mettre n'importe quel objet dans une cellule, par exemple un TMemo. Je demande à voir. D'autant que la "liaison" -je ne sais pas comment appeler cela en Firemokey, disons, le placement du TMemo dans la TCell- cela se fait (ferait) par LiveBinding bien entendu. En Qt c'est simplement du C++ à la main. La difficulté est non pas d'incorporer l'objet mais de le faire réagir par exemple au redimensionnement de son composant ou l'inverse.

    Voila ce que j'essaie en vain de faire depuis très longtemps en Pascal. C'est en Qt. Je l'ai fait en 2016 [en Qt 5.5]. Il n'y a aucun composant. Tout est fait à la main... en pur C++ : c'est une "promotion" classique d'un widget de base.
    https://www.ixaw.fr/video/qtableview-220511.mp4
    Évidemment, le code fonctionne sous Windows, Linux et mac OS. J'ai le même en QTreeview

    Je déplore vraiment d'être incapable de faire cela en Firemonkey. Je ne vois pas pourquoi techniquement je serais capable de le faire en Qt et pas en FMX alors que j'ai appris le Pascal avant le C++ . Et comme le dit Paul, l'utilisation de composants (comme TMS) ce n'est pas vraiment "le mieux". Mais faute de mieux, justement... Je me demande d’ailleurs pourquoi je m'obstine ? Peut-être parce que j'aime tout simplement le Pascal...

    Donc Serge, pour en revenir à ma demande et préciser les choses, incapable de modifier une TGrid en Firemonkey pour obtenir le résultat escompté, j'élimine aussi les TMSFNCGrid [qui n'ont pas vraiment les mêmes capacités] et de ce fait, je cherche une autre solution pour obtenir quelque chose de fonctionnel et d'esthétique fonctionnant sous les 3 OS desktop que j'utilise.
    Cordialement. Gilles
    Dernière modification par Invité ; 11/05/2022 à 14h47.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Ah, avec cette petite vidéo je comprends mieux le besoin.
    on peut pas mettre n'importe quel objet dans une cellule, par exemple un TMemo.
    Une colonne peut très bien contenir un memo ça ce n'est pas un problème, par contre autant je sais comment gérer une largeur de colonne "élastique" je n'ai jamais testé une hauteur de ligne variable (ce qu'il est possible de faire avec un TListView).

  8. #8
    Invité
    Invité(e)
    Par défaut
    oui, enfin quand je dis un TMemo, je pense à un TMemo affichant le HTML. Je vais regarder avec les TMS ce que je peux faire en développement "classique" dans un TVertScrollBox.
    Dernière modification par Invité ; 11/05/2022 à 15h12.

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par HTML-Dev Voir le message
    oui, enfin quand je dis un TMemo, je pense à un TMemo affichant le HTML.
    J'avais compris pour le HTML mais modifiable ou non ?

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 663
    Billets dans le blog
    65
    Par défaut
    Sans type de colonne particulier
    Citation Envoyé par SergioMaster Voir le message
    autant je sais comment gérer une largeur de colonne "élastique" je n'ai jamais testé une hauteur de ligne variable.
    Je ne crois pas que la hauteur variable soit possible, sur le Grid de base tout au plus ai-je réussi à retailler au plus grand.

    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
    procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
      const Column: TColumn; const Bounds: TRectF; const Row: Integer;
      const Value: TValue; const State: TGridDrawStates);
    var  ATextLayout : TTextLayout;
         h : single;
     
    function GetTextHeight(const L: TTextLayout; const Width: single; const
                             Text: string): Integer;
    var
      Layout: TTextLayout;
    begin
      Layout := TTextLayoutManager.DefaultTextLayout.Create;
      try
        Layout.BeginUpdate;
        try
          Layout.Font.Assign(L.Font);
          Layout.VerticalAlign := TTextAlign.Leading;
          Layout.HorizontalAlign := TTextAlign.Leading;
          Layout.WordWrap := True;
          Layout.Trimming := TTextTrimming.Word;
          Layout.MaxSize := TPointF.Create(Width,
                          TTextLayout.MaxLayoutSize.Y);
          Layout.Text := Text;
        finally
          Layout.EndUpdate;
        end;
        Result := Round(Layout.Height);
        Layout.Text := 'm';
        Result := Result + Round(Layout.Height);
      finally
        Layout.Free;
      end;
    end;
     
    begin
     
    if SameText(Column.Header,'notes') then
    begin
      h:=GetTextHeight(Column.Layout,column.AbsoluteWidth,Value.ToString);
      if h>Grid1.RowHeight then Grid1.RowHeight:=h; // au plus grand
      ATextLayout:=TTextLayoutManager.TextLayoutByCanvas(Canvas.ClassType).Create(Canvas);
      ATextLayout.BeginUpdate;
      ATextLayout.Text:=Value.ToString;
      ATextLayout.Color:=TAlphaColors.Black;
      ATextLayout.TopLeft:=Bounds.TopLeft;
      ATextLayout.MaxSize := PointF(Bounds.Width, h);
      ATextLayout.WordWrap:=true;
      ATextLayout.VerticalAlign:=TTextAlign.Leading;
      ATextLayout.EndUpdate;
      ATextLayout.RenderLayout(Canvas);
    end
    else Column.DefaultDrawCell(Canvas,bounds,row,value,state);
    end;

    Maintenant si lors du premier remplissage c'est au plus grand pour toutes les lignes j'ai remarqué qu'ensuite seule les lignes affichées étaient re-traitées.
    Il y a peut être moyen de faire quelque chose avec cette notion de retraitement (bien que je ne vois, pour l'instant, pas comment) test à suivre ...

    Je pense qu'afficher du html pourrait se faire via le Canvas mais c'est encore un test à faire.

    Pour l'edition il y a l'évènement OnCretaeCustomEditor qui me fait de l'oeil

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2002, 09h12
  2. equivalent à explode?
    Par djridou dans le forum Langage
    Réponses: 3
    Dernier message: 28/08/2002, 11h01
  3. [Kylix] Equivalent ShellExec en CLX
    Par Anonymous dans le forum EDI
    Réponses: 7
    Dernier message: 14/08/2002, 11h55
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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