-
1. Data: 2010-03-29 19:28:27
Temat: [VC++] Listy numerowane w RichEdit - jakiś bug MS?
Od: "w.p." <w...@g...com>
Witam!
Używam kontrolki CRichEditCtrl ver. 4.1 ale próbowałem też ze
starszymi - to samo!
Używam list numerowanych alfabetycznie między innymi (czyli
PARAFORMAT2.wNumbering = 3 lub 4)
a. item 1
b. item 2
...
z. item 26
aa. item 27
ab. item 28
..
yy. item 675
yz. item 676
a'a item 677 błąd!!!!!!!!!!!!
a'b item 678 tu powinno być "zb"
...
a'z item 702 tu powinno być "zz"
aaa. item 703 tu już liczy dobrze
.....
Dziwne niesamowicie - liczy dobrze od a do yz. Potem przez całe za do
zz zamiast znaku z jest jakieś a'
Potem jak przejdzie zz liczy znów dobrze. Wygląda na jakiś głupi błąd
od MS, ale przecież tyle było wersji RichEdita i trudno mi w to
uwierzyć. Algorytm przeliczania liczba-ciąg jest banalny bo musiałem
go napisać przy innej okazji ale przecież skoro listy w kontrolce są
zaimplementowane to niech już dobrze działają...
Błąd można wywałać jako numer elementu listy dając wartość 677 czyli
PARAFORMAT2.wNumberingStart = 677. I oczywiście kontrolka nie
wyświetli "za" tylko "a'a".
Próbowałem też przez interfejs TOM - identyczny efekt. Załamka.
Ktoś wie czy można to jakoś obejść i jaki może być tego powód? No
jeśli to błąd MS to naprawdę wtopa skoro nie działa zwykła lista a oni
dodają jakieś sprawdzanie poprawności słów i wyrażenia matematyczne...
Ale mimo wszystko żyję nadzieją że to ja coś źle zrobiłem - może jakiś
czeski błąd. Ale w projekciku do którego niżej daję linka nie było
miejsca na błędy chyba.
Prosta metoda spowodowania tego dziwactwa. Element listy tworzę po
prostu przez:
PARAFORMAT2 pf;
memset(&pf, 0, sizeof(pf));
pf.cbSize = sizeof(pf);
pf.dwMask = PFM_NUMBERING | PFM_NUMBERINGSTYLE | PFM_NUMBERINGSTART;
pf.wNumbering = 3;
pf.wNumberingStyle = 0x200 | 0x8000;
pf.wNumberingStart = 677;
mvEditor.SetParaFormat(pf);
Minimalny projekt VC2003 z tym błędem:
http://dl.dropbox.com/u/4536598/rich_edit.zip
Nie wiem jak pod Wine to chodzi - może chłopaki od Linuksa zrobili do
tego łatkę ;)
Pozdrawiam
W.