Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment espacer 2 mots dans un ListBox

8 réponses
Avatar
dav
a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav

8 réponses

Avatar
Alfred Wallace
Bonjour,

Il y a un exemple tout fait dans les HOWTO de la doc VB 6 MS.

On positionne les tabulations dans la liste et on sépare les champs par des
TAB (additem champ1 & chr(9) & champ2 .....)

Exemple d'utilisation de l'API Windows.
Luc

"dav" a écrit dans le message de
news:415e53ae$0$25441$
a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav


Avatar
LE TROLL
Bonjour,

Il faut aussi une police proportionnelle, surtout s'il y a des chiffres
"couRier new" par exemple
------------

"dav" a écrit dans le message de
news:415e53ae$0$25441$
a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav


Avatar
dav
LE TROLL a écrit :

Bonjour,

Il faut aussi une police proportionnelle, surtout s'il y a des chiffres
"couRier new" par exemple
------------

"dav" a écrit dans le message de
news:415e53ae$0$25441$

a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav








désolé mais je trouve pas d'exemple dans la doc vb...
j'ai fait une recherche dans l'index..pas trouvé.
je dois utiliser la propriété columns ????
et ton chr(9), il correspond a quoi ? à un espace ?
merci,
dav
Avatar
dav
dav a écrit :

LE TROLL a écrit :

Bonjour,

Il faut aussi une police proportionnelle, surtout s'il y a des
chiffres
"couRier new" par exemple
------------

"dav" a écrit dans le message de
news:415e53ae$0$25441$

a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav









désolé mais je trouve pas d'exemple dans la doc vb...
j'ai fait une recherche dans l'index..pas trouvé.
je dois utiliser la propriété columns ????
et ton chr(9), il correspond a quoi ? à un espace ?
merci,
dav




j'ai essayé ceci mais ça marche pas :

List1.AddItem matable!fr & Chr(9) & ":" & matable!motar

dav
Avatar
LE TROLL
Bonjour,

J'utilise une méthode plus manuelle, lol, tu as 2 champs, alors c'est
le second qu'il faut aligner, tu peux faire ainsi:

Dim TAILLE As Byte
'
champ_n°2 = Trim(champ_n°2)
TAILLE = 30 - Len(champ_n°2)
List1.AddIem champ_n°1 & Space(TAILLE) & " : " & champ_n°2
'---------------

Sinon, la tabulation, oui, on utilise "Chr(9)"
0 = nulle
7 = bip
8 = retour arrière
9 = tab horizontal
10 = saut de ligne
11 = tab vertical
12 = saut de page
13 = début de ligne
27 = échappement
32 = espace
48-57 = 0-9...
65-90 = A-Z
97-122 = a-z (A+32-Z+32)
...


"dav" a écrit dans le message de
news:415e53ae$0$25441$
a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav


Avatar
Zoury
et voici un lien démontrant la technique en question...
http://vbnet.mvps.org/code/subclass/combotabbedlist.htm


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/

"Alfred Wallace" <nobody> a écrit dans le message de news:
%
Bonjour,

Il y a un exemple tout fait dans les HOWTO de la doc VB 6 MS.

On positionne les tabulations dans la liste et on sépare les champs par
des
TAB (additem champ1 & chr(9) & champ2 .....)

Exemple d'utilisation de l'API Windows.
Luc

"dav" a écrit dans le message de
news:415e53ae$0$25441$
a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
un litsBox comme ceci :

Do While Not matable.EOF
List1.AddItem matable!mot1 & " : " & matable!mot2
matable.MoveNext
Loop

je voudrais que ces 2 mots soient espacés de façon à être alignés dans
le listBox. j'envisageai d'insérer ceci :

dim espace as string
espace = space(30)
List1.AddItem matable!mot1 & " : " & espace & matable!mot2

mais c'est moche....
comment faire ?
merci,
dav






Avatar
Alfred Wallace
Chr(9) = TAB

Voici un exemple qui fonctionne à 99%. C'est un + compliqué que VB seul,
mais la proc existe et peut etre utilisée telle quelle sans trop la
comprendre. En fait il s'agit de définir la position des tabulations dans la
listbox et ensuite d'envoyer les données en les séparant par un TAB(chr(9).
La proc LboxColonnes calcule les dimensions moyennes des caractères et à
partir de là obtient leur positionnement.

Bon fun
Luc

******************************************* Exemple projet1
Option Explicit

'Déclarations de Form1
'================ Pour ListBox alignées s/ tabulations === Private Const LB_SETTABSTOPS = &H192
Private Const HORZRES = 8
Private Const VERTRES = 10

Private Type TagSize
cx As Long
cy As Long
End Type

