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 :

Déplacer le répertoire racine de Delphi


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Déplacer le répertoire racine de Delphi
    Bonjour,

    je me demandais s'il y avait un moyen voire un utilitaire (comme sous Qt) pour déplacer facilement et de manière sure le répertoire racine (\Embarcadero) de mon IDE. Delphi s'est installé dans le répertoire par défaut C:\Program Files (x86)\Embarcadero. Je n'ai pas vu lors de l'installation où on pouvait modifier ce dossier par défaut.

    Je pourrais évidemment désinstaller le RAD et ensuite le réinstaller en veillant à l'étape que je n'ai pas vue. Mais

    1. je l'ai déjà installé 2 fois : une première fois sur un poste de test Windows 10 pour vérifier son impact et une seconde fois sur mon poste de développement Windows 11. Renouveler l'opération nécessiterait au total 4 installations et de manière sûre jusqu'à la version XE 7, j'avais le droit à 3 installations. Après il faut demander l'autorisation pour les installations supplémentaires sur un site d'ailleurs qui fonctionnait très mal.
    2. la désinstallation s'est toujours faite très mal avec les versions Delphi XE empechant une réinstallation "facile" (normale). Cela a peut-être changé, mais j'aimerais éviter de nouveaux problèmes
    3. il va me falloir réinstaller mes composants tiers et comme dans un fil j'ai expliqué qu'il fallait ajouter à la main les chemins des composants Firemonkey tiers, l'IDE en étant incapable automatiquement, cela ne rend pas plus que cela l'opération agréable.


    En attendant, j'ai choisi -enfin j'espère que Delphi l'autorise- de placer le code source de mes composants dans le dossier \Embarcadero\Studio\21.0\Components.

    Compte tenu du positionnement actuel du dossier Embacadero, j'obtiens ceci :

    Nom : Forum 2021-12-10 100159.png
Affichages : 582
Taille : 85,7 Ko

    La solution la plus rapide, la plus intuitive, la plus cohérente, serait de déplacer ce dossier Embarcadeo ailleurs que dans C:\Program Files (x86). Est-ce possible (ie est-ce prévu) ?

    Merci. Cordialement. Gilles
    Dernière modification par Invité ; 10/12/2021 à 10h35.

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Pourquoi veux tu déplacer ce répertoire ? SI c'est pour éviter les erreurs lors de installations et compilations le mieux c'est de modifier les droits de [FONT=Verdana, Amiko, sans-serif]C:\Program Files (x86)\Embarcadero et de donner tous les droits (lecture/écriture/création..) sur ce répertoire et tous ses sous répertoires.[/FONT]

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 680
    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 680
    Billets dans le blog
    65
    Par défaut
    Bonjour Gilles
    Citation Envoyé par HTML-Dev Voir le message
    je me demandais s'il y avait un moyen voire un utilitaire (comme sous Qt) pour déplacer facilement et de manière sure le répertoire racine (\Embarcadero) de mon IDE. Delphi s'est installé dans le répertoire par défaut C:\Program Files (x86)\Embarcadero. Je n'ai pas vu lors de l'installation où on pouvait modifier ce dossier par défaut.
    Eh oui, l'option cachée et pourtant si pratique.
    Hélas je ne pense pas qu'il y ait d'utilitaire de ce genre, déplacer le répertoire vers un autre disque n'est pas la seule manipulation à faire. Pas mal de données sont dans les bases de registre

    Citation Envoyé par HTML-Dev Voir le message
    il va me falloir réinstaller mes composants tiers et comme dans un fil j'ai expliqué qu'il fallait ajouter à la main les chemins des composants Firemonkey tiers, l'IDE en étant incapable automatiquement, cela ne rend pas plus que cela l'opération agréable.
    L'utilisation du programme "migration tool" aide pour ce genre de choses : Faire une sauvegarde puis une fois RAD réinstallé utiliser cette sauvegarde

    Citation Envoyé par HTML-Dev Voir le message
    En attendant, j'ai choisi -enfin j'espère que Delphi l'autorise- de placer le code source de mes composants dans le dossier \Embarcadero\Studio\21.0\Components.
    Là, même si ce n'est pas temps Delphi que Windows qui bloque, j'aurais choisi un emplacement plus "ouvert"
    par exemple : D:\<utilisateur>\Documents\Embarcadero\Studio\Projets\Sidney\composants
    ou C:\Users\Public\Documents\Embarcadero\Studio\21.0\Composants
    en bref des répertoires non UAC protégés de windows


    Citation Envoyé par PhilNext
    SI c'est pour éviter les erreurs lors de installations et compilations le mieux c'est de modifier les droits
    je ne suis pas d'accord avec ce choix.
    Dans mon cas j'ai un SSD (donc disque primaire) et un HD, gardant plusieurs versions de Delphi, je préfére nettement installer Delphi sur le HD que dans les répertoires. Cela dit, je fais attention au moement de l'installation de façon à trouver la modification du dossier par défaut

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    je ne comprend pas l'intérêt de déplacer l'application, elle fonctionne très bien dans "Program Files (x86)", par contre il n'y a pas lieu de mettre des sources dans ce répertoire, et là c'est Windows qui n'aime pas ça...d'ailleurs Delphi lui même installe les sources dans Documents\Embarcadero (public ou non)

    quand à l'installation de composants tiers foireuse, ce n'est pas à Delphi de le supporter.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

    je n'insiste pas. J'avais écrit un grand laïus qui paraîtrait probablement arrogant même s'il me semblait étayé. Chacun restera donc sur ses positions.

    Je me permets simplement de contredire de manière documentée une affirmation de Paul :

    Citation Envoyé par Paul TOTH Voir le message
    [...]quand à l'installation de composants tiers foireuse, ce n'est pas à Delphi de le supporter.
    Le problème c'est que même Delphi génère des composants nécessitant la même approche que celle de TMS ! C'est Delphi qui a un problème.
    Je sais bien que tu promeus cet IDE mais je me suis coltiné 3 jours de développement de composants avec l'IDE et je n'ai rien rencontré qui mettait en évidence que TMS est fautif. Unidac gère le problème avec son exe qui implante directement le chemin des sources dans le fichier stockant les chemins des dossiers de bibliothèques de Delphi. Je suppose que l'exe de TMS Software fait la même chose.
    Enfin c'est ce que j'ai initialement pensé. Donc j'ai modifié ce que je pensais être le fichier en ajoutant un chemin... et je n'ai pas pu détecter le fichier impacté (même caché). Par déduction, j'ai cherché ailleurs :

    Nom : Capture d’écran 2021-12-10 195147.png
