begin process at 2012 02 14 10:49:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

J'AI BESOIN D'AIDE !!!! :)

 > 

Longuer de lignes


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Longuer de lignes

dimanche 19 juin 2005 à 02:15:09 | Longuer de lignes

3edbill69

Bonjour,

J'essaie de faire un prog qui me permettrait de formatter un texte en lui donnant une longueur de ligne limite.

J'ai fait quelques recherches pour trouver les différents paramètres nécessaires pour connaître la longueur des lignes et leur manipulation mais je n'arrive pas a poursuivre mon projet car a un moment donné sa crash sans prevenir : quand je passe a ligne suivante.

Pour la premiere ligne je peux arriver a couper la ligne pour qu'elle soit d'une longueur de 84 caractères ou plus mais le moment venu de compter la longueur de la deuxième ligne vb gèle et me previens que je vais perdre toutes mes données et je dois le fermer sans sauvegarde.

Voici le code pour une ligne (qui marche):

Private Const EM_LINEINDEX = &HBB
Private Const EM_GETLINE = &HC4
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Sub cmd1_Click()
Dim lngNbLignes As Long, i As Long, k As Long
Dim lngIndexCar As Long, intLongueur As Integer
Dim strLigne As String

'nombre de lignes
lngNbLignes = SendMessageLong(rtbun.hwnd, EM_GETLINECOUNT, 0, 0)
k = 1
lngIndexCar = SendMessageLong(rtbun.hwnd, k - 1, 0, 0)
intLongueur = SendMessageLong(rtbun.hwnd, EM_LINELENGTH, lngIndexCar, 0)
If intLongueur > 84 Then
    For i = intLongueur To 0 Step -1
        If Mid(rtbun.Text, i, 1) = Chr(32) Then
            rtbun.SelStart = i
            rtbun.SelText = vbCrLf
            rtbun.SelStart = SendMessageLong(rtbun.hwnd, EM_LINEINDEX, k + 1, 0)
            rtbun.SetFocus
            SendKeys Chr(3)
            SendKeys Chr(8)
            SendKeys Chr(32)
            Exit For
        End If
    Next i
End If
End Sub

Maintenant ce que je pensais faire pour un nombre variable de lignes (qui crash):

For k = 1 To lngNbLignes - 1
lngIndexCar = SendMessageLong(rtbun.hwnd, k - 1, 0, 0)
intLongueur = SendMessageLong(rtbun.hwnd, EM_LINELENGTH, lngIndexCar, 0)
If intLongueur > 84 Then
    For i = intLongueur To 0 Step -1
        If Mid(rtbun.Text, i, 1) = Chr(32) Then
            rtbun.SelStart = i
            rtbun.SelText = vbCrLf
            rtbun.SelStart = SendMessageLong(rtbun.hwnd, EM_LINEINDEX, k + 1, 0)
            rtbun.SetFocus
            SendKeys Chr(3)
            SendKeys Chr(8)
            SendKeys Chr(32)
            Exit For
        End If
    Next i
End If
Next k

Si vous connaissez la réponse merci de bien vouloir me la communiquez.

One step away from ...
dimanche 19 juin 2005 à 03:07:03 | Re : Longuer de lignes

dragon

Si j,ai bien compris, c'est ça que tu veux. Désoler je l'ai coder ici, donc s,il y a un petit bug, genre une paranthèse qui manque, c'est normal

public function couper(texte as string, longueur as integer) as string()
   redim couper(int(len(texte)/longueur) + iif(len(texte) mod longueur = 0,0,1)))
   for i as integer = 0 to ubound(couper) - 1
      couper(i) = mid(i * longueur,longueur)
   next i
   couper(ubound(couper)) = mid(ubound(couper) * longueur))
end function

-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------

dimanche 19 juin 2005 à 08:25:25 | Re : Longuer de lignes

3edbill69

ok, j'ai pas encore testé ça parce que je veux prendre le temps de tout piger:
ce que tu me propose, c'est de mettre chaque ligne coupée dans un tableau de chaîne de caractères n'est-ce pas?

Si oui, alors non, ce n'est pas ce que je veux car un texte peut commencer par un simple titre de moins de x caractères voulus, ce qui veux dire que je dois absolument conserver le texte dans le rtbox ou txtbox, que je ne peux pas tout simplement calculer x caractères.

A quoi sert ubound içi (je ne connais pas cette fonction)?

ps:en fait mon problem c'est que vb semble être incapable de calculer la longueur des lignes 2,3.... lorsque j'ai déjà modifié la première.


One step away from ...
dimanche 19 juin 2005 à 16:45:54 | Re : Longuer de lignes

dragon

ubound sert a savoir la grandeur du tableau

bon 2e essai

public function compteurLigne(texte) as integer
   return ubound(split(texte,vbcr)) + 1
