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 VCL Delphi Discussion :

Forcer l'affichage de la ScrollBar Verticale d'un TListView + Drag & Drop


Sujet :

Composants VCL Delphi

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut Forcer l'affichage de la ScrollBar Verticale d'un TListView + Drag & Drop
    Bonsoir,

    Je n'arrive pas à trouver l'information que je veux sur le forum, ni ailleurs. J'ai peut-être mal cherché

    Ce que je voudrais faire, c'est forcer l'affichage de la ScrollBar Vertical du TListView afin que je puisse calculer correctement mes marges (c'est pour le design).
    Je sais (si je ne me trompe pas) qu'il faut passer par un SendMessage mais comme je ne suis pas à l'aise avec ça, je ne sais pas par où ni comment chercher.

    Si vous avez une solution, j'ai les yeux grands ouverts
    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Ben, comme c'est un composant Window, si ce n'est pas fourni en Delphi, il faut passer par une API Windows

    Sinon, regarde si ListView.ClientWidth te donne une informations cohérentes, ou alors passe par GetSystemMetrics(SM_CXVSCROLL)
    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

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut Shai

    Citation Envoyé par ShaiLeTroll Voir le message
    Ben, comme c'est un composant Window, si ce n'est pas fourni en Delphi, il faut passer par une API Windows

    Sinon, regarde si ListView.ClientWidth te donne une informations cohérentes, ou alors passe par GetSystemMetrics(SM_CXVSCROLL)
    Heu, ce que tu me donnes, c'est pour récupérer la taille de la ScrollBar(GetSystemMetrics(SM_CXVSCROLL)) Non ?
    Quant au ListView.ClientWidth, c'est pour modifier sa taille

    En fait, je vais expliquer un peu mieux mon soucis. J'ai un ListView qui accepte le Drag & Drop de l'explorateur Windows.
    Je récupère mes fichiers et comme il y en a beaucoup, il me crée une ScrollBar Verticale pour que je puisse naviguer. Comme la ScrollBar vertical n'est pas visible dès le début, le ListView me crée également une ScrollBar horizontale...
    Je sais pas si tu saisis un peu mieux la chose ... C'est pour ça que je veux "Forcer l'affichage de la ScrollBar Verticale du ListView".

    Tiens d'ailleurs, tant que j'y suis, je n'arrive pas à faire pour que lorsque je fais un Drag & Drop, c'est mon ListView qui ne peut que recevoir les fichiers, et non la forme ... (Peut-être que ce n'est pas possible).

    Voici le code :
    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
    //Gère les messages Windows de Drag and Drop ...
    procedure TForm1.DroppedFiles(var msg: TWMDropFiles);
    var
      i: integer;
      nombreDeFichiers: integer;
      nomDuFichier: string;
      tailleDuBuffer: integer;
      ListItem:TListItem;
    begin
      { Ce gestionnaire de message est appelé lorsque l'utilisateur lâche un ou
        plusieurs fichiers sur la fenêtre. Nous devons commencer par récupérer
        le nombre de fichiers lâchés avant de les énumérer pour avoir leur nom.}
     
      // Récupération du nombre de fichiers déposés sur la fenêtre
      nombreDeFichiers:= DragQueryFile(msg.Drop, $FFFFFFFF, nil, 0);
     
      // Affichage des noms des fichiers dans un ListView
      tailleDuBuffer:= MAX_PATH;
      SetLength(nomDuFichier, tailleDuBuffer);
      for i:= 0 to nombreDeFichiers - 1 do
      begin
        DragQueryFile(msg.Drop, i, PChar(nomDuFichier), tailleDuBuffer);
        ListItem:=ListView1.Items.Add;
        ListItem.Caption:=ExtractFileName(nomDuFichier);
      end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      DragAcceptFiles(self.Handle, True);
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      DragAcceptFiles(self.Handle, false);
    end;
    Merci

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    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 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Oh Drag & Drop venant de l'extérieur, je ne l'ai fait qu'avec une forme, une sorte de barre d'outil j'ai totalement oublié ... je n'ai même plus le code ...

    En général, je laisse les barres libres, je prévois dans l'IDE la taille de la Barre, dans le 25 pixels au pire ...

    Sinon, je fais une fonction qui recalcule la taille des colonnes en RunTime, et l'une d'entre-elle est sacrifié (souvent un libellé ou la dernière), et je la réduit pour que cela tienne sans barre horizontale, pour cela j'utilise la ClientWidth qui me donne la taille interne du composant donc SANS la Barre ... tu appeles cette fonction par exemple après une insertion ... ainsi cela ajuste automatiquement la taille des colonnes en RunTime ... maintenant, si il n'y aucune colonne a sacrifier, ben, tu choisis au pif l'une d'entre elle qui sera plus grande que nécessaire, et c'est celle-ci que tu réduiras à l'insertion
    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

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Ah, j'avais pas du tout saisi ce raisonnement
    En fait, j'ai résolu mon soucis.
    Comme je n'ai qu'une colonne, dis redimensionne la colonne à la taille du ListView (ClientWidth). Merci de m'avoir sur la piste Shai

    Pour le drag & drop, je pensais pas que ça serait difficile de trouver l'info
    En fait, c'est dans le cas de plusieurs Drag & Drop ... Il me faudrait savoir qui prend les fichiers donc je suis obligé de faire en sorte que ça soit le composant qui accepte le truc et non la Form en entier

    EDIT:

    Pour le Drag & Drop, j'ai trouvé, il faut modifier qui accepte le Drag & Drop.
    Ce n'est donc plus la Self (la Form) mais mon ListView, puis, il faut faire une procédure qui va traiter les messages de Drag & Drop ... qu'on affectera au OnMessage de l'Application ...

    C'est top

  6. #6
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Pour un TListView je n'ai pas d'idée , mais pour un TDBGrid j'ai trouvé cette réponse dans la FAQ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ShowScrollBar(DBGrid1.Handle, SB_BOTH, False);
    ShowScrollBar(DBGrid1.Handle, SB_HORZ, False);
    ShowScrollBar(DBGrid1.Handle, SB_VERT, False);

    Je n'ai pas Delphi sous la main, mais peut-être que ça pourra t'aider ... ?
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

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

Discussions similaires

  1. [CSS] forcer affichage scrollbar verticale (sans frames!!)
    Par cortex024 dans le forum Mise en page CSS
    Réponses: 38
    Dernier message: 29/06/2010, 21h26
  2. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  3. Réponses: 6
    Dernier message: 14/08/2006, 18h31
  4. [HTML]comment forcer l affichage d1 scrollbar?
    Par luta dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/11/2005, 13h32
  5. Forcer l'affichage des dizaines...
    Par pataluc dans le forum Langage
    Réponses: 4
    Dernier message: 26/11/2002, 19h38

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