Šta je novo?

Unicode ili "unicode"?

hwfanatic

Čuven
Učlanjen(a)
13.02.2002
Poruke
659
Poena
630
Zanima me, šta čovek treba da uradi da bi napravio jednu unicode aplikaciju? Ali stvarno...

Sam Delphi, na primer, ne podržava naša slova kako treba, čak i kada se podesi kodna stranica, kao i default dekodiranje u os-u. Skinuo sam neke Tnt kontrole, koje navodno rešavaju ovaj problem, međutim cela stvar ne radi ukoliko nije postavljen odgovarajući kodni raspored u os-u za ne-unicode aplikacije.

Da li zapravo ima nekog rešenja? :sceptic:
 
hwfanatic je napisao(la):
Sam Delphi, na primer, ne podržava naša slova kako treba, čak i kada se podesi kodna stranica, kao i default dekodiranje u os-u. Skinuo sam neke Tnt kontrole, koje navodno rešavaju ovaj problem, međutim cela stvar ne radi ukoliko nije postavljen odgovarajući kodni raspored u os-u za ne-unicode aplikacije.
Tnt provereno rade nevezano od podešavanja za ne-unikod programe.
A ako mu podesiš kodnu stranu za ne-unikod morale bi da rade i standardne komponente iz Delphija.
 
Poslednja izmena:
Koji delphi i koje komponente ti prave problem sa unicodom? Tekuca verzija podrzava unicode bez problema, koliko znam, po UCS-2 standardu kao i windows.
Obrati paznju da u samom kodu moras da koristis widestring umesto stringa, widechar umesto chara, itd. Na linuxu obrati paznju napostojanje wchar_t tipa koji je 32bitni (za razliku od WideChara koji je dva bajta), jer linux podrzava unicode po UCS-4 standardu, koji je nadskup od UCS-2.
 
silverglider je napisao(la):
Koji delphi i koje komponente ti prave problem sa unicodom? Tekuca verzija podrzava unicode bez problema, koliko znam, po UCS-2 standardu kao i windows.
Obrati paznju da u samom kodu moras da koristis widestring umesto stringa, widechar umesto chara, itd. Na linuxu obrati paznju napostojanje wchar_t tipa koji je 32bitni (za razliku od WideChara koji je dva bajta), jer linux podrzava unicode po UCS-4 standardu, koji je nadskup od UCS-2.
Ajde pojasni malo, molim te.
Znam da delphi ima funkcije i tipove podataka koje podržavaju unicode, ali se u Object Inspectoru ili Code Exploreru unicode tekst ne može uneti. (U Object Inspectoru se mapira na tekuću non-unicode kodnu stranu a u Code Exploreru samo daje upitnike zbog kojih program ne može ni da se kompajlira: Illegal character in input file).
 
...a tu je i problem sto i object inspector koristi MS Sans Serif, koji je ANSI...
 
silverglider je napisao(la):
Obrati paznju da u samom kodu moras da koristis widestring umesto stringa, widechar umesto chara, itd.
Da li se to podešava nekom kompajlerskom direktivom (slično $H+/-) ili bih se morao pomučiti da sve u svemu promenim?
 
Polako momci, polako. Delphi podrzava unicode, ali njegov IDE ga ne podrzava u potpunosti. Hajmo od pocetka. Ako je jasno da umesto char-a treba koristiti widechar, umesto string - widestring tipove, onda je sve jasno ako se pogleda kako su klase definisane u samom fremvorku. U VCL-u je Caption property TControl klase definisan kao string, tako da nema sanse da bilo koji njen naslednik (TForm, TLabel, itd) prikaze unicode bez dodatnog rada (moglo bi eventualno da se radi sa winapijem, pa koriste delphijeve konverzione funkcije pchara u unicode string, mada to nisam probao). Medjutim, CLX frejmvork je baziran na Qt-u, koji je prvo zaziveo na linuxu gde je unicode mama. Vec prvi pogled u QTypes.pas daje na uvid da je uveden novi tip TCaption i da je definisan kao WideString. Dakle, da bi izbegli izmenu VCL frejmvorka, korisiti CLX komponente. Treba imati na umu da sve komponente koje prikazuju tekst sadrze i jednu TFont subkomponentu; TFont u VCL-u podrzava samo ANSI rasporede, dok u TFontu kod CLX-a moze CharSet property da se stavi i na "fcsUnicode" i izabere neki font te komponente koji jeste radjen po unicodu, recimo Arial.
Problem je u tome sto IDE pravi probleme sa unicodom - ogradjujem se samo da ne znam kako je kod delphija 8, koji nisam probao pa ne znam da li je ovo ispravljeno u njegovom IDE-u ili ne. Unos takvog teksta medjutim ne treba a predstavlja nepremostiv problem. Naime, ako se prate neka pravila dobrog programiranja kod aplikacija za vise jezika, sav tekst koji se prikazuje se i ovako i onako izdvaja u poseban junit u jedan resourcestring blok, a po startu aplikacije se taj tekst ucitava u captione od actiona (toolbarovi, hintovi i menuitemi su automatski apdejtovani ako su vezani na action), ili vec direktno u captione komponenti ako se ne koristi action manager (a jeste dobra praksa). Elem, taj tekst je snimljen u poseban pas junit - editujte widestring konstante u vasem voljenom editoru i unesite ono sta ste zeleli. U komponentama na formi (ili kroz kod) postavite samo TFont propertije kako je gore navedeno i voila:

unicode-delphi.jpg



P.S.
Tekst po unicode rasporedu je takodje moguce i drzati u nekom spoljnom fajlu, bilo resource fajlu, bilo xml baziranom dokumentu (gde mogu lepo da se utrpaju i prevodi na razne jezike i ostale definicije), bilo nekoj bazi koja podrzava unicode (ako se baza vec koristi u programu), itd.
 
Poslednja izmena:
hwfanatic je napisao(la):
Da li se to podešava nekom kompajlerskom direktivom (slično $H+/-) ili bih se morao pomučiti da sve u svemu promenim?

Kao da ti je neki problem uraditi Search/Replace i promeniti definicije string u widestring? Gotovo za minut...
 
silverglider je napisao(la):
Kao da ti je neki problem uraditi Search/Replace i promeniti definicije string u widestring? Gotovo za minut...
Vidi ga... Naravno da mi nije problem; samo sam pitao.

Nego, interesantno je kako pominješ ActionManager-a u CLX kontekstu, jer mi se čini da tako nešto ne postoji. Ili, možda postoji neki kewl način da se CLX i VCL komponente kombinuju? :sceptic:
 
Poslednja izmena:
Lapsus, mislio sam na TActionList.
 
Nazad
Vrh Dno