[ Rapaic Rajko @ 12.09.2017. 13:58 ] @
Kolege, imam problem iz naslova.

Dakle, klijent je poslao jedan word template (dokument) u cirilici, koji treba popuniti podacima iz baze, ali su ovi u latinici.
U firmi imamo rutinu za prebacivanje karaktera (funkcije i u package-u i u bazi) koje rade promene koda karaktera. Kad se to iskombinuje sa CodePage-om na nekoj kontroli, to radi sasvim ok.
Medjutim, kad ja taj konvertovan podatak upisem u otvoreni word dokument, dobijem kuke i kvake.

Ima li ko ideju sta uraditi? E da, Delphi je 2007, znaci jos uvek ide klasican genericki string (AnsiString)...uh.

Hvala unapred!

Pozz
[ savkic @ 12.09.2017. 16:20 ] @
Kako popunjavas polja u Wordu, Ole automation ili neki drugi sistem?
Meni radi bez problema cirilica i latinica, samo je stos slati Unicode tekst ne ANSI. Dakle vidi da konvertujes tekst u Unicode pa da ga tako saljes.
[ Milan Milosevic @ 12.09.2017. 17:08 ] @
I ja mislim da je ANSI text. Verovatno ti je starija verzija Delphija 7 ili slično.

[Ovu poruku je menjao Milan Milosevic dana 12.09.2017. u 20:34 GMT+1]
[ Rapaic Rajko @ 12.09.2017. 20:27 ] @
Citat:
savkic:
Kako popunjavas polja u Wordu, Ole automation ili neki drugi sistem?
Meni radi bez problema cirilica i latinica, samo je stos slati Unicode tekst ne ANSI. Dakle vidi da konvertujes tekst u Unicode pa da ga tako saljes.


Igore, potpuno sam zaboravio kako se konvertuje Ansi u Unicode (bese MultiByteToWide...?). Secam se da je parametar CodePage (CP) zaguljen, treba provaliti koji je za srpsku cirilicu.
Hvala!

Pozz
[ savkic @ 12.09.2017. 21:42 ] @
MultiByteToWideChar a CP je 1251.
Samo pazi tu moras posebno hendlovati nj, lj, dj, dz.
[ Rapaic Rajko @ 12.09.2017. 22:07 ] @
Reseno

Znam za to sa 'duplim' slovima, nasa funkcija vec radi konverzije u ispravne cirilicne kodove. (doduse, ima i tu kvaka, ali retkih - recimo rec 'injekcija' )
Druze, hvala puno!

Pozz
[ Rapaic Rajko @ 13.09.2017. 10:28 ] @
Eh, uvek neka kvaka

Kolege, zna li neko zasto konverzija funkcijom MultiByteToWideChar() na nekim masinama radi, a na nekim NE?
Pretpostavio sam da ima veze sa instaliranim jezicima/kodnim stranama (konkretno Serbian Cyr); ispostavilo se da nema veze, nesto drugo je u pitanju.
Ima li neko ideju?

Pozz
[ Rapaic Rajko @ 13.09.2017. 10:49 ] @
Da pojasnim gresku:

1) funkcija koja radi konverziju ANSI stringa poziva prvi put MultiByteToWideChar() da bi dobila duzinu izlaznog unicode stringa.
2) Ukoliko je duzina ispravna (znaci poziv je uspeo), ponovo se poziva MultiByteToWideChar() sa prosledjenim unicode string parametrom (u ovom slucaju Result).
3) E sad: OBA poziva prodju, inace bi Result bio prazan string, to je postavljeno na pocetku funkcije. Ali umesto konverzije, drugi poziv MultiByteToWideChar() samo prepise ANSI 'kuke i kvake' u unicode 'kuke i kvake'.

Od 4 probane masine, na jednoj nece da radi, to jest radi kako je opisano iznad; potpuna misterija.
Hvala za bilo kakav hint!

Pozz

P.S. Nema nikakve veze sa instaliranim jezickim podesavanjima (language bar), provereno.
[ savkic @ 13.09.2017. 12:39 ] @
Tipujem da su ti ulazni podaci pogresni, tipa ako napises "a" (ansi kod 97) i zatrazis konverziju u unicode po 1251 strani, neces dobiti cirilicno a vec, polazno, latinicno a.
[ tkaranovic @ 13.09.2017. 13:05 ] @
Odnosno za "'asšđčć" latinica daje:

97
115
1113
1088
1080
1078

a cirilica daje:

1072
1089
1096
1106
1095
1115


Moze da se ubaci TNTMemo i proveri sta prikazuje.
[ Rapaic Rajko @ 13.09.2017. 13:38 ] @
Dakle, da se pospem pepelom - greska (glup previd) je u pitanju.

Koristim komponent za popunjavanje word template-a, i (naravno pogresno) sam pretpostavio da ce uvek kreirati genericki OLE objekat; iako ima i Word2010 OLE objekat (sve starije sam izbacio, nemoguce za rad; ako prodje compile package-a, onda nece da radi aplikacija, i obratno; ali nebitno sad).
Shodno tome sam izmenio komponent samo na kodu generickog objekta (za zamenu vrednosti). Na problematicnoj masini je slucajno bio upravo Word 2010, i naravno zamena parametara je bila 'kukasto-kvakasta' . Posle prepravke koda i na tom mestu, sve radi ok.

Hvala svima!

Pozz