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

Lazarus Pascal Discussion :

[2.2.4] Besoin d'explication et d'aide à propos du TComponent et de sa destruction


Sujet :

Lazarus Pascal

  1. #21
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Salut

    Je n'ai pas compris, qu'entends-tu par
    faire pour avoir mes panneaux dès qu'ils sont créés dans l'enchainement des procédures et fonctions,
    Je pensais que l'exemple que je t'avais fourni était assez parlant.

    Pour déterminer une action particulière sur un bandeau précis, tu peux utiliser les fameuses méthodes de classe.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  2. #22
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Je n'ai pas compris, qu'entends-tu par
    faire pour avoir mes panneaux dès qu'ils sont créés dans l'enchainement des procédures et fonctions,
    Je pensais que l'exemple que je t'avais fourni était assez parlant.
    Pour mettre des valeurs dans les labels, par exemple la durée d'une chanson, juste après avoir créé les panneaux et donc les labels, l'enchainement des procédures va lire le(s) fichier(s) .wav, y récupérer les données qui m'intéressent et les attribuer aux labels puis la boucle continue avec le redimensionnement des panneaux, car si ce n'est pas le même nombre qu'à l'écoute précédente, ça va être tout moche.
    Et là c'est enfin fini.

    Mais comme le montre cette copie d'écran prise juste avant la récupération des données, je n'ai pas de cible pour affecter les valeurs...
    Nom : no_controls.png
Affichages : 196
Taille : 25,6 Ko

    Des fois on n'y comprend rien de chez rien...

    Tiens, c'est comme avec ton petit exemple de ce matin : j'ai essayé d'autres manips pour tenter d'avoir ces fichus panneaux dans un ordre numérique de haut en bas mais pas moyen, même en parcourant à l'envers comme ça :
    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
    {  // 1re version : on clique ça crée un panneau
      SetLength(Tableau, Length(Tableau)+1);
      ShowMessage(inttostr(High(Tableau))); // "0" au 1er clic, "1" au suivant, etc.
      Tableau[High(Tableau)] := TPanelex.Create(Panel2);
      Tableau[High(Tableau)].CreationPanneaux(Panel2, Length(Tableau));
      Caption := inttostr(Length(Tableau));    }
     
      // 2nde version : on clique ça demande combien de panneaux
      sNumber := '1';
      if InputQuery('Titre', 'Nombre de panneaux à créer : ', sNumber) then
        if TryStrToInt(sNumber, iNumber) then
    {//      for i := 0 to iNumber-1 do begin
          for i := iNumber-1 downto 0 do begin
            SetLength(Tableau, Length(Tableau)+1);
            Tableau[iNumber-i-1] := TPanelex.Create(Panel2);
            Tableau[iNumber-i-1].CreationPanneaux(Panel2, Length(Tableau));
          end;
    // affichage à l'envers
    }
     
    {      // autre essai en inversant le comptage : affichage toujours à l'envers
    //   SetLength(Tableau, Length(Tableau)+iNumber);
       for i := iNumber-1 downto 0 do begin
       //for i := 0 to iNumber-1 do begin
         SetLength(Tableau, Length(Tableau)+1);
         //ShowMessage(inttostr(High(Tableau))); // 0 si 1 saisi, 1 si 2, 2 si 3, etc.
          Tableau[iNumber-1-i] := TPanelex.Create(Panel2);
          Tableau[iNumber-1-i].CreationPanneaux(Panel2, Length(Tableau));
    //      Tableau[i] := TPanelex.Create(Panel2);
    //      Tableau[i].CreationPanneaux(Panel2, Length(Tableau));
        end;
    }
        // dernier essai en inversant le comptage et la dimension du tableau :
        // avec 1 ça fonctionne, avec 3 --> "duplicate name"
        SetLength(Tableau, Length(Tableau)+iNumber);
        for i := iNumber-1 downto 0 do begin
          ShowMessage(inttostr(High(Tableau))); // 0 si 1 saisi, 1 si 2, 2 si 3, etc.
          Tableau[iNumber-1-i] := TPanelex.Create(Panel2);
          Tableau[iNumber-1-i].CreationPanneaux(Panel2, Length(Tableau));
        end;
     
      Caption := inttostr(Length(Tableau));
    end;
    Je me prends une histoire de doublon, ça m'épuise...
    Nom : duplicate_name.png