Private Declare Function GetTextExtentPoint Lib "gdi32" Alias
"GetTextExtentPointA" (ByVal hdc As Long, ByVal lpszString As String, ByVal
cbString As Long, lpSize As TagSize) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal
nIndex As Long) As Long
Private Declare Function GetDC Lib "USER32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "USER32" (ByVal hwnd As Long, ByVal
hdc As Long) As Long
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Private Sub Form_Load()

Dim ListHandle As Long
Dim TabPos(4) As Long

List1.Clear

' Position des tabulations de la Listbox
TabPos(0) = 3
TabPos(1) = 4
TabPos(2) = 5
TabPos(3) = 6
ListHandle = List1.hwnd

Call LBoxColonnes(Form1, ListHandle, 4, TabPos())

End Sub

Private Sub LBoxColonnes(fForm As Form, iListHandle As Long,
iNumberOfColumns As Integer, iListTabs() As Long)

'* 'fForm'-the form on which the listbox resides *
'* 'iListHandle'-listbox hWnd (I use GetFocus()) *
'* 'iNumberOfColumns'-# of tabs wanted in the listbox*
'* 'iListTabs()'-the array of tab positions you want *

Dim iListDlgWidth As Integer, lTextWidth As Long

PIXELS = 3
Twips = 1


'Get the Pixel width
Dim iPixelWidth As Integer
fForm.ScaleMode = PIXELS 'Set to Pixels(3)
iPixelWidth = fForm.ScaleWidth 'Get Scalewidth in pixels
fForm.ScaleMode = Twips 'Set back to Twips(1)

'Set the Twip to Pixel Ratio
Dim sinTwipPixelRatio As Single
sinTwipPixelRatio = 1 / (fForm.ScaleWidth / iPixelWidth)

'Get the screen device context
Dim iWindowContext As Long
iWindowContext = GetDC(fForm.hwnd)

'Use the device context to get the horizontal resolution
Dim iHorzResPixels As Integer
iHorzResPixels = GetDeviceCaps(iWindowContext, HORZRES)

'Calculate the screen resolution ratio
Dim sinScreenRatio As Single
sinScreenRatio = (640 / iHorzResPixels)

'Set up and calc the 'textwidth' average
Dim sTemp As String, iTemp As Integer
Dim TgSize As TagSize
sTemp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
iTemp = 62

'GetTextExtent() returns a long, the lower 16 bits have
'the font textwidth in twips
lTextWidth = GetTextExtentPoint(iWindowContext, sTemp, iTemp, TgSize)
iListDlgWidth = (lTextWidth Mod 65536) / 2 'bottom 16 in Twips
iListDlgWidth = iListDlgWidth * sinTwipPixelRatio 'apply ratio
iListDlgWidth = CInt(iListDlgWidth * sinScreenRatio) / 15 'Res 640 x480
iListDlgWidth = 15

'Apply factor to each tab position
Dim i As Integer
For i = 0 To iNumberOfColumns - 1
iListTabs(i) = iListTabs(i) * iListDlgWidth 'This is the magic Number
Next i

Call SendMessage(iListHandle, LB_SETTABSTOPS, iNumberOfColumns,
iListTabs(0))

iWindowContext = ReleaseDC(fForm.hwnd, iWindowContext) 'Clean up resource

End Sub

****************************************************************************
******

"dav" a écrit dans le message de
news:415e5dfe$0$25441$
LE TROLL a écrit :

> Bonjour,
>
> Il faut aussi une police proportionnelle, surtout s'il y a des


chiffres
> "couRier new" par exemple
> ------------
>
> "dav" a écrit dans le message de
> news:415e53ae$0$25441$
>
>>a partir d'un critere je concatene 2 mots ( 2 champs) que j'affiche dans
>>un litsBox comme ceci :
>>
>>Do While Not matable.EOF
>>List1.AddItem matable!mot1 & " : " & matable!mot2
>>matable.MoveNext
>>Loop
>>
>>je voudrais que ces 2 mots soient espacés de façon à être alignés dans
>>le listBox. j'envisageai d'insérer ceci :
>>
>>dim espace as string
>>espace = space(30)
>>List1.AddItem matable!mot1 & " : " & espace & matable!mot2
>>
>>mais c'est moche....
>>comment faire ?
>>merci,
>>dav
>
>
>

désolé mais je trouve pas d'exemple dans la doc vb...
j'ai fait une recherche dans l'index..pas trouvé.
je dois utiliser la propriété columns ????
et ton chr(9), il correspond a quoi ? à un espace ?
merci,
dav



Avatar
Barsalou
Bonjour

Avec une police proportionnelle (Times, Arial etc.) il doit être possible de
calculer le nombre d'espaces à insérer en utilisant TextWidth, comme si on
souhaitait imprimer le texte, où encore mieux, savoir où placer exactement
un taquet de tabulation (mais je ne sais pas comment poser ce dernier; voir
la réponse de Zoury que je n'ai pas eu le temps d'étudier).