Re: [prog] Methode au comportement bizarre

2006-04-29 Par sujet Laurent Godard

Bonjour Philippe


En apparence, car en testant avec len, j'obtiens un caractère de plus.
Je retente mon queryKey avec mon comboBox (parce que c'est le but) comme 
ceci :


sFormat = Left(oCombo.Text, len(oCombo.Text)-1)
puis oFormat().queryKey ( sFormat , oLocal, false )
et ce coup-ci ça marche.
Donc queryKey n'était pas en cause.
...les joies du débogages

Merci à François, de m'avoir aider à comprendre que la méthode n'était 
pas en cause.


belle pugnacité, bravo


Souhaitant que cela puisse être utile, pour ceux qui utilise des comboBox.



celà ressemble à un bug
pourrais tu m'envoyer un fichier d'exemple pour que je regarde ?
quel caratere est en trop ?

sub analyse
sFormat = oCombo.Text
chaine=
for i=1 to len(sFormat)
  car=mid(sFormat,i,1)
  chaine = chaine +  -  +asc(car)
next i
print chaine
end sub
quel est ce dernier caractere ? 32 ? 13 ? 10 ?

tiens nous au courant

Laurent


--
Laurent Godard [EMAIL PROTECTED] - Ingénierie OpenOffice.org
Indesko  http://www.indesko.com
Nuxeo CPS  http://www.nuxeo.com - http://www.cps-project.org
Livre Programmation OpenOffice.org, Eyrolles 2004

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



[prog] [Writer] Unicode pour fins de ligne et de paragraphe.

2006-04-29 Par sujet Adrien Delcour



Bonjour.

Trouvant un peu gênant qu'une marque de paragraphe 
compte pour un seul "caractère"
dans les déplacements de curseur et pour deux 
dans les chaînes couvertes par ces curseurs
(en tout cas, c'est ainsi sous Windows), 
j'aimerais disposer d'une fonction qui reçoive
un curseur en argument et renvoie la chaîne 
couverte par ce curseur, mais la renvoie
d'une façon conforme aux recommandations 
Unicode : caractère Chr(8232)
pour une fin de ligne manuelle, et caractère 
(unique) Chr(8233) pour une marque de paragraphe.

Je serais donc reconnaissant à qui pourrait me dire 
si une telle fonction existe déjà.

Si je n'apprends pas qu'elle existe, j'utiliserai 
une version que j'ai écrite, mais dont
je crains, évidemment, que ce ne soit du 
bricolage d'amateur.

Tant qu'à faire, j'essaierais alors de rendre cette 
version la plus portable possible.

Je serais donc reconnaissant à qui pourrait me 
dire
1° si, à part les fins de ligne et les fins de 
paragraphe, ilexiste d'autres "caractères d'écran"
(on se comprend) auxquels Open Office, dans 
tel ou tel système d'exploitation,
attribue un autre numéro que le numéro 
Unicode;
2° si, à part les fins de paragraphe, il existe 
d'autres "caractères" qui ne sont pas comptés
de même dans les déplacements de curseur et 
dans les chaînes.

Merci d'avance.

A.


[prog] Caractère NULL inattendu.

2006-04-29 Par sujet Adrien Delcour



Bonsoir.

Comme je l'ai déjà dit, j'apprends les macros 
d'OpenOffice Writer sous Windows et
(je ne sais pas si c'est une particularité de 
Windows) les marques de paragraphe
y comptent pour un caractère dans les 
déplacements de curseur mais pour deux
dans les chaînes couvertes par ces 
curseurs.

La macro qui suit ouvre un nouveau document vierge 
et y insère 2048 lignes identiques,
chaque ligne étant formée des quinze 
premières lignes minuscules (a à o) et d'une
marque de paragraphe.

Cela fait donc 2048 x 16 = 32768 caractères, en 
comptant une marque de paragraphe
pour un caractère.

Ensuite, la macro étend un curseursur 32767 
positions à partir du début du texte.
(Une marque de paragraphe correspond à une 
position.)

La macro envoie alors un MsgBox indiquant le Asc du 
dernier caractère (Right(..., 1) ) de la chaîne
couverte par ce curseur (propriété String du 
curseur).

Résultat inattendu : ce Asc est zéro.

La macro envoieensuite un MsgBox indiquant la 
longueur (Len) de la chaîne en question.
Puisqu'il y a 2047 marques de paragraphe dans la 
zone couverte par le curseur
et que les marques de paragraphe comptent 
double, on s'attendrait à ce que cette
longueur soit 32767 + 2047 = 34814, mais 
le message indique 34815.
(On dirait donc que le caractère NULL est en 
sus.)

Quelqu'un peut-il m'expliquer ces deux résultats 
?

Merci d'avance.

A.

[code]

Sub DebugUnicodeString

 Dim monDocument As Object Dim 
CurseurVisible As Object Dim i As Long Dim carSpecial As 
Integer Dim ourText As Object Dim auxCursor As 
Object Dim ourString As String Dim propFich() 
 monDocument = 
StarDesktop.LoadComponentFromURL("private:factory/swriter", "_blank", 0, 
propFich)' Je suppose que monDocument est maintenant identique à 
ThisComponent. CurseurVisible = 
ThisComponent.CurrentController.getViewCursor() ourText = 
CurseurVisible.getText() ' Je suppose que ourText = monDocument.getText() 
reviendrait au même.

 carSpecial = 
com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK For i = 1 To 
2048 ourText.insertString(CurseurVisible, 
"abcdefghijklmno", False) 
ourText.insertControlCharacter(CurseurVisible, carSpecial, False) Next 


' Le document comporte donc 2048 X 16 = 32768 
caractères,' en comptant une marque de paragraphe pour un seul 
caractère.

 auxCursor = ourText.createTextCursor() ' Est 
au début du texte. auxCursor.goRight(32767, True) ' La 
ligne qui suit sert à vérifier que auxCursor s'arrête juste avant le dernier 
caractère' (marque de paragraphe) inséré par la macro. 
CurseurVisible.goToRange(auxCursor.getEnd(), False)' OK.  
' Même s'il arrive qu'une différence d'une seule position corresponde' à 
deux caractères de chaîne (Chr(13)  Chr(10)), 32767 positions font au 
plus' 65534 caractères de chaîne, donc auxCursor.getString() ne pose pas 
de' problèmes.

 ourString = auxCursor.getString() 
'' MsgBox "Le dernier caractère de ourString, 
donné par Right(..., 1) a pour Asc : "  Asc(Right(ourString, 1))' Avec 
un document formé de 2024 lignes dont chacune est formée des 15 lettres 
minuscules allant de a à o' et d'une marque de paragraphe, le MsgBox qui 
précède affiche que le Asc est 0. ???

 MsgBox "La longueur de ourString est "  
Len(ourString)' Avec un document formé de 2024 lignes dont chacune est 
formée des 15 lettres minuscules allant de a à o' et d'une marque de 
paragraphe, le MsgBox qui précède affiche 34815 (il me semble que cela devrait 
être' 34814).

End Sub
[/code]