Affichages : 194
Taille : 25,8 Ko

    Citation Envoyé par anapurna Voir le message
    Pour déterminer une action particulière sur un bandeau précis, tu peux utiliser les fameuses méthodes de classe.
    Comment identifier ce bandeau ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #23
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Salut

    Je remplacerais ce code
    // avec 1 ça fonctionne, avec 3 --> "duplicate name"
    SetLength(Tableau, Length(Tableau)+iNumber);
    for i := iNumber-1 downto 0 do begin
    ShowMessage(inttostr(High(Tableau))); // 0 si 1 saisi, 1 si 2, 2 si 3, etc.
    Tableau[iNumber-1-i] := TPanelex.Create(Panel2);
    Tableau[iNumber-1-i].CreationPanneaux(Panel2, Length(Tableau));
    end;

    Caption := inttostr(Length(Tableau));
    Par celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        iNumber := 10 ;
        SetLength(Tableau,iNumber); // je fixe la taille de mon tableau a 10 
        for i := iNumber-1 downto 0 do 
        begin
          ShowMessage(inttostr(I)); // 0 si 1 saisi, 1 si 2, 2 si 3, etc.
          Tableau[i] := TPanelex.Create(Panel2);
          Tableau[i].CreationPanneaux(Panel2, i);
        end;
     
       Caption := inttostr(iNumber);[/QUOTE]
    Le seul probleme dans ce cas-là c'est que tu dois connaître le nombre d'éléments avant.
    Je pense que tu fais une confusion entre les données à traiter et l'affichage.

    Si j'ai bien compris, tu veux insérer chaque nouveau TPanelEx en haut plutôt qu'en bas ?
    La hauteur des panels est-elle unique ?

    La gestion de tes données se fait bien TPanelEx par TPanelEx ...
    Il n'y a aucune interaction ente eux, mise à part la position de l'écran.
    En te lisant, j'en déduis que chaque TPanelEx est associé à un morceau de musique unique.

    Mon exemple te donne l'exemple pour créer des TPanelEx de façon dynamique.
    Cela aurait très bien pu être des TFrame ou des Tform.
    Ton TPanelEx est une boîte noire indépendante constituée d'autres panels et de labels pour lesquel tu indiques différents éléments à afficher concernant un fichier de musique.

    Tu aurais très bien pu l'appeler TPnlMusic, celui-ci ne concernant qu'un morceau et un seul morceau.
    Le nom du fichier aurait donc pu être associé à ce panel spécialisé.

    Comment identifier ce bandeau ?
    Dans ta méthode de classe, tu peux lui passer des paramètres tels que le sender (le composant concerné par la méthode), ce qui te permet donc de connaître l'info.
    Tu peux aussi lui passer l'identifiant ou toute autre info.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #24
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut et merci de te prendre la tête pour moi.

    Et tu vas rire en me lisant plus bas, mais d'abord je te réponds :
    Citation Envoyé par anapurna Voir le message
    je remplacerais ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // avec 1 ça fonctionne, avec 3 --> "duplicate name"
    ...
    Tableau[iNumber-1-i].CreationPanneaux(Panel2, Length(Tableau));
    par celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       ...
    Tableau[i].CreationPanneaux(Panel2, i);
    Mais bien sûr !
    Et je ne l'avais pas vu, désolé ! (faut dire aussi qu'en codant à pas d'heure, on récolte des misères, )

    Citation Envoyé par anapurna Voir le message
    le seul problème dans ce cas-là c'est que tu dois connaitre le nombre d'éléments avant
    Mais je le connais puisque je le fais saisir par un InputQuery (qui simule une ouverture de TOpenDialog pour choisir des fichiers et donc un nombre de fichiers).

    Citation Envoyé par anapurna Voir le message
    si j'ai bien compris tu veux insérer chaque nouveau TPanelex en haut plutôt qu'en bas
    Tout à fait.

    Citation Envoyé par anapurna Voir le message
    la hauteur des panels est-elle unique ?
    Tu veux dire identique ? Auquel cas, la réponse est oui ! (j'ai l'impression de ne pas être lu -- ou pas compris).

    Citation Envoyé par anapurna Voir le message
    en te lisant j'en déduis que chaque TPanelex est associé à un morceau de music unique
    Tout à fait.

    Bon, ça c'est réglé, sauf la numérotation, car j'aimerais vraiment voir
    Objet0
    Objet1
    Objet2
    etc.

    Sinon, la grande nouvelle du petit matin :
    je viens ENFIN de comprendre un truc de malade (et c'est sans doute pourquoi, jusqu'à ce jour, mon cerveau refusait de mémoriser ça) : dans une procédure tout bête (et pas une méthode de classe sophistiquée, même si c'est la même chose), le mot-clé Self NE FAIT PAS référence à soi comme on pourrait le traduire depuis un anglais littéraire ultra classique, mais au parent !

    Un truc aussi tordu, je ne l'avais jamais envisagé, parce que le self-control, c'est bien un truc qui me concerne, tout comme la self-défense, hein...

    Démo avec une fiche et deux bêtes boutons :
    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
    procedure TForm1.Button3Click(Sender: TObject); // 2e essai jp
    begin
      pnlhost:= TPanel.Create(Form1);
      with pnlhost do begin
        Name := Self.Name; // Self NE FAIT PAS référence à 'self' (= "moi"),
        // mais au parent, la preuve :
        //ShowMessage(Parent.Name); // SIGSEGV, aïe !
        Caption:=Name; // vide si Name pas mis
        Color := clSkyBlue;
        Align := alTop;
        Height:= 200;
        Parent:= Form1;
    //    Caption:=Name; // idem
      end;
    //  pnlhost.Caption:=pnlhost.Name; // idem
    //  Application.ProcessMessages; avec ou sans, dessous c'est SIGSEGV
    //  ShowMessage(Parent.Name); // SIGSEGV, aïe !
      Button4Click(nil); // ça fonctionne, ouf !
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      ShowMessage(pnlhost.Parent.Name); 
    end;
    À partir de là, je peux expérimenter et par ex, rajouter une procédure pour me débarrasser du bouton ci-dessus, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.TestNameWithParam(o: TObject);
    begin
      ShowMessage((o as TWinControl).Name);
    end;
    appelée depuis le bouton de création du panel avec TestNameWithParam(Self); qui m'affiche donc bien "Form1" (, hélas pour la compréhension, je rajoute)

    Ça va me changer la vie pour la suite.

    Et pour ceux qui galèrent avec ces trucs (pas le Self tordu mais la création d'objets dans un autre), un lien à suivre...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #25
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Sans vouloir ajouter mon grain de sel...
    Mais Self fait référence à l'objet pour lequel la méthode (et pas "procédure"... même si ça s'appelle procédure en Pascal... car nous sommes en programmation objet) est appelée, donc je ne vois pas où la confusion est possible. Dans une méthode de TForm, Self fera toujours référence à l'objet Form pour lequel la méthode est appelée.
    Aussi, comme je l'ai déjà dit par le passé, l'utilisation de with n'aide pas à avoir les idées claires, je ne l'utilise jamais et je ne le recommande pas, car le gain dû au code plus concis n'est pas flagrant (pour moi) comparé à la compréhension globale du code.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  6. #26
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par M.Dlb Voir le message
    Self fait référence à l'objet pour lequel la méthode (...) est appelée, donc je ne vois pas la confusion est possible.
    Dans ma tête.
    Quand je vois/lis le mot Self, n'importe où dans ce vaste monde, je le traduis instinctivement par soi, ce qui est d'ailleurs confirmé par mon vieux Larousse, .

    Et quand je lis MonBouton := TButton.Create(Self);, je ne comprends pas, j'ai l'impression de lire que MonBouton va être possédé par lui-même, et ça me dépasse. C'est bête, hein !

    Tu n'aimes pas le With (que j'adore dans certains cas, genre la création d'un objet avec plein de propriétés, en plus ça permet de replier le bloc, quand il y a plusieurs objets c'est visuellement très sympathique), moi c'est le Self que j'abhorre,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #27
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Incompréhension au niveau du Self manifestement.

    Self est juste un paramètre invisible passé en premier argument à toutes les méthodes d'un objet ou d'une classe (méthode de classe), rien de plus.
    Ce n'est pas une méthode qui retourne l'objet courant et est donc sans rapport avec celui utilisé par with.

  8. #28
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour à toi,

    Citation Envoyé par Andnotor Voir le message
    Incompréhension au niveau du Self manifestement.
    On est bien d'accord,

    Citation Envoyé par Andnotor Voir le message
    Self est juste un paramètre invisible passé en premier argument à toutes les méthodes d'un objet ou d'une classe (méthode de classe), rien de plus.
    Et voilà-t-y pas qu'on passe des paramètres invisibles, maintenant ! Mais où cela va-t'il s'arrêter ? Harry Potter au secours,
    Ceci étant dit, tu n'as pas expliqué pourquoi cette chose invisible était passée...

    Citation Envoyé par Andnotor Voir le message
    Ce n'est pas une méthode qui retourne l'objet courant et est donc sans rapport avec celui utilisé par with.
    Ah ça, c'était juste pour parler des choses qu'on aime ou pas, je n'essayais pas de comparer des fonctionnalités.

    Bon, faut que je bouge, cet aprème, mais tout ceci est bien intéressant,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #29
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Ceci étant dit, tu n'as pas expliqué pourquoi cette chose invisible était passée...
    Imagine un appel de méthode attendant un paramètre Sender, voudrais-tu t'amuser à calculer toi-même l'adresse de l'objet courant ?

    Si tel est le cas je te souhaite bon courage

  10. #30
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Oui oui oui oui-oui oui-oui...
    Tu sais quoi ? Sans vouloir t'offenser en aucune manière, ta réponse me fait l'effet de celles que tu te fais le matin devant la glace quand tu penses très fort à quelque chose, tu vois le truc ?
    Des bouts de ta courte réponse me font germer des points d'interrogation plein les yeux, genre un appel de méthode attendant un paramètre Sender : ça serait quoi comme méthode, et elle ferait quoi avec ce paramètre ?
    Ou l'objet courant ? Moi j'en vois deux, d'objets, l'un dont la méthode qui attend un paramètre est issue et l'autre, ce Sender qui doit bien être lié à quelque chose.

    Essaie d'être un peu plus pédagogue (pédagogique ?) steuplait et imagine que tu t'adresses à un gamin de 10 ans, un gamin de 10 ans qui calculait des déplacements d'offset directement en langage machine en entrant des adresses au clavier, oui, il y a 40 ans, et s'amusait à faire écrire l'alphabet à une LA36 pilotée par un PDP 1104 (pour les anciens qui ont connu ça).

    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #31
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Le matin devant ma glace je ne pense pas, je constate ! J'ai une toute autre position lorsque je pense

    TNotifyEvent ça te dit quelque chose ?

    ps: serions-nous contemporain ?

  12. #32
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    TNotifyEvent ça te dit quelque chose ?
    Je n'ai jamais joué avec.

    Citation Envoyé par Andnotor Voir le message
    ps: serions-nous contemporain ?
    Surement, oui,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #33
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bon, après un superbe concert des Rolling Stones enregistré en 2008, je crois que je tiens une petite maquette fort sympathique, en ce qui concerne les "hébergeurs" et pour la suite, je verrai plus tard.

    Pour l'instant, j'ai le plaisir de partager avec vous la numérotation numériquement triée dans le bon ordre, c'est bien agréable, et le redimensionnement automatique sur OnResize, ça aussi c'est bien sympa.

    3 images pour montrer l'avancement :
    F9 puis création de 3 panneaux, je n'ai pas mis l'appel au Resize, on voit donc le panneau pnlCentre avec sa couleur clSkyBlue et le panneau pnl4clients (dont un bout en clAqua en bas dépasse) qui vient squatter dessus, avec 3 panneaux pnl4hosting, chacun contenant une Form entière avec 3 panneaux et 7 sous-objets répartis dedans. Dans la vraie vie cette couleur clAqua sera assortie au reste et ne se verra pas, mais là, j'ai besoin de voir les mécanismes en action et tous les rendus :
    Nom : F9.png
Affichages : 174
Taille : 29,2 Ko

    Redim agrandi :
    Nom : redim_agrandi.png
Affichages : 175
Taille : 33,5 Ko

    Redim rétréci :
    Nom : redim_réduit.png
Affichages : 172
Taille : 27,7 Ko

    Le 4e nombre dans la barre de titre, c'est la hauteur en px des panneaux.

    Et pour mettre les panneaux dans le bon ordre, à la fin de la création du panneau pnlhost, j'ai rajouté (et désolé pour ceux qui n'aiment pas le with, mais d'un strict point de vue lisibilité [et donc compréhension du message écrit], y a pas photo avec la version lourde où il faut écrire 3 fois le même long nom de l'objet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       with pnl4hosting do
         if i = 0 then Top := 0 else Top := Height * i;
    Et on peut même faire encore plus court (c'est bien, j'économise des bits, je prends soin de la planète, , pas comme les autres débiles de l'autre côté, qui sont en train de tout casser) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with pnl4hosting do if i=0 then Top:=0 else Top:=Height*i;

    Merci à tous et bonne nuit, faites de beaux rêves (malgré les misères de ce triste monde...)
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #34
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Je n'ai jamais joué avec.
    Tu joues tout le temps avec puisque la plupart des événements sont de ce type.

    Citation Envoyé par Jipété Voir le message
    Et on peut même faire encore plus court
    Y'a plus court.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with pnl4hosting do Top := IfThen(i>0, Height*i);

  15. #35
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,

    Citation Envoyé par Andnotor Voir le message
    Tu joues tout le temps avec puisque la plupart des événements sont de ce type.
    Oui mais c'est tellement transparent que cette notion m'effleure à peine.

    Citation Envoyé par Andnotor Voir le message
    Y'a plus court.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with pnl4hosting do Top := IfThen(i>0, Height*i);
    Oui, mais ce n'est pas directement compréhensible, on se croirait dans les concours de tout_sur_une_ligne_la_plus_courte_possible alors bon, je crois qu'on pourra vivre sans, d'autant plus que je ne vois pas où tu mets Top à 0 pour le premier panneau. On peut supposer que c'est fait à sa création, mais méfiance avec les suppositions. pour ce que j'ai barré, il faut rallonger ta ligne, d'après l'aide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with pnl4hosting do Top := IfThen(i>0, Height*i, 0);
    Sinon, la nuit portant conseil, j'ai essayé de bricoler ce matin à la fraiche le bout qui me manquait pour que la maquette soit comme il faut, savoir, la destruction d'un panneau bien précis, et c'est une brave galère car il va falloir renommer tous les panneaux suivant celui qui est supprimé pour qu'il n'y ait pas de trou dans la chaine des noms sinon AV, un peu une horreur.

    J'envisage une liste d'objets dans laquelle je mettrais mes panneaux sans nom, et il suffirait de bosser avec les index de la liste ?
    Cette liste serait fonctionnellement située entre le pnl4clients et les panneaux créés par CreationPanneaux(PnlCtrl: TWinControl; i: integer);, qui deviendrait CreationPanneaux(cellule_de_la_liste[i]);.


    Une idée, une piste, un exemple ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #36
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Salut

    L'idée serait de combler les vides à la destruction du panel :
    [1][2][3][4][5]
    on efface le 3
    [1][2][][4][5]
    donc on déplace les panels dans le tableau
    [1][2][4][5][]
    on supprime le dernier
    [1][2][4][5]
    on renome les éléments qui suivaient l'indice
    [1][2][3][5]
    [1][2][3][4]
    La création se fait toujours a la fin.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  17. #37
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par anapurna Voir le message
    l'idée serait de combler les vides à la destruction du panel
    Oui tout à fait, je suis dessus depuis la fin de la matinée et je me retrouve à nouveau avec ces histoires de tailles de panneaux non respectées...
    Au départ (à la création de tout le bazar), j'ai loggé j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    17:44:19  newForm.Height  : 90
    17:44:19  pnl4host.Height : 90
    newForm parce que je suis reparti sur des forms qui seront contenue dans la partie Objects d'une stringlist, ça devrait fonctionner.
    (ce tuto m'a paru sympa, merci de me confirmer que j'ai fait le bon choix.)
    Et cette newForm contient le pnl4host alClient.

    Seulement, une fois les choses créées, on voit bien dans la barre de titre que l'avant-dernier champ indique 153; la hauteur que je devrais voir et pourquoi les panneaux ne sont-ils pas redimensionnés à cette valeur ? Regardez le SetBounds en bas dans la copie d'écran, ça y est et c'est pas fait, ,

    Nom : copidécran.png
Affichages : 154
Taille : 45,6 Ko


    Citation Envoyé par anapurna Voir le message
    la création se fait toujours à la fin
    À la fin de quoi ?
    Pas sûr de t'avoir compris, là, et, regarde, Dieu a d'abord créé le contexte et au bout de 6 jours, à la fin, quoi, il a créé l'homme (pas la meilleure chose qu'il ait créée, àmha, quand on voit où on en est maintenant, mais ceci est un autre débat, )
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  18. #38
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Ça va, j'ai trouvé :

    Nom : trouvé.png
