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 :

Create(), comportement différent


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut Create(), comportement différent
    Bonsoir à tous,

    Au lieu de me lancer dans de grandes explications, voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaCombo := TComboBox.Create(self);
           MaCombo.Parent := Self;
           MaCombo.Items.Add('lundi');
    Là tout fonctionne...
    Mais si je remlplace Self (donc la forme) par un autre élément (un stringGrid par exemple), la combo est affichée, mais la liste des éléments est vide.

    Vous me direz que je n'est qu'à utiliser Create(self), mais je suis curieux et j'aimerais comprendre...Quelqu'un aurait-il la réponse?

    Merci d'avance,
    @+.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 190
    Par défaut
    Bonjour.

    Ce topic me rappèle un autre que j'ai lu tout à l'heure :

    http://www.developpez.net/forums/sho...d.php?t=222363

    Ca t'aidera peut-être...


  3. #3
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 13
    Par défaut
    Salut,

    Mais si je remlplace Self (donc la forme) par un autre élément (un stringGrid par exemple), la combo est affichée, mais la liste des éléments est vide.
    Tu n'as vraiment pas de chance, le StringGrid doit être, à mon avis, un des seuls composant (avec ses héritiers) où ce cas ce produit !

    Après quelques tests, si tu met en parent : un panel, une listbox, ou encore une scrollbox, ça fonctionne !!

    Donc je ne pense pas que la liste des éléments est vide... mais plutôt que le StringGrid redessine par dessus (pour une raison que je ne pourrais pas t'expliquer )

    Mais si tu souhaites quand même afficher une ComboBox dans un StringGrid, je te conseil de poser une ComboBox (avec visible à false) sur ta Forme, et de l'afficher sur la cellule sélectionnée aux dimensions de la cellule.
    Un peu dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
    var
       aRect : TRect;
    begin
         aRect := StringGrid1.CellRect( ACol, ARow );
     
         StringGrid1.DefaultRowHeight := ComboBox1.Height; // inutile si la combo est redessiné dynamiquement
     
         ComboBox1.SetBounds( aRect.Left + StringGrid1.Left+1, aRect.Top + StringGrid1.Top+2, aRect.Right - aRect.Left+1, aRect.Bottom - aRect.Top+1 );
         ComboBox1.Visible := True;
    end;
    mais je suis curieux et j'aimerais comprendre...
    Tu as raison... l'avancé technologique ne serait pas où elle en est si l'Homme n'était pas de nature curieux !

    @+

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    Par défaut
    salut

    pour resoudre ton probleme il faut derive la class TstringGrid et implemente la logique des inplaceeditor

    @+ Phil

  5. #5
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Merci à vous tous,

    Concernant ta solution jula2i, elle est très intéressante, mais mon problème est bocoup plus complexe, puisque je ne connais le nombre de Combobox et leurs items qu'à l'ouverture de la fenêtre et que je peux en ajouter ou en supprimer en cours de route. Elle doivent être triable en même temps qu'une colonne de mon stringgrid...Et enfin, bien sûr, leurs items indexs sont tous différents.
    J'avais trouvé un topic pour utiliser la méthode Draw pour redessiner une seule combobox avec sa liste d'item déroulé uniquement sur la case sélectionnée, mais ça n'a pas plu à mon chef.

    Citation Envoyé par anapurna
    pour resoudre ton probleme il faut derive la class TstringGrid et implemente la logique des inplaceeditor
    Merci, je vais me pencher la dessus...Et voir si j'arrive à quelque chose.

    @+.

  6. #6
    Membre émérite Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 16
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Par défaut
    Question 1:
    - Tes ComboBox servent à editer des colonnes d'une stringGrid ?

    - Un combobox n'est pas un objet Delphi à proprement parlé mais une encapsulation d'un contrôle windows. Or un ctrl windows est fait pour s'afficher et windows afin d'économiser de la mémoire (entre autre) se sert du composant fenêtré parent (qui lui même se sert...) ayant un canvas de référencé pour dessiner le composant. Certes on peut considérer qu'il y a un ch'tit bogue puisque tant que le ctrl n'est pas visible le canvas ne devrait pas entrer en ligne de compte.

    - Si la réponse à la question 1 est OUI, je te suggère d'utiliser le InplaceEditor. Où tout simplement PickList.

    a+

Discussions similaires

  1. [CKEditor] Comportement différent en ligne
    Par guy2004 dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 14/12/2005, 16h11
  2. Comportement différent entre un bouton et une image
    Par MicheMTP13 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2005, 08h47
  3. Comportement différent des listes [] et des tuples () ??
    Par JujuKéblo dans le forum Général Python
    Réponses: 2
    Dernier message: 12/10/2005, 09h08
  4. [C#] bouton avec 2 comportements différents ?
    Par st0j dans le forum ASP.NET
    Réponses: 8
    Dernier message: 31/05/2005, 09h50
  5. Réponses: 3
    Dernier message: 16/03/2005, 11h31

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