Affichages : 482
Taille : 44,9 Ko

    Je précise quand même que concernant TMS, les sources VCL et FMX sont dans le même dossier. Inéluctablement, quand j'installe un composant FireMonkey à la main je dois corriger à la main... mais pas si mon composant est VCL.

    Dés le départ de la création d'un composant sous Delphi, il y a une différence "obligatoire" : on ne peut pas développer en même temps le même composant pour VCL et Firemonkey. Tu dois choisir :

    Nom : Capture d’écran 2021-12-10 095709.png
Affichages : 484
Taille : 67,2 Ko

    Cela ne me choque pas mais cela me conforte. Il y a VCL qui s'intègre parfaitement à l'IDE et FireMonkey qui n'est pas géré de la même façon que VCL. Même approche mais moins bonne intégration. Parce qu'au final, quand le composant est dans la palette, on rencontre exactement le même problème qu'avec l'installation des composants TMS "à la main". L'IDE Delphi n'intègre pas mieux les composants Firemonkey que l'on a créé avec lui :

    Nom : Capture d’écran 2021-12-10 181612.png
Affichages : 472
Taille : 20,1 Ko

    La création de composant FMX hormis ce petit détail d'intégration du chemin de la bibliothèque des sources, me semble plutôt habituelle. Je suis parti d'un TCustomButton. Avec plaisir, j'ai vu qu'il avait automatiquement créé la propriété LiveBindings qui semble fonctionnelle :

    Nom : Capture d’écran 2021-12-10 182211.png
Affichages : 478
Taille : 13,3 Ko

    ainsi que les évènements associés

    Nom : Capture d’écran 2021-12-10 182416.png
Affichages : 472
Taille : 12,2 Ko

    Ceci dit c'est la moindre des choses. Je ne m'imagine pas pallier leurs absences. Utiliser le Pascal : RAS. C'est un langage objet. Mais je ne sais pas définir ce que c'est que le LiveBindings. J'ai encore passé pas mal de temps à inspecter cette approche particulière. Hélas, je n'ai guère progresser.

    Donc, je vais désinstaller Delphi et essayer de le réinstaller ailleurs. J'espère que cela se passera bien.

    A bientôt. Cordialement. Gilles
    Dernière modification par Invité ; 10/12/2021 à 19h56.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 680
    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 680
    Billets dans le blog
    65
    Par défaut
    Bonjour Gilles,

    Citation Envoyé par HTML-Dev Voir le message
    Je précise quand même que concernant TMS, les sources VCL et FMX sont dans le même dossier.
    je suppose que tu parles des TMS FNC parce que, voici mes packs TMS installés
    Nom : Capture.PNG