Affichages : 149
Taille : 23,6 Ko

    Y avait un sac de nœuds entre les alTop et les alClients, mais avec un papier et un crayon on y arrive,

    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #39
    Membre confirmé

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 170
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Au lieu de vous enquiquiner à empiler des panels les uns derrière les autres, pourquoi n’utilisez-vous pas plutôt une listbox, ou une stringgrid ?
    Comme je suppose que vous n'envisagez pas de jouer plusieurs morceaux en même temps (encore que, après tout on est en réseau...), il n'est pas forcément obligatoire que certaines commandes figurent sur chaque élément, comme je suppose qu'on affiche une description détaillée du morceau sélectionné (ou en cours de lecture) ) à droite, on peut très bien les placer là. Et on a toujours le menu contextuel de chaque cellule de la liste/grille pour ça.

    Dispo pour plus d'explications et d'exemples.

    Autre chose, pour le positionnement correct dans un contenant, j'utilise plutôt les ClientWidth et ClientHeight du contenant.

    Cordialement,

    bb84000

  20. #40
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 729
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 729
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonjour,

    Citation Envoyé par bb84000 Voir le message
    Au lieu de vous enquiquiner à empiler des panels les uns derrière les autres, pourquoi n’utilisez-vous pas plutôt une listbox, ou une stringgrid ?
    Je note l'idée.
    Je pensais creuser la piste stringlist pour stocker mes forms secondaires (une par morceau), je dois pouvoir faire d'une pierre deux coups avec une listbox. Ça ne sera pas prêt ce soir (pas grave).

    Citation Envoyé par bb84000 Voir le message
    Comme je suppose que vous n'envisagez pas de jouer plusieurs morceaux en même temps (encore que, après tout on est en réseau...), il n'est pas forcément obligatoire que certaines commandes figurent sur chaque élément, comme je suppose qu'on affiche une description détaillée du morceau sélectionné (ou en cours de lecture) à droite, on peut très bien les placer là.
    Non, c'est une appli mono-utilisateur, et pour le panneau à droite (clMoneyGreen), c'est bien comme ça que c'est prévu. Des vieilles maquettes m'ont montré que c'était fonctionnel (mais inmaintenable, )

    Citation Envoyé par bb84000 Voir le message
    Autre chose, pour le positionnement correct dans un contenant, j'utilise plutôt les ClientWidth et ClientHeight du contenant.
    Pourquoi pas, mais à chaque fois que j'ai voulu utiliser ces propriétés, je n'ai pas constaté de différence par rapport aux "sans Client devant".

    Merci pour les idées.

    Mais pendant que je te tiens, et que tu te proposes pour aider un peu, qu'est-ce que tu penses de ça, dont j'ai déjà parlé là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        btnMakeBmp:= TButton.Create(pnlinfos); // 10
        with btnMakeBmp do begin
          Name := 'btnmakebmp';
          Caption := 'make bmp';
          ParentFont := False;
          Font.Name := 'Sans';
          Font.Size := 7;
          Visible := True;
          Parent:= pnlinfos;
          SetBounds(Parent.ClientWidth div 2, Parent.ClientHeight div 2, 60, 17);
        end;
    Et le bouton est positionné en hauteur à un endroit faux à mes yeux.
    Comme je l'ai écrit dans l'autre sujet, il FAUT alors mettre la valeur de (Client)Height en dur, ou utiliser une autre procédure : j'envisage un timer mais lui n'est pas capable d'identifier toutes les forms, incroyable mais vrai.

    Bon, j'y retourne,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

Discussions similaires

  1. besoin d'explication sur le c++
    Par poporiding dans le forum MFC
    Réponses: 13
    Dernier message: 17/12/2005, 18h01
  2. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51
  3. [C#] J'aurais besoin d'explication
    Par Roach- dans le forum Windows Forms
    Réponses: 18
    Dernier message: 10/03/2005, 16h00
  4. Besoin d'explications sur float et l'élasticité !
    Par KneXtasY dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/01/2005, 15h15
  5. [Foreign Key] Besoin d'explication.
    Par Andry dans le forum Débuter
    Réponses: 4
    Dernier message: 28/05/2003, 11h34

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