end function

-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------

lundi 20 juin 2005 à 05:19:24 | Re : Longuer de lignes

3edbill69

Ok, en supposant qu'il faille utiliser ABOSULEMENT UN TABLEAU, peut juste me dire ce que je devrais faire avec return ubound(split(texte,vbcr)) +1 ?
Surement que tu en connais beaucoup plus sur le rayon car moi la je ne vois pas ou tu veux en venir.

Desolez de te faire perdre tant de temps.
Si tu pouvais jeter un coup d'oeil au projet
Entre le texte :

Hhghfodhgidlfhiiofd;hogu9pdfihub90gfyjhiftughjikfjiouhikflu9gjyhpogubdkhigyidogk djpg
Hhghfodhgidlfhiiofd;hogu9pdfihub90gfyjhiftughjikfjiouhikflu9gjyhpogubdkhigyidogkdjpg

et clique sur le bouton: tu verras le resultat recherché.
Un ben je voudrais juste savoir si il y a un moyen de repeter cette procédure sans provoquer un arrêt du programme.

Merci d'avoir pris le temps de lire ce message.
One step away from ...
lundi 20 juin 2005 à 06:10:54 | Re : Longuer de lignes

dragon

le split permet de convertir un chaine de caractère en tableau dépendant un certain caractères. ce cas ci, le vbcr ou vbcrlf qui est le saut de ligne

une fois le tableau tu regarde le nombre de ligne et tu ajoute 1, puisqu'un tableau débute à 0 et tu veux avoir ligne 1

puis tu retourne le résultat

-------------------------------------------------
Dragon alias aussi Waxime mais bon, pas le gout de refaire un nouveau profil lol
-------------------------------------------------

lundi 20 juin 2005 à 18:11:49 | Re : Longuer de lignes

Gobillot

c'est ce message qui fait planter:
lngIndexCar = SendMessageLong(rtbun.hwnd, k - 1, 0, 0)
lngIndexCar = SendMessageLong(Rtbun.hwnd, EM_LINEINDEX, k, 0)

d'autre part comme le nombre de lignes change, il faut commencer par la fin:
For k = lngNbLignes - 1 To 0 Step -1

et le nombre à parcourir sur une ligne n'est pas bon:
For i = (lngIndexCar + intLongueur) To (lngIndexCar + 1) Step -1

Daniel
lundi 20 juin 2005 à 21:44:07 | Re : Longuer de lignes

3edbill69

Merci j'étais sur que ce ne devais qu'une bourde conne de ma part.
Après quelque modif ça a marché.

Merci de votre aide.

One step away from ...


Cette discussion est classée dans : long, hwnd, chr, rtbun, sendmessagelong


Répondre à ce message

Sujets en rapport avec ce message

setParent et le focus [ par Manifeste ] Salut!Le code suivant me permet de "loader" un formulaire "enfant" dans le controle pictureBox d'un formulaire "parent". Jusqu'ici tout marche bien, l Utiliser SetProp [ par Troopers ] Salut!j'aimerais savoir comment utiliser l'api SetPropPublic Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpStrin api pour showintaskbar [ par Stephane ] salut a tousj'ai un probleme, il me faudrai savoir comment enlever un rectangle(dont je connai le hwnd) dans la barre des taches a partir d'un hwnd, e Fonction de sauvegarde inconnu !!! [ par zebest3000 ] Je souhaite enregistrer une image en JPG, mais la fonction devient vite bizarre !Quand je tappe ceci, cela enregistre en JPG une capture d'une de mes Problème avec Hwnd !! [ par jul ] Bonjour,J'ai le bout de code suivant dans une forme:Private Declare Function SetWindowPos Lib "User32" (ByVal Hwnd As Long, _ByVal hWndInsertAfter _As quelqun peut maider pour faire marcher ce code [ par wcwmans ] ccest un code pour empecher que les fenetre contennat dans leur titre le mots sex ne souvre pas. Il est composé d'un timer d'une form et d'un module.m Problème de fermeture application [ par peucher ] J'ai réalisé ce code qui fonctionne parfaitement en VB, comment l'incorporer dans une page asp ou aspx pour qu'il fonctionne de la même manière.Merci GetMessage [ par nlqe ] Bonjour à tous,Je souhaite dialoguer entre deux applications VB. D'un côté, j'envoie des messages avec la fonction SendMessageTimeout mais de l'autre EnumWindow... [ par Franck67 ] Bonjour,J'aimerai pouvoir récupérer uniquement le Handle des fenêtres affichées sur le bureau de Windows pour pouvoir faire un traitement dessus !!!J' je ne comprends po grnad chose... [ par ndsaerith ] Coucou tout le monde, voila, je suis en train d'étudier une appli objet. Mais il reste des points, qui sont importants mais que je ne comprend pas du


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales