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 :

Frame et Docking de Forme


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    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 075
    Points : 41 030
    Points
    41 030
    Billets dans le blog
    62
    Par défaut Frame et Docking de Forme
    FMX ne semble pas connaitre ces termes .

    Après maints essais et recherches google , j'ai plus ou moins réussi une pseudo frame selon la méthode indiquée dans le wiki
    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
     
    type
      TForm15 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Lang1: TLang;
        Layout1: TLayout;
        procedure AjouterClick(Sender: TObject);
        procedure EffacerClick(Sender: TObject);
      private
        { Déclarations privées }
        procedure EmbeddForm(AParent:TControl; AForm:TCustomForm);
      public
        { Déclarations publiques }
      end;
     
    var
      Form15: TForm15;
     
    implementation
     
    {$R *.fmx}
     
    uses Unit16;
     
    procedure TForm15.AjouterClick(Sender: TObject);
    begin
     EmbeddForm(Layout1, TForm16.Create(self));  // afficher la 'fausse frame'
    end;
     
    // équivaut a la frame 
    procedure TForm15.EmbeddForm(AParent:TControl; AForm:TCustomForm);
    begin
      while AForm.ChildrenCount>0 do
        AForm.Children[0].Parent:=AParent;
    end;
     
    procedure TForm15.EffacerClick(Sender: TObject);
    begin
      Layout1.DeleteChildren;    // efface bien les enfants 
      // cependant les contrôles apparaissent toujours 
    end;

    si la méthode fonctionne pour l'ajout des composants , par contre impossible de l'effacer . Dans mon test , la TForm16 contient un label et un bouton . Après la procedure effacerClick le bouton et le label sont toujours visible , cependant le bouton ne fonctionne plus .

    j'ai essayé plusieurs choses pour effacer :
    - Encadré le deletechildren avec un BeginUpdate et EndUpdate
    - Ajouté un repaint etc...
    Rien n'y fait

    n'y aurait t-il aucun moyen d'avoir du docking avec FMX ?! c'est bien beau des applications 'mono forme' mais pour une bonne grosse application c'est un peu léger . FMX me semble bien jeune
    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. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 316
    Points
    11 316
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ne faut-il pas plutôt ajouter les enfants par TLayOut.Add() ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    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 075
    Points : 41 030
    Points
    41 030
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Bonjour,

    Ne faut-il pas plutôt ajouter les enfants par TLayOut.Add() ?
    pourquoi pas , effectivement , mais où j'ai mis Layout cela aurait pu aussi bien être un Panel ou un Tabcontrol (en fait j'ai essayé ces 2 autres également ) .

    En fait j'ai suivi ce qui était indiqué dans le wiki ici
    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

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 316
    Points
    11 316
    Billets dans le blog
    6
    Par défaut
    Il faut donc peut-être garder une référence sur la fiche pour changer son Parent (nil) et la détruire si on n'en a plus besoin.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut Je travaille la question
    Bonsoir

    Je n'ai pas pu tester les dernières réponses reçues faute de temps mais,

    Pour avoir une pseudo frame ou une fenêtre enfant, il y a un truc simple

    form1, form pricipale contient un panel1

    form2, contient un panel2 avec un button1

    Si je met form2.panel2.parent := form1.panel1, form2 visible:=false, alors j'ai le contenu du panel2, dans dans form1 avec le code du button1 du panel2.

    Voilà, si ça peux aider

    Cordialement

    André

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    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 075
    Points : 41 030
    Points
    41 030
    Billets dans le blog
    62
    Par défaut
    Eureka

    la 'formule magique' était invalidateRect et ce qu'un repaint/refresh ou tout autre test ne faisait pas s’accomplit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm15.EffacerClick(Sender: TObject);
    begin
      Layout1.DeleteChildren;    // efface bien les enfants 
      Layout1.InvalidateRect(Layout1.BoundsRect);
    end;
    il me reste encore 11 jours d'essais pour trébucher sur ces nouveaux concepts
    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. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 484
    Points : 24 959
    Points
    24 959
    Par défaut
    nouveaux concepts
    InvalidateRect n'est pas si nouveau que cela !
    Cela existait déjà dans la VCL encapsulé dans Invalidate.
    C'est même une API Windows !

    Dommage Invalidate n'existe que dans TCommonCustomForm mais pas dans le TControl

    Les Developpeurs de FMX ont été assez malin pour reprendre un vocabulaire connu issu de la VCL ou Microsoft (lié aussi à la couche GDI \ DirectX)
    Mais aurait pu fournir quelques autres facilités !
    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

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    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 075
    Points : 41 030
    Points
    41 030
    Billets dans le blog
    62
    Par défaut
    je ne parlais pas de 'nouveaux concepts' en me référent a InvalidateRect .
    Mais plutôt aux parentés de composants .

    Les Developpeurs de FMX ont été assez malin pour reprendre un vocabulaire connu issu de la VCL ou Microsoft
    S'ils étaient si malins , un deletechildren aurait du forcer cet invalidate non ?

    des propriétés comme Anchors me manquent , des fonctionnalités comme le Docking avec son gestionnaire me manquent également beaucoup .
    Tout cela est certainement du a mon 'inexpérience' des fmx les possibilités sont certainement énormes mais la documentation nettement moins (merci youtube)

    exemple : essayes de faire un F1 sur DeleteChildren ou encore sur canclip,clipchildren,clipParent

    mais bon , je suis loin d'avoir fait le tour de la question . Avant de me lancer j’essaye de mettre le doigt sur des points selon mes habitudes de programmation VCL (ce qui est peut être mauvais) et de trouver la solution FMX
    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. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 484
    Points : 24 959
    Points
    24 959
    Par défaut
    Pour DeleteChildren, c'est toujours difficile, c'est vrai qu'ils auraient pu provoquer un Refresh et avoir la possibilité d'un Begin\EndUpdate pour grouper les traitements et avoir le Refresh qu'à la fin !

    DeleteChildren étant utilisé par CloneChildFromStream, on dirait plus une méthode privée qui est a été mis en publique au dernier moment
    Cela se voit en lisant l'aide de DeleteChildren qui est très légère et décrit plus CloneChildFromStream qu'autre chose !

    Pour le Docking, je ne l'ai jamais utilisé, je n'ai jamais dépassé le stade de l'affectation d'un Parent à une TForm

    Et oui les habitudes VCL doivent toutes être remise en cause en FMX, même si tout plein de truc ont les mêmes noms mais ne font pas tout à fait la même chose !

    Pense que la documentation contient un FeedBack, il ne faut pas hésiter à leur indiquer les imprécisions !
    La QC est là aussi pour cela !
    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

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    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 075
    Points : 41 030
    Points
    41 030
    Billets dans le blog
    62
    Par défaut
    c'est ce qui m'a fait dire

    Citation Envoyé par sergiomaster
    FMX me semble bien jeune
    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. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 484
    Points : 24 959
    Points
    24 959
    Par défaut
    FMX est jeune mais son "modèle" VGScene d'Eugene Kryukov a près de 5 ans !
    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

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    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 075
    Points : 41 030
    Points
    41 030
    Billets dans le blog
    62
    Par défaut une autre solution
    A voir une vidéo proposant une autre manière de faire le 'Framing' très convaincante
    ici
    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

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

Discussions similaires

  1. PageControl et Docking de Form
    Par SergioMaster dans le forum Langage
    Réponses: 6
    Dernier message: 10/12/2014, 10h09
  2. Evennement sur Dock de Form ?¿ (Hors MDI)
    Par Themacleod1980 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/01/2013, 16h13
  3. Form action Frame
    Par phil22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 08/08/2006, 12h14
  4. Utilisation des Frames sur une Forms
    Par selmak7 dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/07/2006, 17h42
  5. Frame de forme adapatble
    Par kivan666 dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 17/03/2006, 08h18

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