Bonjour,
je souhaite utiliser un controle msflexgrid avec un mode multiligne.
Je souhaite que lorsque un retour à la ligne est activée dans une cellule, la hauteur de la cellule s'adapte.
Comment faire ?
Merci de votre aide
Version imprimable
Bonjour,
je souhaite utiliser un controle msflexgrid avec un mode multiligne.
Je souhaite que lorsque un retour à la ligne est activée dans une cellule, la hauteur de la cellule s'adapte.
Comment faire ?
Merci de votre aide
Salut
Je viens juste d'effectuer ce petit test.
En espérant que ça poura te servir.Code:
1
2
3
4
5
6
7
8
9
10 Option Explicit Dim HautLigne As Long Private Sub Command1_Click() MSFlexGrid1.RowHeight(1) = MSFlexGrid1.RowHeight(1) + HautLigne End Sub Private Sub Form_Load() HautLigne = MSFlexGrid1.RowHeight(1) End Sub
Bonjour,
je te remercie pour ce bout de code mais le probleme n'est pas ici.
La question est de savoir combien de retours à la ligne ont été fait (la propriété wordwrap sur true). En effet, je sais comment modifier la hauteur de ligne mais je ne sais pas de combien je dois la modifier.
Merci pour votre aide
Salut,
Juste une idéé (pas testé)
1 - Compte le nombre de caractère dans ta ligne
2 - S'il dépasse une valeur augmente la hauteur de ta ligne
et comme ton Wordwrap est à true
Starec
Je te remercie de cette réponse.
Néanmoins, je l'ai déjà essayé et les résultats ne sont pas concluant car chaque caractère à sa propre largeur qui dépend de la police utilisée.
Ainsi, il faudrait une méthode plus systématique
Merci de m'aider
J'ai dû faire ça au boulot, voici donc ce que j'ai fait :
alors,Code:
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
44
45
46
47
48 Private Function AjustRow(myGrid As MSHFlexGrid, _ Optional ByVal lFirstRow As Long = -1, _ Optional ByVal lLastRow As Long = -1, _ Optional bCheckFont As Boolean = False) Dim lCol As Long, lRow As Long, lCurCol As Long, lCurRow As Long Dim lCellHeight As Long, lRowHeight As Long Dim bFontBold As Boolean Dim dFontSize As Double Dim sFontName As String With myGrid If bCheckFont Then lCurCol = .Col lCurRow = .Row End If If lFirstRow = -1 Then lFirstRow = 1 If lLastRow = -1 Then lLastRow = .Rows - 1 For lRow = lFirstRow To lLastRow lRowHeight = 0 If bCheckFont Then .Row = lRow For lCol = 0 To .Cols - 1 If bCheckFont Then .Col = lCol UserControl.TxtTemp.FontBold = .CellFontBold UserControl.TxtTemp.FontName = .CellFontName UserControl.TxtTemp.FontSize = .CellFontSize End If UserControl.TxtTemp.Width = .ColWidth(lCol) UserControl.TxtTemp.Height = .RowHeight(lRow) UserControl.TxtTemp.Text = .TextMatrix(lRow, lCol) lCellHeight = (UserControl.TextHeight("Wg") * SendMessage(TxtTemp.hwnd, EM_GETLINECOUNT, 0, ByVal 0&)) If lCellHeight > lRowHeight Then lRowHeight = lCellHeight Next lCol .RowHeight(lRow) = lRowHeight + (UserControl.TextHeight("Wg") / 2) Next lRow If bCheckFont Then .Row = lCurRow .Col = lCurCol End If End With End Function
remplacer UserControl par le nom de la fenêtre (pour laquelle tu as configuré la même police que dans ton spread). Au fait j'utilise cette fonction dans un contrôle OCX programmé moi-même.
il te faut donc un FlexGrid et un contrôle Text > TxtTemp (tu mets la propriété visible à false)
+ des déclarations :
Code:
1
2
3
4
5
6 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 Const EM_GETLINECOUNT = &HBA
PS: l'idée de base a été trouvée sur un site (je ne sais plus ou exactement sinon j'aurai volontier donné l'adresse)
Normalement tout y est :wink:
En complément de la solution proposée, je signale juste que dans la FAQ, il y a un petit article intéressant pour tous ceux qui voudraient se casser la tête sur des problèmes d'ajustement de taille de contrôles en fonction du texte et de la police ;) :
http://vb.developpez.com/faq/?page=G...e#taille_texte
Bonjour et merci à tous pour vos réponses.
J'ai trouvé sur le forum de microsoft, une astuce interressante.
On utilise un label invisible avec les mêmes font que la grille et la meme largeur que la cellule.
Ce label a la propriété wordwrap et la prop autosize sur true.
Il suffit alors de copier dans ce label le texte de la cellule, puis de récupérer la hauteur du label pour l'appliquer à la cellule
Voila