Affichages : 465
Taille : 6,4 Ko


    Inéluctablement, quand j'installe un composant FireMonkey à la main je dois corriger à la main... mais pas si mon composant est VCL.
    j'avoue ne jamais avoir fait attention, une chose est sure je n'ai jamais touché à la base de registre

    Dés le départ de la création d'un composant sous Delphi, il y a une différence "obligatoire" : on ne peut pas développer en même temps le même composant pour VCL et Firemonkey.
    Je m'inscris en faux sur cette assertion. Oui, il est vrai que si tu dérives via l'assistant de création à partir d'un composant existant tu dois faire un choix mais tu peux très bien, avec un peu de technique, écrire un composant "dual" (VCL/FMX). Je t'invite à (re)lire ce chapitre https://serge-girard.developpez.com/...nt_A/#LIII-D-5.

    La seconde partie toujours en écriture (je traine) concerne plus spécifiquement les composants FMX (un équivalent de TDBRadioGroup)

    Cela ne me choque pas mais cela me conforte. Il y a VCL qui s'intègre parfaitement à l'IDE et FireMonkey qui n'est pas géré de la même façon que VCL. Même approche mais moins bonne intégration. Parce qu'au final, quand le composant est dans la palette, on rencontre exactement le même problème qu'avec l'installation des composants TMS "à la main".
    Je pense que tout dépend du paquet mais je ne vais pas m'apesentir sur ce sujet

    Avec plaisir, j'ai vu qu'il avait automatiquement créé la propriété LiveBindings
    Dérivé d'un composant ayant déjà la notion de Livebindings c'est "facile", mais, une grande partie de ma galère à l'écriture d'un composant RadioGroup est venue de là la valeur sélectionnée modifiait le titre de la Groupbox (je ne sais plus dans quel post j'exprimai ma frustration)

    Je ne m'imagine pas pallier leurs absences.
    C'est plutôt dans ce but que j'ai rédigé le tutoriel déjà cité et écrit la suite (depuis 2 ans déjà que je galère sur le sujet, j'avoue avoir renoncé plusieurs fois avant d'atteindre quelque chose de fonctionnel, d'où la galère de l'écriture)
    Il est assez facile de pallier l'absence, en fait cela se résume,dans la plupart des cas, à l'ajout de 3 fonctions. Pour preuve https://www.developpez.net/forums/bl...ge-fmx-delphi/

    Mais je ne sais pas définir ce que c'est que le LiveBindings. J'ai encore passé pas mal de temps à inspecter cette approche particulière. Hélas, je n'ai guère progresser.
    Une encapsulation de RTTI et plus avec l'interpréteur d'expressions. Cette définition me semble encore réductrice

    ce que je ne sais pas encore faire : définir, pour un composant, un lien DataToControl plutôt que BiDirectionnel ou même plutôt un lien LinkPropertyToFieldText plutôt que LinkPropertyToFieldText

    en exemple, et ce sera certainement un sujet que j'aborderai un jour. J'ai décidé de créer une sorte de thermometre
    ce n'est qu'un truc schématique uniquement destiné à découvrir le moyen d'obtenir un LinkPropertyToFieldText dans le concepteur de liens
    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
    package PackageThermometre;
     
    {$R *.res}
    {$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
    {$ALIGN 8}
    {$ASSERTIONS ON}
    {$BOOLEVAL OFF}
    {$DEBUGINFO OFF}
    {$EXTENDEDSYNTAX ON}
    {$IMPORTEDDATA ON}
    {$IOCHECKS ON}
    {$LOCALSYMBOLS ON}
    {$LONGSTRINGS ON}
    {$OPENSTRINGS ON}
    {$OPTIMIZATION OFF}
    {$OVERFLOWCHECKS ON}
    {$RANGECHECKS ON}
    {$REFERENCEINFO ON}
    {$SAFEDIVIDE OFF}
    {$STACKFRAMES ON}
    {$TYPEDADDRESS OFF}
    {$VARSTRINGCHECKS ON}
    {$WRITEABLECONST OFF}
    {$MINENUMSIZE 1}
    {$IMAGEBASE $400000}
    {$DEFINE DEBUG}
    {$ENDIF IMPLICITBUILDING}
    {$IMPLICITBUILD ON}
     
    requires
      rtl,
      bindengine,
      fmx,
      bindcomp;
     
    contains
      CThermometre in 'CThermometre.pas';
     
    end.
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    unit CThermometre;
     
    interface
     
    uses
      System.SysUtils, System.Classes, System.UITypes,
      FMX.Types, FMX.Controls, FMX.Objects,FMX.Graphics,
      Data.Bind.Components;
     
    type
      [ObservableMembers('Progress')]
      TThermometre = class(TRectangle)
      private
        FProgress: integer;
        procedure SetProgress(const Value: integer);
        procedure ObserverToggle(const AObserver: IObserver; const Value: Boolean);
        { Déclarations privées }
      protected
        { Déclarations protégées }
        function CanObserve(const ID: Integer): Boolean; override;  { declaration is in System.Classes }
        procedure ObserverAdded(const ID: Integer; const Observer: IObserver); override; { declaration is in System.Classes }
        procedure OnResize;
      public
        constructor Create(AOwner: TComponent); override;
        function Paint: Boolean; reintroduce;
        { Déclarations publiques }
      published
        { Déclarations publiées }
        property Progress : integer read FProgress write SetProgress;
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('Samples', [TThermometre]);
    end;
     
    { TRectangle1 }
     
    function TThermometre.CanObserve(const ID: Integer): Boolean;
    begin
     case ID of
        TObserverMapping.EditLinkID, TObserverMapping.ControlValueID:
          Result := True;
      else
        Result := False;
      end;
    end;
     
    constructor TThermometre.create(AOwner: TComponent);
    var pos : single;
        Brosse : TBrush;
    begin
      if not(csloading in ComponentState) then
      begin
        inherited;
        width:=30;
        height:=110;
        Xradius:=10;
        Yradius:=10;
        FProgress:=50;
        pos:=FProgress/100;
        if pos=1 then pos:=1-0.000001;
        Brosse:=TBrush.Create(TBrushKind.Gradient,Talphacolors.null);
        try
          Brosse.Gradient.Points.Clear;
          Brosse.Gradient.Points.Add;
          Brosse.Gradient.Points[0].Color:=Talphacolors.red;
          Brosse.Gradient.Points[0].Offset:=0;
          Brosse.Gradient.Points.Add;
          Brosse.Gradient.Points[1].Color:=Talphacolors.red;
          Brosse.Gradient.Points[1].Offset:=pos;
          Brosse.Gradient.Points.Add;
          Brosse.Gradient.Points[2].Color:=Talphacolors.null;
          Brosse.Gradient.Points[2].Offset:=pos+0.000001;
          Brosse.Gradient.Points.Add;
          Brosse.Gradient.Points[3].Color:=Talphacolors.null;
          Brosse.Gradient.Points[3].Offset:=1;
          Brosse.Gradient.StartPosition.X:=0.5;
          Brosse.Gradient.StartPosition.Y:=1;
          Brosse.Gradient.StopPosition.X:=0.5;
          Brosse.Gradient.StopPosition.Y:=0;
          Fill:=Brosse;
        finally
         Brosse.Free;
        end;
      end;
    end;
     
    procedure TThermometre.ObserverAdded(const ID: Integer;
      const Observer: IObserver);
    begin
      if ID = TObserverMapping.EditLinkID then
        Observer.OnObserverToggle := ObserverToggle;
    end;
     
    procedure TThermometre.ObserverToggle(const AObserver: IObserver;
      const Value: Boolean);
    var
      LEditLinkObserver: IEditLinkObserver;
    begin
      if Value then
      begin
        if Supports(AObserver, IEditLinkObserver, LEditLinkObserver) then
          Enabled := not LEditLinkObserver.IsReadOnly;
      end
      else
        Enabled := True;
    end;
     
    procedure TThermometre.OnResize;
    begin
    Paint;
    end;
     
    function TThermometre.Paint: Boolean;
    var pos : single;
    begin
    BeginUpDate;
    pos:=(FProgress/100);
    if pos=1 then pos:=1-0.000001;
     
    Fill.Gradient.Points.Clear;
    Fill.Gradient.Points.Add;
    Fill.Gradient.Points[0].Color:=Talphacolors.red;
    Fill.Gradient.Points[0].Offset:=0;
    Fill.Gradient.Points.Add;
    Fill.Gradient.Points[1].Color:=Talphacolors.red;
    Fill.Gradient.Points[1].Offset:=pos;
    Fill.Gradient.Points.Add;
    Fill.Gradient.Points[2].Color:=Talphacolors.null;
    Fill.Gradient.Points[2].Offset:=pos+0.000001;
    Fill.Gradient.Points.Add;
    Fill.Gradient.Points[3].Color:=Talphacolors.null;
    Fill.Gradient.Points[3].Offset:=1;
     
    EndUpdate;
    result:=true;
    end;
     
    procedure TThermometre.SetProgress(const Value: integer);
    begin
      if FProgress<>Value then
       begin
        FProgress := Value;
        Paint;
       end;
    end;
     
     
    initialization
     
    Data.Bind.Components.RegisterObservableMember
      (TArray<TClass>.create(TThermometre), 'Progress', 'FMX');
     
    finalization
     
    Data.Bind.Components.UnregisterObservableMember
      (TArray<TClass>.create(TThermometre));
    end.
    le lien fonctionne cf la vidéo de ce post
    toutefois le lien créé par le concepteur ne me plait pas
    Nom : Capture_1.PNG
Affichages : 465
Taille : 33,1 Ko
    bien sûr il est possible de changer la direction manuellement, mais j'aurais voulu, dans le cas du "thermometre" avoir un lien LinkPropertyToFieldText.

    mes pistes à ce stade : quelque chose à voir avec ces fonctions ajoutées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        procedure ObserverToggle(const AObserver: IObserver; const Value: Boolean);
        { Déclarations privées }
      protected
        { Déclarations protégées }
        function CanObserve(const ID: Integer): Boolean; override;  { declaration is in System.Classes }
        procedure ObserverAdded(const ID: Integer; const Observer: IObserver); override; { declaration is in System.Classes }
    et, plus précisement Observertoggle.

    à ce propos, comment on déclarerait une propriété readonly

  7. #7
    Invité
    Invité(e)
    Par défaut
    Hello Serge,

    tu deviens aussi bavard que moi !

    Alors pour les composants FNC, j'ai cela :
    Nom : Capture d’écran 2021-12-11 094216.png
Affichages : 188
Taille : 9,7 Ko
    et à l'intérieur cela :
    Nom : Capture d’écran 2021-12-11 094652.png
Affichages : 192
Taille : 20,0 Ko
    Il contient aussi :
    Nom : Capture d’écran 2021-12-11 094749.png
Affichages : 185
Taille : 21,0 Ko
    et
    Nom : Capture d’écran 2021-12-11 094842.png
Affichages : 181
Taille : 17,2 Ko

    Les sources sont donc au même endroit dans mon cas.

    Concernant
    Je m'inscris en faux sur cette assertion. Oui, il est vrai que si tu dérives via l'assistant de création à partir d'un composant...
    Evidemment vu sous l'angle que tu développes, tu as raison. Mais comme une fonction de création et de gestion de composants est intégrée dans cet IDE, je l'utilise et elle me semble parfaitement représentative du produit. Souvent dans un IDE il est possible de contourner ses limites. Il n'empêche que les fonctions qu'il propose à un usage déterminé (ici la réalisation d'un composant) sont normalement adaptées et configurer pour un développement standard.

    Pour le reste j'ai préféré encore effacer ce que je viens d'écrire mais il n'en reste pas moins que mes sensations avec Delphi et ses mécanismes particuliers s'apparentent à de la gêne, et parfois même l'impression d'être phagocyté... et pas pour atteindre une fois le code compilé les meilleures performances !

    Bon WE. Gilles

    PS : un exemple équivalent ou presque d'IDE uniquement fonctionnel sous Windows :
    A l'installation, une fenêtre est dédiée au choix de respecter la nomenclature Windows [donc dans Program Filles puisque leur éditeur est 64 bits (il existe en 32 aussi si tu préfères)]... ou de ne pas la respecter.
    Mon choix ne t'étonnera pas.
    Images attachées Images attachées  
    Dernière modification par Invité ; 11/12/2021 à 10h50.

  8. #8
    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
    Par défaut
    Citation Envoyé par HTML-Dev Voir le message
    et pas pour atteindre une fois le code compilé les meilleures performances
    tu peux définir "meilleures performances" ?

    et en faisant quoi ?

    en comparant avec quoi ?

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 680
    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 680
    Billets dans le blog
    65
    Par défaut
    Salut Gilles
    Citation Envoyé par HTML-Dev Voir le message
    tu deviens aussi bavard que moi !
    C'est, hélas pour la communauté Delphi, mon défaut. Pourtant ma femme dirait le contraire quand je suis en société

    Pour en revenir à cette histoire de base de registre tu nous montres un arborescence d'historique des chemins de recherche du compilateur donc AMHA peu interessante.

    Il eut mieux valu regarder les branches Ordinateur\HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\21.0\Known Packages
    et Ordinateur\HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\21.0\Known IDE Packages.
    J'aurai bien aussi indiqué Ordinateur\HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\21.0\Package Cache mais il semblerai que celle-ci ne soit plus cours avec la version 11 ( étrange cependant comme je n'utilise pas à fond la version 11 je ne peux affirmer)

    Citation Envoyé par SergioMaster
    ce que je ne sais pas encore faire : définir, pour un composant, un lien DataToControl plutôt que BiDirectionnel ou même plutôt un lien LinkPropertyToFieldText plutôt que LinkPropertyToFieldText
    Toujours pas trouvé, et docwiki n'est pas très parlant sur le sujet ni sur les fonctions/procedure sur les Observers d'ailleurs.
    Ce matin je me suis dit que si j'enlevais le reader de la propriété property Progress : integer write SetProgress; j'aurai eu une bonne surprise, mais non

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour Patrick et Serge (par ordre alphabétique évidemment),

    Serge, je n'ai pas passé plus de temps que cela à la recherche des bonnes clés. Ce qui me semble important c'est qu'il n'y a pas de fichier dédié dans Delphi. L'utilisation des registres est propre à Windows. Évidemment, je sais pertinemment qu'une version multi-OS de Delphi reste totalement hypothétique. Pourtant pour travailler avec 3 IDE installés chacun dans des environnements "multi-OS", il n'y a pas photo !

    Patrick, je prendrais 3 exemples significatifs à mes yeux :

    1. Performance de l'exécutable : Pour moi un Pascal vaut normalement un autre Pascal. J'ai rapatrié sur mon poste de développement une base de données mariaDB après y avoir installé un serveur en local. Elle contient un grand nombre d'enregistrements : [ID, T°, N° Sonde, Timestamp]. Les températures sont enregistrées toutes les minutes depuis... des années. J'ai fait 2 programmes identiques de traitement des données, identiques sauf à la lecture des données près même si la requête SQL est identique. Une en Lazarus, l'autre en FireMonkey-LiveBindings en utilisant le wiki officiel complété par un tuto de Serge. Le tout est compilé en 64 bits. La performance "mesurée" est le temps de traitement. Je me demande si mon Windev ne ferait pas mieux que Delphi-Livebindings

    2. Performance esthétique et plus particulièrement respect des standards de la cible
      • Si je cible Ubuntu ou Mac OS, j'aimerais ne pas avoir l'impression d'être sous Windows [respect des polices et des couleurs natives]. Donc j'attends également une performance esthétique, notamment celle du respect des objets graphique de l'OS cible.
      • J'aimerais même que FireMonkey respecte nativement les capacités de Windows, comme par exemple, la capacité de doter chacune fenêtre windows de sa propre icone et pas de limiter l'affichage des icones de chacune des fenêtres à celle du programme !

        Nom : Capture d’écran 2021-12-12 140721.png
Affichages : 448
Taille : 39,2 Ko

        Il y a peut-être un moyen simple de faire comme avec VCL mais je n'ai pas vu dans les propriétés de la Form FMX

        Nom : Capture d’écran 2021-12-12 141004.png
Affichages : 441
Taille : 30,5 Ko

        Tu vois, j'appelle cela performance d'une part, et respect de "l'ambiance" de la cible d'autre part. Je me rappelle avoir "surpassé" ce problème d'icône dédiée à chaque fenêtre sous Windows en Firemonkey XE7... au motif que ce n'est pas parce que j'utilise FMX qui a pour cible Windows, Linux, mac OS que je suis sensé obtenir moins qu'avec Lazarus qui à les mêmes cibles !

    3. Je me rappelle également avoir signalé un problème de performance notamment des MemoryStream. C'était en XE 7. Corrigé ? Bref, un résumé ? Ici.


    La critique ne fait (malheureusement) pas progresser. Je rencontre toujours les mêmes problèmes depuis les défuntes versions XE. En réalité me concernant, j'ai 2 contraintes fortes :

    1. pouvoir afficher dans des Grids en consultation du texte enrichi [je préfère de loin HTML] et gérer dans des Tedit, TMemo ce texte HTML. Lazarus le permet au moins grâce à TMS FNC et les 2 FNCGrid et FNCRichEditor sont par leurs propriétés configurable en ambiance native de l'OS ce que je n'arrive pas à faire avec leur équivalent TMS FMX.. sous Firemonkey. Heureusement les TMS FNC en plus de fonctionner sur LCL/VCL sont compatibles Firemonkey

    2. utiliser nativement mes tables mariaDB ~directement en mobile. Unidac permet cette "fantaisie" mais Lazarus ne cible pas ou très mal les mobiles. Firemonkey le permet... mais à quel prix ? Je ne parle pas du prix commercial ! Mais des concessions, de l'investissement personnel. J'ai toujours était rebuté par ce produit. Mal fagoté, "du RTTI" comme dirait Serge qui à mon sens n'apporte rien voire même parfois pénalise des performances à l'exécution tout en imposant une complexité supérieure le tout dans une polyvalence restrictive dans toutes les cibles (ie le commun dénominateur par défaut). Je compare. Il y a d'autres solutions. Mon entreprise possède tous les produits PC Soft y compris le Serveur d'application Webdev installé sur un de nos serveurs. Il y a un Web Service développé par PC Soft, installé également sur ce serveur qui permet d'utiliser directement des ordres SQLConnectWS et de programmer presque comme je le ferais avec Unidac, sans me soucier d'autres choses. Et comme nos programmes Desktop sans d'abord maquettés en Windev, le port du code de Windev à Windev Mobile est quasiment immédiat. Bon c'est pas du Pascal mais ce n'est pas non plus une imitation de Pascal ou -pour rester plus neutre- une évolution du Pascal tel que je l'apprécie.


    Du RTTI... Nom de nom ! Il y a des composants pour en faire. Alors pourquoi l'imposer ? Pourquoi modifier autant et surtout de la sorte ce merveilleux langage ? J'avais lu un article faisant le parallèle entre C et Pascal puis C++ et pascal Object. Contrairement au titre un peu provocateur de l'article, l'auteur promeut le Pascal. Je serais bien en peine de faire la promotion de Firemonkey... Celle de la 2CV comme dit Serge, je peux et d'ailleurs je le fais. En parallèlement, je teste et je réfléchis.

    A bientôt. Gilles
    Dernière modification par Invité ; 12/12/2021 à 17h28.

  11. #11
    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
    Par défaut
    Ok, donc là on a des trucs concrets.

    Pour le (1), quelle version de Delphi a été utilisée ? As-tu retenté sur une version récente pour voir s'il y a toujours cet écart pour le traitement que tu fais ? Peux-tu nous montrer ce code qu'on voit si ça vient de FMX, la RTL, LiveBindings ou la façon que tu as de mélanger le tout pour obtenir le résultat qui t'intéresse ?

    Pour le (2), les applications FMX prennent le look officiel de la plateforme pour laquelle ils sont compilés. Il y a un style embarqué par défaut qui s'en charge.
    Pour les spécificités de chaque plateforme, ce n'est pas l'optique de conception de FMX qui prend essentiellement des fonctionnalités qui sont adaptables sur toutes les plateformes ciblées.
    Le cas des icônes par fenêtre, je n'ai jamais eu à me poser la question sous Windows et ne me la pose pas en FMX, mais comme c'est un truc lié à l'API Windows, ça doit être faisable en passant par l'API. Il n'y a pas d'option pour ça dans le TForm de FMX, la question ne se posant que pour Windows.

    Pour le (3), je suis allé voir. Pal mal de choses ont bougé en 8 ans, il serait bien que tu déteste ton logiciel de l'époque sur une version récente si c'est possible. L'écart de temps que tu signalais n'est probablement plus le même, mais là encore tout dépend de ce que tu fais vraiment comme traitement. (je n'ai pas regardé les codes sources que tu avais joints à l'époque)

    Après, ce que tu reproches à Delphi est une nouvelle fois en rien de la responsabilité d'Embarcadero mais des éditeurs de composants que tu utilises.

    Si TMS ne gère pas correctement les styles FMX dans ses composants, Embarcadero n'y peut pas grand chose. Par contre n'hésite pas à contacter le support de TMS Software qui se fera un plaisir de corriger les éventuelles anomalies de leurs composants ou de t'orienter vers la solution la plus adaptée à ton cas. Bruno Fierens et son équipe sont très réactifs.

    Concernant l'accès aux serveurs de bases de données depuis les applications mobiles, FireDAC ne le permet pas et ne le permettra probablement jamais. UniDAC (produit payant édité par Devart) permet de le faire pour certaines bases en embarquant le driver ou en le simulant nativement en Pascal lorsque l'API du serveur de base de données le permet.

    Je passe sur la pertinence (ou son absence) de se connecter à des serveurs de bases de données depuis des applications mobiles (essentiellement pour les éventuels soucis de connexion, réseau, ... qui dépendent du contexte).

    Si tu veux que ça passe, il faut faire comme le fait PC Soft : du 3tiers. C'est à ça que sert notamment DataSnap qui masque cette couche pour les développeurs en générant un serveur et une librairie permettant de partager des données comme des procédures/fonctions. Ca passe très bien sur toutes les plateformes proposées par Delphi, à condition d'avoir une licence Entreprise ou Architecte puisque DS n'est pas proposé en dessous.

    Il est cependant plutôt recommandé de mettre en place des serveurs REST (DataSnap le permet, comme WebBroker, RAD Server, DMVC Framework, ...) pour ouvrir les accès à tous types de technologies clientes, mobiles, desktop ou web.

    Sur ton histoire de RTTI je n'ai rien compris.
    Jon dont tu cites un article de 2015 a bossé pour Embarcadero pendant quelques temps et édite depuis des années des outils de développement en Pascal pur faire du web. Je ne vois pas trop ce qu'il vient faire dans cette histoire de FMX.

    Concernant l'apprentissage et les différences entre FMX et la VCL, franchement, je ne vois pas le problème non plus. Il y a quelques différences au niveau des propriétés, mais la principale est le fait de devoir tout faire en asynchrone si on cible des smartphones ou tablettes et c'est à mon sens une bonne pratique de s'y mettre aussi pour le développement desktop d'une manière générale. Il faut arrêter de bloquer les utilisateurs pour les traitements longs et se mettre à utiliser enfin les capacités des processeurs et systèmes d'exploitation au niveau des threads. Seul point vraiment saoulant au début c'est pour les boites de dialogues, on n'a pas l'habitude de déporter le code, mais une fois le coup de main pris, c'est plus cohérent par rapport au fonctionnement des logiciels (avis complètement personnel).

  12. #12
    Invité
    Invité(e)
    Par défaut
    Rebonjour Patrick,

    merci d'avoir répondu à mes agaçantes remarques. J'en suis conscient.

    Sans polémique compte tenu de ma conclusion, je me permets une dernière fois de ne pas partager ton point de vue. Demain est un autre jour, et une autre approche .

    Citation Envoyé par pprem Voir le message
    Pour le (1), quelle version de Delphi a été utilisée ? As-tu retenté sur une version récente pour voir s'il y a toujours cet écart pour le traitement que tu fais ? Peux-tu nous montrer ce code qu'on voit si ça vient de FMX, la RTL, LiveBindings ou la façon que tu as de mélanger le tout pour obtenir le résultat qui t'intéresse ?
    La dernière disponible pour la tester : la 10.4 community. Ce ne sont pas les mêmes codes exactement puisque je n'utilise pas de Blob dans mes derniers tests justement pour séparer l'utilisation des TMemoryStream de l'accès à la BDD. Comme je l'ai écrit, à l'exécution il n'y a pas photo.

    Pour le (2), les applications FMX prennent le look officiel de la plateforme pour laquelle ils sont compilés. Il y a un style embarqué par défaut qui s'en charge.
    Je veux bien te croire sur paroles. Dans ce cas, il y a eu de gros progrès. Je ne peux plus le faire mais avec FMXlinux, j'avais cross-compilé vers Ubuntu et une autre distribution (Mint, je crois). Si tu n'étais pas trop regardant, c'était presque bon ! Enfin pour revenir à ce que j'avais vu, j'avais des TLabels tronqués dans les OS non Windows. Évidemment, quand on a la chance d'avoir l'IDE fonctionnant lui-même sur la cible desktop, on se rend compte de ce genre de détails avec un simple "Run"... mais quand on cross-compile, on est aveugle au niveau de la GUI. Reste une solution un peu brimante : trouver des polices communes aux 3 OS et espérer que le rendu est identique.

    Le cas des icônes par fenêtre, je n'ai jamais eu à me poser la question sous Windows et ne me la pose pas en FMX, mais comme c'est un truc lié à l'API Windows, ça doit être faisable en passant par l'API. Il n'y a pas d'option pour ça dans le TForm de FMX, la question ne se posant que pour Windows.
    Alors le fait que FMX ne gère pas les icônes des fenêtres se gère effectivement. J'avais pallié cette propriété "oubliée" des TForm. Mais quand même, l'IDE est sous Windows ! Il n'est pas capable d'intégrer sous FMX, cette propriété qui est native de Windows quand il cible... Windows ! C'est de la faute de Windows et pas d'Embarcadero. Ils (le premier) n'avait qu'à pas mettre d'icône à ses fenêtres. Comment Lazarus gère-t-il le même problème? Bien ! Aussi facilement qu'avec la VCL. De la même façon, pour les éditeurs de composants tiers, j'ai du mal à admettre ton argument puisque en réalisant un composant à partir de l'IDE, je suis obligé de préciser le chemin de ses sources à la main s'il s'agit d'un composant FMX. S'il s'agit d'un composant VCL, je ne suis pas obligé. Là, c'est peut-être de la faute de Borland, je suppose . Mais l'expert, c'est toi. Donc acté, c'est normal.

    Sur ton histoire de RTTI je n'ai rien compris.
    Serge a défini ainsi le Livebindings quelques lignes plus haut :
    Une encapsulation de RTTI et plus avec l'interpréteur d'expressions. Cette définition me semble encore réductrice
    D'où mes propos.

    [...]il serait bien que tu déteste ton logiciel de l'époque sur une version récente si c'est possible.
    Je n'apprécie pas effectivement la manière de développer imposée par Embarcadero tout particulièrement son LiveBindings et ses styles. Je la ressens comme une contrainte forte et donc la contrainte étant forte, j'en attends "mieux" ! Or cette appréciation est d'abord rationnelle. Je compare. J'utilise d'autres IDE. Je suis effectivement dépité de voir ce qu'est devenu Delphi. Je suis un peu désolé de voir qu'à chaque nouvelle tentative, mes résultats sont toujours aussi décevants. J'ai bien appris à développer en Qt après avoir abandonné Firemonkey. Il a ses limites aussi. Mais j'en ai eu pour mon investissement personnel. Quand on change, il faut au moins en obtenir autant que la concurrence.

    J'ai 2 challengers que je maitrise bien alors qu'initialement je suis un développeur en Delphi depuis la première version et même avant avec Turbo-pascal. De la même façon, j'ai commencé avec PC-Soft avec la version 5. J'ai abandonné avec eux en 7.5. Ils ont un peu pataugé aussi au début... puis j'ai renoué avec leurs produits plus tard parce qu'ils avaient évolué de manière significative. J'en suis à la 27. C'est une approche particulière aussi les IDE de PC Soft. Sans oublier Qt : j'ai commencé très maladroitement avec la version 4, adopté la version 5, et avant de m'adapter éventuellement à la 6 qui me pose 2 problèmes, je refais un test avec Delphi, prêt à faire évoluer mes méthodes de programmation, au moins à les approfondir. Mais pour chaque question que j'ai posée, il existe une solution avec les IDE que j'utilise. Je soupèse ce que l'on m'oppose : c'est de la faute des éditeurs tiers, il ne faut pas mettre tes fichiers ici où là, il n'y a pas besoin de vouloir obtenir ceci. En programmation, le décideur est la personne qui est au clavier et pas l'IDE... même si c'est un RAD qui est initialement une simple méthode de planification et pas un carcan (sans doc en plus).

    Au final, mon appréciation se "cristallise" ainsi maintenant :

    • pour le desktop, Lazarus est largement plus performant que Delphi FMX. Je sais cela fait bondir. Mais si vous programmez en VCL, LCL convient. Il faut un peu d'huile de coude pour peaufiner ou adapter certains composants sous Linux ou Mac OS, mais cest du pascal, intégralement pascal. Et je crois qu'un IDE doit se faire oublier. Lazarus reste à sa place. Je considère qu'il est plus performant par sa facilité de programmation, sa souplesse de programmation, son approche multi-OS, la liberté laissée au programmeur, sa facilité à être compris, et les performances à l'exécution des programmes compilés. Tout n'est pas parfait. C'est un produit Open Source. Évidemment concernant les générateurs d'états, les "reports", un produit comme NCReport est inatteignable aussi bien par Lazarus que pour les produits intégrés à Delphi (FMX report actuellement dont la gestion du HTML est minimaliste par exemple). Qt c'est du C++, asynchrone, multi-OS. C'est compilable statiquement. Même maintenant, je considère que cette découverte tardive pour moi a été une vraie chance. Windev est un remarquable outil de maquettage et de perfectionnement d'IHM. Il permet de voir très rapide les fenêtres fonctionner. Dommage qu'il ne compile pas vers Mac OS, sauf à utiliser sa génération Java, qui comme les fonctions compatibles Linux sont encore limitées par rapport aux capacités Windows.
    • pour le mobile, que dire ? FMX est une solution parmi d'autres. Comme le mobile n'est pas ma cible première, pour moi, Windev Mobile est tout simplement plus simple d'accès surtout quand on connait Windev et pas ridicule du tout. Mais on peut trouver bien d'autres applicatifs pour concevoir des applications mobiles sans LiveBindings ou autre approche "propriétaire" intrusive.


    Je vous remercie tous les 2 de votre patience et comme d'habitude, de m'avoir fait progresser, de m'avoir permis de décider. Je vais encore une fois m"éloigner de Firemonkey, peut-être cette fois-ci définitivement. Le temps que je ne passerai pas à me "navrer" sera consacré à Qt 6. J'ai un petit problème à régler d'obsolescence de classes entre la 5 et la 6, et un autre de capacité à compiler statiquement Qt 6 sous Windows avec Mingw64.

    Encore merci. Cordialement. Gilles
    Dernière modification par Invité ; 12/12/2021 à 22h02.

Discussions similaires

  1. Modifier Répertoire Racine ovh
    Par Langly dans le forum Apache
    Réponses: 3
    Dernier message: 25/08/2006, 15h50
  2. Déplacer un répertoire et son contenu
    Par choubiroute dans le forum Langage
    Réponses: 6
    Dernier message: 28/04/2006, 12h59
  3. [Configuration] Pointer vers un répertoire racine
    Par masseur dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 22/03/2006, 16h02
  4. Réponses: 5
    Dernier message: 22/03/2006, 15h22
  5. [EasyPHP] Déplacer le répertoire WWWW
    Par Furius dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 10/10/2005, 21h36

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