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 de (l'ancien) Tlistview


Sujet :

Composants FMX Delphi

  1. #21
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut Code
    En PJ le code SOLUTION OBJET
    j'ai voulu garder à l'ouverture les valeurs au design (ce qui ne fut pas forcément une bonne idée)
    la clôture du programme provoque une exception que je n'arrive pas à ôter et donc plein de fuites mémoires.
    [Edit] A priori, c'est le ondestroy de la forme qui pose souci, commenter l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm23.FormDestroy(Sender: TObject);
    begin
    //contacts.Free;
    end;
    Fichiers attachés Fichiers attachés
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #22
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    en PJ la VERSION FDMEMTABLE
    je suis beaucoup plus à l'aise avec cette version qui offre beaucoup d'avantages par la suite (par exemple les tris)
    Bien sûr, il est essentiel d'avoir des données correctes si l'on veut jouer avec des index
    Fichiers attachés Fichiers attachés
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #23
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    @SergioMaster merci pour tout ton investissement
    malheureusement je n'ai pas pu exploiter véritablement tes sources car elles sont incomplètes, il manque le fichier dpr par exemple

    ensuite je fais le même constat ! que de chose pour si peu !!!

    sinon je n'ai pas trop compris la solution objet, je vois encore la liste exemple et je n'ai pu compiler ton projet pour voir le reste

    la solution fdemtable a l'air plus tranquille ? sauf qu'elle est incomplète
    j'ai bien compris pour ajouter des lignes, on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
         FDmemTable1.Insert;
         FDMemTable1id.AsString:='a';
         FDMemTable1nom.AsString:='b';
         FDMemTable1prenom.AsString:='c';
         FDmemTable1.Post;
    (j'ai mis que 3 champs pour les tests)

    si tu dois faire un exemple, je te propose de faire comme moi, c'est à dire d'ajouter manuellement des données aléatoire, ainsi on évite les prises de tête JSON, j'en ferai mon affaire

    comment parcourir la table ? comment supprimer une ligne ?
    pouvons nous ajouter une ligne entre 2 ?
    comment accéder aux données d'une ligne ?

    P.S : il y a quelques jours j'avais trouvé comment sélectionner la première case afin de sélectionner toute la ligne, mais j'ai oublié si tu peux me le rappeler stp ?

    je te remercie une fois de plus

  4. #24
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Coussati Voir le message
    je n'ai pas pu exploiter véritablement tes sources car elles sont incomplètes, il manque le fichier dpr par exemple
    Oups, désolé, faire des zips sur des projets "test" (tout dans un même répertoire) n'est pas toujours simple

    ensuite je fais le même constat ! que de chose pour si peu !!!
    je ne comprends pas vraiment
    - côté table mémoire, le plus gros du travail est le traitement du JSON (FillList)
    - côté objets, c'est effectivement plus de code (j'avais prévenu) puisqu'il faut déclaré classe et propriétés de celle-ci et faire les liaisons nécessaires

    sinon je n'ai pas trop compris la solution objet, je vois encore la liste exemple et je n'ai pu compiler ton projet pour voir le reste

    la solution fdemtable a l'air plus tranquille ? sauf qu'elle est incomplète
    incomplète ? s'il s'agit du dpr, le même pour les 2 d'ailleurs (c'est certainement la raison qui m'a fait oublier de le joindre, plus vieux je ne l'ai pas vu quand j'ai fait mes zips), le voici
    [EDIT] à la réflexion, il avait déjà été fourni dans le Zip du post #13

    coussati.dpr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program Coussati;
     
    uses
      System.StartUpCopy,
      FMX.Forms,
      CousatiUnit in 'CousatiUnit.pas' {Form23};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm23, Form23);
      Application.Run;
    end.

    si tu dois faire un exemple, je te propose de faire comme moi, c'est à dire d'ajouter manuellement des données aléatoire, ainsi on évite les prises de tête JSON,
    je n'ai pas eu de difficultés majeures avec le JSON tel que je l'ai écrit, à partir du moment ou le tableau est bien créé.
    et les données, mise dans la constante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const j = '[{"id":"1","nom":"alex","prenom":"marc","unedate":"25/06/2022"},'+
              '{"id":"2","nom":"steeve","prenom":"albert","unedate":"25/06/2022"}]';
    auraient pu être plus aléatoires au besoin. Je n'ai pas récupéré les données du TProtypeBindSource mais j'aurais pu et ça c'est vraiment de la données aléatoire

    comment parcourir la table ?
    La table, un simple BindNavigator permet de le faire

    comment supprimer une ligne ?
    Dans la table, un simple Delete

    pouvons nous ajouter une ligne entre 2 ?
    Oui et non, une table n'insère pas forcément entre deux enregistrements (et ne renumérote pas si c'est le sens de la question) c'est là où les index entre en jeu

    comment accéder aux données d'une ligne ?
    unnom:=FDMemTable.FieldByname('nom').asString; ou unnom:=FDMemTablenom.asString, c'est du traitement de base de dataset


    P.S : il y a quelques jours j'avais trouvé comment sélectionner la première case afin de sélectionner toute la ligne, si tu peux me le rappeler stp ?
    cela fait partie des options de la grille Rowselect et AlwaysShowSelection doivent être à true
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #25
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    bon, je crois que j'aperçois le bout du tunnel

    j'arrive à introduire mes données dans FDMemTable1 et à les afficher dans Tgrid grâce aux liaisons

    maintenant j'ai quelques difficultés à accéder aux données

    tu m'as parlé du BindNavigator mais je veux le faire par le code

    pour le moment, je parcours la table ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        while not FDMemTable1.Eof do
        begin
          showmessage(FDMemTable1.FieldByName('nom').AsString);
     
          // ou showmessage(FDMemTable1nom.asString);
     
          FDMemTable1.Next;
        end;
    seul hic, je n'aime pas le fait qu'on voit dans le Tgrid, la sélection arriver jusqu'en bas (comme si on avait sélectionné la dernière ligne vu que ça fait ligne par ligne)
    j'aimerais que le Tgris reste intacte

    autre chose, pour accéder aux données du nom "xx" je parcours la table et je fais une condition si nom = xx
    je suppose que ce n'est pas la bonne méthode ? et qu'on peux utiliser des requêtes ? sql ? (comment ? dsl je découvre ce compo et n'utilisais pas dataset)

    autre difficulté : pour supprimer, je parcours la table et je mets :
    sauf que non seulement le parcours à l'air de commencer au niveau de la ligne sélectionné dans le Tgrid mais en plus, je ne sais pas bien comment il fonctionne car il ne supprimer pas toutes les lignes
    (bien sur c un test, je ne veux pas supprimer toutes les lignes, mais je me dis que si je parcours la table et je delete, je suis sencé avoir tout supprimé)

    j'ai tenté ceci au début du parcours :
    mais rien à faire

  6. #26
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je parcours la table
    Question, dans quel but ? Tu avoueras que la question que tu avais posée sur le parcours n'était pas claire.

    je n'aime pas le fait qu'on voit dans le Tgrid, la sélection arriver jusqu'en bas (comme si on avait sélectionné la dernière ligne vu que ça fait ligne par ligne)
    j'aimerais que le Tgris reste intacte
    Le grid est lié et se positionne sur l'enregistrement en cours mais il y a plusieurs manières de faire de façon à ce que le "défilement" ne se voit pas lors d'une boucle
    - le classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FDmemtable.DisableControls; 
    FDmemtable.First; 
    while not FDmemtable.EOF do
     begin 
      // traitement 
       FDmemtable.Next;
     end;  
    FDmemtable.First; 
    FDmemTable.EnableControls
    - le beginUpdate du composant Grid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Grid.BeginUpdate; 
    FDmemtable.First; 
    while not FDmemtable.EOF do
     begin 
      // traitement 
       FDmemtable.Next;
     end;  
    FDmemtable.First; 
    Grid.EndUpdate;
    J'ai pris l'habitude d'utiliser cette dernière version parce que j'utilise plus des listes que des grilles mais je crois que les deux sont aussi valables

    je suppose que ce n'est pas la bonne méthode ? et qu'on peux utiliser des requêtes ? sql ? (comment ? dsl je découvre ce compo et n'utilisais pas dataset)
    effectivement ce n'est pas la bonne méthode !
    On pourrait utiliser des requêtes, mais cela implique l'utilisation de FDLocalQuery et donc de l'ajout d'une connexion SQLite et ce n'est pas forcément évident (possible mais les étapes pour le faire sont précises). S'il faut en passer par là, autant alors utiliser directement une BDD SQLite même d'une seule table, plutôt qu'une table mémoire. Sinon, il y a la solution définition d'un index et FindKey ou la solution Locate (quand il y a peu d'enregistrements) plus d'autres variantes toutes indiquées ici

    pour supprimer,
    Le Delete supprime l'enregistrement en cours, pour tout supprimer d'un FDmemtable il y a EmptyDataset

    Du coup, ce matin (de bonne heure et bonne humeur), j'ai un doute, un EmptyDataset sur un table SQLite efface t-elle les enregistrement ou simplement le Dataset Il va falloir que je vérifie, même si j'ai tendance à écrire oui.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #27
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour,

    sauf votre respect, illustres Livebindiens, je suggérerais à notre ami Coussati pour le faire en 5 minutes (avec un peu d’optimisme peut-être mais possible à l'aide de codes déjà établis), d'utiliser Lazarus 2.2.2 [où 2.2.0], pour obtenir un résultat purement en code avec des objets graphiques GUI natifs donc parfaitement intégrés dans l'OS ciblé, et pour Linux, même intégrés nativement à la GUI de la distribution... en faisant attention tout de même à la gestion des polices. On peut utiliser les TStringGrids natives, y intégrer dans le header des colonnes, par pure programmation (en Pascal donc), des tris avec leurs icônes et/ou des champs de recherche. Seule limite pour l'instant infranchissable avec les TStringGrids natives de Lazarus : afficher du texte enrichi. Mais FMX, même avec sa puissante technologie ajoutée , ne fait pas mieux en ce qui concerne le texte enrichi avec ses TGrids. Et pour être plus précis, pour les entêtes, comme je l'ai précisé, Lazarus est très opérationnel y compris esthétiquement : je me suis inspiré des "Grids" de Windev qui au niveau de leur ergonomie et de leur esthétique 'intégrées" laissent loin derrière elles Delphi.

    On oublie souvent Lazarus. Il est vrai que je ne reçois pas des mails au moins bihebdomadaires de Lazarus pour me solliciter à employer leur "RAD". Mais il vient encore de "sauver" un de mes développements pour lequel le temps était restreint alors que le cahier des charges était assez pointu incluant notamment le ciblage des 3 OS.

    Évidemment, si vous voulez disposer de la possibilité de faire tourner la TGrid sur ses 3 axes à la souris, Delphi est incontournable !

    Cordialement. Gilles, programmeur totalement allergique à cette approche "philosophique" du développement...
    Nom : delphi220629.png
Affichages : 101
Taille : 12,1 Ko

  8. #28
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour Gilles,

    Comme d'habitude tu tapes, mais surtout parce que tu ne maitrises pas le principe des Livebindings. Taper sur la partition plutôt que sur l'interprète est contre productif.

    En fait LiveBindings c'est la même chose que de relier un DataSet à un DBxxx la différence, c'est qu'effectivement, c'est moins clair et, de plus, tout est caché dans le fichier de la forme dfm ou fmx (cela écrit je travaille à une solution récupération des liens et proposition de code à insérer dans le .pas).

    Une des différences est que Livebindings ne se limite pas aux données et à une zone précise mais, le plus souvent à toutes les propriétés publiques de la cible (moyennant quelques fois un peu de "gymnastique") mais aussi à la présentation de la dite donnée (en utilisant la/les propriétés du lien expression et customformat), donc, un peu plus de chose que le Dataset.

    Tu me rétorqueras, à raison, que ce n'est pas évident, mais je le répète c'est une question d'habitude.

    Pour ce qui est de la Grille de Coussati, il est évident que j'aurai pu remplir la Grille en "tout à la main" et donc sans table, c'est d'ailleurs ce que je suis actuellement en train de faire pour traiter un CSV

    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
     
     StringGrid1.BeginUpdate;
     StringGrid1.RowCount:=0;
     for I :=1  to FrameMemoLineCount1.Mtxt.Lines.count-1 do
     begin
       ProgressBar1.Value:=ProgressBar1.Value+1;
       Application.ProcessMessages;
       if FrameMemoLineCount1.Mtxt.Lines[i].IsEmpty then Continue;
       StringGrid1.RowCount:=StringGrid1.RowCount+1;
       StringGrid1.Cells[0,i-1]:=I.ToString;
       SP:=FrameMemoLineCount1.Mtxt.Lines[i].Split([',']);
       StringGrid1.Cells[1,i-1]:=SP[pospn]; // part number
       StringGrid1.Cells[2,i-1]:=SP[posmu]; // item code
       StringGrid1.Cells[3,i-1]:=SP[pospiece]; // Piece
       StringGrid1.Cells[4,i-1]:=EmptyStr;
       if not SP[posmu].StartsWith('MU') then StringGrid1.Cells[4,i-1]:='Erreur';
      end;
     StringGrid1.EndUpdate;
    inconvénient : impossible de mettre ça dans une tache puisque presque tout utilise des composants visuels (c'est là où la tfdmtable ou la liste d'objets est pratique )

    On peut utiliser les TStringGrids natives, y intégrer dans le header des colonnes, par pure programmation (en Pascal donc),
    ça, c'est possible
    des tris avec leurs icônes et/ou des champs de recherche.
    plus compliqué mais toujours possible pour preuve ma solution du début qui se limitait à la demande de départ : un équivalent TListView VCL

    Seule limite pour l'instant infranchissable avec les TStringGrids natives de Lazarus : afficher du texte enrichi. Mais FMX, même avec sa puissante technologie ajoutée, ne fait pas mieux en ce qui concerne le texte enrichi avec ses TGrids.
    ça aussi, j'y travaille, mais les nouvelles versions ne permettent plus d'ajouter d'autres types de Colonnes que celles connues
    Pourtant, à ma souvenance, les versions XE le permettait.

    Delphi du moins FMX ne gère pas de texte enrichi, sauf à passer par des composants tiers payants comme TMS. Pour ma part j'ai plus ou moins abandonné l'utilisation de ceux-ci un peu trop "frustrants"
    j'ai commencé à mettre le nez dans un dépot GitHub (DZHtmltext) qui me permet certaines "enjolivures"
    Nom : Capture.PNG
Affichages : 92
Taille : 56,6 Ko
    et même réussi à ajouter quelques balises
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #29
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour Serge,

    oui, j'aurais mieux fait de me taire. Mes propos ne sont pas une bonne publicité pour Delphi. Et c'est vrai que ce n'est peut-être pas le lieu. Mais j'utilise encore Delphi et je suis membre de ce forum. Je propose simplement une autre solution à notre ami compte tenu de son expérience Delphi 7 en argumentant mon choix de ne pas lui proposer Delphi. Mais il est vrai que je réfléchis à ma place dans ce forum. Je m'en suis plusieurs fois désinscrit et je reconnais que mes besoins semblent toujours vous déconcerter : gestion des styles pour avoir une esthétique native dans les 3 OS Desktop, gestion des Grids, gestion du HTML, génération de pdf, ... Mais, "localement", ce forum est certainement le plus réactif, le plus pertinent grâce à vos expertises.

    Je conseille quand même à Cassouti de faire son projet en Lazarus. Pour un développeur Delphi 7, c'est un régal. Je lui conseille aussi d'essayer les dernières versions 2.2. Je l'utilise en production en parallèle de Qt dans l'ESN familiale. Il faut évidemment surpasser les critiques : "Lazarus est incomplet, fragile,...". Il faut l'essayer, un peu comme moi avec FMX, Qt ou actuellement Python. J'ai vu le Python4Delphi. J'ai découvert qu'avec Python seul, on faisait beaucoup de choses et en plus je peux l'interfacer avec Qt ce qui me permet immédiatement de traiter les chaines HTML. Tu as peut-être une solution pour le HTML dans Delphi : FMX + Python4Delphi + Qt LiveBinding (on l'appelle pyqt6) Pourquoi faire simple quand on utilise Delphi... et toutes ses incapacités natives ?

    Serge, tu est bientôt à la retraite. Tu devrais prendre le temps de découvrir Qt. Ne serait-ce que pour découvrir les "Signal/Slot", un concept totalement inconnu en Delphi, et la "promotion", une approche beaucoup plus moderne et souple que les composants. En fait, il ressemble beaucoup à FMX, un Designer, son propre GUI donc des styles, les mêmes cibles de compilation... Mais c'est un IDE rustique. Tu résous tes problèmes à la ligne de code, exclusivement à la ligne de code ! Mais, rustique dans son cadre de développement (i.e. son IDE qui fonctionne quand même sur les 3 OS), il répond à tous les besoins modernes sans limitations, sans divination,... Tu pourras également découvrir le successeur moderne de FastReport, QuickReport & co... NCreport. Tu intègres des vrais champs HTML (pas du mini) y compris des balises images en base64 comme le permettent les Qtablexxx équivalents de TGrids. Je radote certes mais mes propos te sembleront peut-être moins excessifs.

    Ils le sont peut-être aussi car je n'apprécie toujours pas effectivement ces "développeurs" qui n'ont pas été capables de permettre à l'antique Delphi 7 de devenir un Lazarus. Ce sont ces derniers (Lazarus) qui ont la bonne démarche, la bonne philosophie pour le développement Desktop. Delphi a perdu son fil historique. Lazarus l'a conservé. C'en était un dogme. Mais il a su le surpasser. Avant de l'étendre au développement mobile [Qt le fait bien], les développeurs de Delphi auraient pu pérenniser le développement Desktop. Embarcadero aurait pu aussi [comme PC SOFT] développer une solution mobile différenciée plutôt que de réduire les capacités de l'ancien Delphi. Quelque soient ta bonne volonté, ton investissement, et surtout ton expertise, en lisant simplement tes propos et tes incompréhensions, je ne peux qu'imaginer la débauche d'efforts et de temps consommés pour finalement pouvoir porter un programme des années 2000 [Delphi 7 : 2001] sur mac OS ou Linux en en conservant le même niveau fonctionnel (mais sans plus malheureusement) avec ce que tu qualifies d'une "gymnastique". Je suis désolé mais j'ai investi du temps, de l'argent sur une très longue période dans Delphi [depuis turbopascal]. Parallèlement, j'ai investi en même temps dans les produits PC Soft. Aujourd'hui, j'utilise toujours les produits PC Soft mais plus Delphi parce qu'en matière de développement Desktop, en 2022, il est à la ramasse, il est compliqué, il est chronophage donc non compétitif en développement professionnel et surtout il m'impose de m'éloigner de mes autres paradigmes et outils de développement. Compte tenu de mes 2 fonctions, enseignant et développeur en ESN, j'ai pu évaluer tranquillement et longuement, sans pression et obligations, d'autres solutions... tout en suivant régulièrement les évolutions de Delphi. Je reconnais que c'est une situation confortable. Et j'ai conclus de cette expérience qu'il fallait essayer, insister, pour évaluer réellement et hiérarchiser les propos, les avis et autres commentaires plus ou moins spécialisés. Quand on ne dispose pas de cette opportunité, on reste effectivement inféodé à l'évolution de son produit de développement principal voire unique. C'est pourquoi je n'ai jamais accepter que l'on n'utilise qu'un seul produit. Et j'estime avoir bien fait.

    Donc en résumé, Lazarus pour résoudre FACILEMENT donc ÉCONOMIQUEMENT et AGRÉABLEMENT le problème évoqué par notre ami. En attendant, je vais me désinscrire pour ne plus parasiter ce forum. Je suis en plein dans Python... simplement par curiosité intellectuelle. Je sais déjà que je ne l'utiliserai pas de manière professionnelle.
    Cordialement. Gilles

  10. #30
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par HTML-Dev Voir le message
    oui, j'aurais mieux fait de me taire
    C'est pas ça, c'est juste que c'est un peu à côté de la plaque. Ce n'est pas parce que tu n'adhère pas au LiveBindings (je reconnais son concept complexe qui fait appel à RTTI concept déjà existant en D7 mais largment méconnu)

    Je conseille quand même à Cassouti de faire son projet en Lazarus. Pour un développeur Delphi 7, c'est un régal.
    mon expérience Lazarus (limitée à mon temps que je qualifierais de placard) m'a quand même laissé sceptique, trop D7 justement.
    Tu as peut-être une solution pour le HTML dans Delphi : FMX + Python4Delphi
    j'avoue ne pas y avoir pensé

    Serge, tu es bientôt à la retraite.
    un an pile poil mais je prends peut-être 6 mois de plus, décision en décembre.
    Tu devrais prendre le temps de découvrir Qt.
    ce ne sera pas une totale découverte, même si les choses ont évoluées. J'ai aidé un jeune sur QT, jusqu'à ce qu'il ait le déclic

    Donc en résumé, Lazarus pour résoudre FACILEMENT donc ÉCONOMIQUEMENT et AGRÉABLEMENT le problème évoqué par notre ami.
    je serais moins affirmatif

    En attendant, je vais me désinscrire pour ne plus parasiter ce forum.
    Dommage, il faudrait juste limiter les critiques ou poser le problème différemment

    Serge
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #31
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Dommage, il faudrait juste limiter les critiques ou poser le problème différemment
    Je comprends parfaitement le dérangement que j'occasionne.. Et donc comme c'est stérile je m'en vais. J'ai déjà su le faire plusieurs fois en exprimant effectivement mon mécontentement. J'ai quitté je crois la dernière fois avec Delphi XE 7 Enterprise(?) Academic et j'ai dû ré-ouvrir un compte avec l'apparition de Delphi 10 CE.

    Et je ne sais pas poser le problème autrement : Firemonkey le permet ou pas. Je suppose que oui donc je ne sais pas le faire. Je ne peux pas imaginer que Delphi ne soit pas capable intrinsèquement de résoudre les problèmes que j'évoque. Donc je requiers l'aide de ce forum. Et le temps passe. XE, XE 7, Delphi 10. Avec Delphi XE 7, je ne parlais pas de IA et de force-derived graphic sur lesquels je travaille actuellement. C'est la pub pour l'IA que j'ai reçue d'Embarcadero qui m'a incitée à tenter une nouvelle approche FMX. Mais avec et depuis XE 7, de vieux problèmes n'ont jamais trouvé solution y compris sur ce forum. La dernière fois (i.e. récemment), j'ai placé sur ce forum une vidéo de ce que je faisais en Qt [TGrid gérant le HTML]. Il a été réglé en Qt 5, un langage que j'ai découvert quand j'ai renoncé à XE 7 pour résoudre ce problème. Mes Collègues voulaient pouvoir utiliser du texte enrichi pour remplir les annotions des bulletins scolaires de nos élèves. Rien de bien anormal et usuel. Cela génère une grosse frustration pour un programmeur en Pascal. et un énorme effort pour pallier ce problème. En parlant d'efforts, je te remercie pour tous les tiens encore récemment que tu as faits pour m'aider mais je crois -même si tu as produit quelques "pistes" et obtenu quelques résultats pour régler ce "vieux" problème, c'est encore loin de ce que je t'ai fait voir en Qt.

    Ma déception reste toujours aussi grande mais j'attendrai la version 14 pour voir... en continuant à te lire toujours avec intérêt évidemment.

    Cordialement. Gilles

  12. #32
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Pour l'avoir essayé il y a quelques mois pour moi aussi Lazarus c'est un peu trop Delphi 7.

    Citation Envoyé par HTML-Dev Voir le message
    Aujourd'hui, j'utilise toujours les produits PC Soft mais plus Delphi parce qu'en matière de développement Desktop, en 2022, il est à la ramasse, il est compliqué, il est chronophage donc non compétitif en développement professionnel et surtout il m'impose de m'éloigner de mes autres paradigmes et outils de développement.
    Mais là, une fois de plus je ne comprends pas ce blocage.

    PC Soft et Embarcadero ont des contraintes et approches différentes de leur métier. On en a déjà parlé, ça sert à rien que je boucle dessus, ceux qui veulent sauront utiliser la recherche sur le forum.

    Mais franchement, dire que Delphi est à la ramasse sur le développement Desktop, qu'il y a eu regression sur les fonctionnalités, je ne suis pas d'accord.

    Delphi est toujours au top pour le développement Windows avec les projets VCL qui ont évolué au fil des années pour suivre les évolutions de l'OS.

    Ok, ils sont partis sur un autre framework pour faire du multiplateforme car l'historique était trop proche des API Windows, problème que les développeurs de Lazarus n'avait pas. Globalement FMX est quand même pareil que VCL.

    Côté Lazarus, un seul système de composants, des projets qui se compilent sur d'autres plateformes sans y revenir si on est resté dans le moule.

    Ne pas oublier que Lazarus est plus "récent" que Delphi. Quand ça a été démarré, ils avaient déjà des compilateurs sur d'autres plateformes à disposition en se basant sur FPC. Borland / Embarcadero avaient de leur côté presque 10 ans d'historique de clients et projets VCL basés sur Windows. Difficile de remettre tout à plat et recréer les composants tout en restant compatibles avec l'existant.

    Pour les textes en HTML, QT n'a pas tout le HTML (https://doc.qt.io/qt-6/richtext-html-subset.html) mais ils permettent de le faire. Il y a des solutions pour développeurs Pascal, libres ou payantes. On n'est pas plus bloqué en Delphi pour ça que dans d'autres langages ou environnements. Il faut juste savoir où chercher et quoi utiliser. En plus du DzHTMLText (https://github.com/digao-dalpiaz/DzHTMLText) sur Github on trouve un DzHTMLText2 (https://github.com/jackdp/DzHTMLText2) sous forme de fork plus dédié au HTML. Il y a aussi la possibilité d'intégrer des bouts de navigateurs (avec grosses dépendances à WebKit ou Chrome) ou un interpréteur HTML (avec aussi un éditeur WYSYWYG) développé en Pascal (https://delphihtmlcomponents.com) et dont une version d'évaluation des composants est disponible.

    L'écosystème de Pascal est énorme. Lazarus peut se permettre d'intégrer des trucs qu'Embarcadero ne peut pas proposer pour des questions de licences. Et franchement, pourquoi referaient ils eux aussi un composant texte qui affiche de HTML alors que ça existe chez plusieurs éditeurs et en open source ? Faire un truc qui existe et nécessite de la maintenance à (et entre) chaque version, pour un sous-ensemble de clients, c'est pas un bon plan pour une entreprise dont les resources sont limitées par la maintenance, les projets en cours et les développements futurs.

  13. #33
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Alors, soyons clair Patrick. Je ne fais pas de la pub pour Lazarus. Je l'ai rencontré quand il était dans sa version 0.9. Il était alors inexploitable en production. Mais comme la question provient de quelqu'un qui maitrise Delphi 7, compte tenu de ses contraintes notamment multi OS, Lazarus me semble être la solution la plus adaptée s'il veut un aboutissement rapide. L'apprentissage nécessaire est faible.

    Lazarus a ses faiblesses et ses défauts. Celle notamment d'avoir une équipe de développement restreinte et peu de moyens. Mais la version 2.2 est opérationnelle et comme je l'ai écrit plusieurs fois avec Unidac [pour faciliter les paquets de déploiement Linux et mac OS] et les composants TMS FNC, j'estime ce produit.

    Les logiciels de PC Soft, il faut les pratiquer. Il y a trop de clichés qui circulent à leur encontre. Il faut éviter le mode RAD et il faut être patient pour apprendre à en obtenir ce que l'on veut. Malheureusement Windev ne cible que Windows à pleine capacité. En Linux, même si cela s'améliore, les fonctions manquent et pour mac OS, il faut cibler java avec le même problème de fonctions manquantes.

    J'ai bien conscience de l'environnement de Delphi. Et bien conscience de son évolution et des choix qui ont été faits. J'apprécie toujours ce magnifique langage qu'est le Pascal et j'ai apprécié l'approche proposée par Delphi "son" IDE sobre mais complet, bien pensé jusqu'à la version 7. Je n'utilise pas VCL parce que les destinataires de mes programmes Delphi Academic étaient mes Collégues enseignants qui possèdent peu de machine Linux il est vrai. Mais mac OS représente une part non négligeable. Autre cible : mes élèves sur les tablettes de l'Établissement. Je demande simplement (dans tous les sens du terme) à utiliser Delphi avec FMX et j'attends d'avoir les mêmes résultats et fonctionnalités dans les 3 OS Desktop. Je n'ai pas de sous OS. Pour moi, que ce soit sous Windows, Linux, mac OS, mes applications doivent avoir le même niveau d'exigence et exactement les mêmes fonctionnalités. Et comme Delphi a été initialement conçu pour Windows, qu'il a présenté longtemps une solution plus que compétitive, j'attends que sur des machines modernes, j'obtienne le meilleur de ce qu'il proposait, même si maintenant c'est sous FMX. En Delphi 7, on utilisait avec bonheur des TStringGrid. A l'époque on n'avait pas besoin du HTLM dans les cellules. Aujourd'hui en quoi une TlistView est-elle plus adaptée, aussi potentiellement riche qu'une TStringGrid, hormis cette capacité qu'elle aurait à pallier les incapacités d'une TStringGrid actuelle et dans ce cas, pourquoi conserver cette dernière ? Voila le genre de question idiote que je me pose quand un problème de Grid m'apparait lors de la conception. Est-ce que son emploi me permettra de réaliser un traitement particulier imaginé un jour et utilisé dans une TStringGrid VCL/LCL ? Question injustifiée ? Je ne crois pas. J'ai lu plusieurs fois dans les discussions par des maitres du développement Delphi "moderne" qu'on n'utilisait plus les TStringGrids au profit des TListView... Je connais bien les TStringGrids Lazarus issues de VCL. Je ne connais pas les TListView. Qui a décidé de cet usage ? Et pourquoi ? Toujours est-il -si j'ai bien compris ce que je lis sur ce forum- la TStringGrid est dévaluée dans l'usage même en Desktop. Mais ma question reste valable : qu'est ce que je perds en utilisant une TListView par rapport à ce que proposait une TStringGrid VCL Delphi 7 ou Lazarus, notamment en terme d'événements ou de méthodes intégrées à la TStringGrid ?

    Mon problème ce n'est pas le LiveBinding, les styles ou je ne sais quoi d'autres. On devrait pouvoir retrouver les discussions dans ce forum : sur tablette (donc en mobile), avec XE 7, j'ai réalisé pour mes élèves de terminales une simulation graphique de l'effet de fronde pou illustrer les lois de Kepler et utiliser du calcul différentiel. C'est tout simplement génial ! Et je l'ai déjà écrit. Même actuellement, je ne saurais pas faire cela en Qt. A l'époque, j'ai critiqué (pesté) le manque de documentation. Donc FMX mobile, je prends ! Je conseille même pour ce type de projets très particulier mais très "exigeant". En Webdev mobile, je ne saurais pas faire non plus.

    Ce qui m'irrite vraiment, c'est que pour atteindre cette qualité de résultats en mobile, il me semble que les composants en mode Desktop ont été partiellement appauvris au niveau des événements utilisés en Desktop. Mais surtout, ils n'ont pas réellement évolués pour une part significative d'entre eux, enfin celle que j'utilise massivement. Je ne comprends pas pourquoi Delphi ayant été rénové, on ne dispose pas de composants rénovés et leur "richesse" augmentée [les TGrids, TStringGrids]. Comme je l'écrivais, que faire quand tes Collègues viennent te demander la saisie de texte enrichi pour leurs bulletins scolaires ? Tu aurais proposé quoi avec XE 7 ? Et même aujourd'hui avec Delphi 10 ou 11 ? Mon logiciel était gratuit et opensource mais ceci dit, ce n'est pas suffisant s'il ne peut pas offrir les standards du moment. Donc "tolérer" (i.e. accepter -> comprendre) le LiveBindings, les styles ne me poserait pas de problème -enfin avec une documentation exhaustive- à condition de ne pas me retrouver par ailleurs dans une impasse comme pour le traitement des chaines HTML ou la génération directe de bulletins contenant ces chaines en pdf. Pour faire la simulation de l'effet de fronde, j'ai bien utilisé ces concepts, sans réellement les comprendre d'ailleurs. Mais cela doit être du donnant-donnant et on n'oublie personne notamment ceux qui développent du Desktop en multi OS.

    Donc clairement, pour faire une rapide synthèse avant de quitter le forum, si on me demandait actuellement de conseiller pour le choix d'une solution moderne, généraliste et pointue de développement mobile, je conseillerais sans hésiter Firemonkey en précisant que cela n'a plus grand chose à voir avec le développement Delphi "canal historique". Quand je dis Firemonkey, je pense à Delphi et pas C++ Builder.

    Pour du développement purement Windows -que je ne pratique plus-, je suppose que Delphi reste une solution compétitive puisqu'il lui est dédié, même si je subodore que certains des problèmes que j'ai rencontrés en FMX Desktop existent en VCL. On ne développe pas en mobile avec VCL. Donc les concessions qu'ont nécessité le ciblage multi OS et surtout mobile+Desktop doivent être réduites, au facteur près évidemment, des nouvelles approches implémentées dans Delphi par soucis de cohésion et d'usage. On pourrait d'ailleurs se demander pourquoi ces nouvelles approches ont été nécessaires ? A cause de multi OS Desktop, à cause du ciblage des mobiles ? Et donc une cohérence de développement ? Ou par un unique souci novateur ? Quoiqu'il en soit, les programmeurs VCL disposent des API Windows, une ressource conséquente, pour espérer contourner les problèmes rencontrés.

    Mais pour le développement desktop multi OS -qui a été rénové-, j'ai abandonner devant les -allez on va dire "mes"- incapacités à résoudre les problèmes évoqués sachant que je n'en ai encore jamais vu leur résolution où que ce soit. Et ce n'est pas faute d'avoir essayé.

    Bref je ne vais pas poursuivre plus loin. Mon compte va être certainement rapidement désactivé à ma demande. Pour Delphi, je patienterai. Un jour peut-être... Comme d'habitude, je laisserai au moins 3 versions avant de vous rendre visible si je vois une évolution favorable au développement de mes projets. Au plaisir de te lire à distance sans répondre . Cordialement. Gilles

Discussions similaires

  1. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 20h25
  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