Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Č, Ć i ostali specijaliteti u Delphi-u

[es] :: Pascal / Delphi / Kylix :: Č, Ć i ostali specijaliteti u Delphi-u

[ Pregleda: 4639 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

inostranac

Član broj: 141142
Poruke: 35
*.kolej.mff.cuni.cz.



Profil

icon Č, Ć i ostali specijaliteti u Delphi-u29.06.2007. u 21:05 - pre 203 meseci
Pozdrav svima!

Zna li neko kako u Delphi-u da ispisujem nasa slova?
Probao sam sa zezalicama tipa &#num, ali nije mi uspelo.

Hvala za odgovore...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4901
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u29.06.2007. u 21:32 - pre 203 meseci
VCL biblioteka nije Unicode pa je i ispisivanje latiničnih/ćiriličnih dijakritičkih oznaka uvek problematično.

Ako želiš da se zadržiš na standardnim ne-Unicode kontrolama, predlažem sledeće:

OTVORI APLET: Control Panel / Regional and Language Options
KARTICA: Advanced
PADAJUĆA LISTA: Izaberi matičnu kodnu stranu, dakle:

"Serbian (Latin)" ili
"Slovenian" ili
"Croatian" ili
"Bosnian (Latin, Bosnia and Herzegovina)" ili
"Serbian (Latin, Bosnia and Herzegovina)" ili
"Croatian (Bosnia and Herzegovina)".

TASTER: OK (da prihvatiš izmene)
TASTER: OK (da učitaš kodnu stranu direktno sa HD-a)
TASTER: OK (da restartuješ Windows).

Alternativa je da počneš sa upotrebom 3rd party Unicode komponenti.

Kucaj u pretrazi ovog foruma reč: Unicode
... i dobićeš neke rezultate tipa TNT komponente i sl. To ti je dovoljno da zaboraviš na sve probleme sa ŠĐČĆŽšđčćž.


 
Odgovor na temu

inostranac

Član broj: 141142
Poruke: 35
*.kolej.mff.cuni.cz.



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u29.06.2007. u 21:51 - pre 203 meseci
Jasno...

A reci mi, molim te, ako ja kod sebe instaliram Tms-Unicode naprimer, a hocu da koristim program (ne obavezno da ga kompajliram) na drugoj masini, da li i tamo mora da bude instaliran?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
91.150.103.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u29.06.2007. u 22:03 - pre 203 meseci
Ne. Samo ako hoćeš da kompajliraš.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u30.06.2007. u 00:03 - pre 203 meseci
Citat:
inostranac: Jasno...

A reci mi, molim te, ako ja kod sebe instaliram Tms-Unicode naprimer, a hocu da koristim program (ne obavezno da ga kompajliram) na drugoj masini, da li i tamo mora da bude instaliran?


TNT je must have. Ja ne počinjem da radim bilo šta dok ne zamenim običan form sa TNT-ovim.

TNT komponente rade sa widestring-ovima i windowsovim funkcijama sa sufixom W. Znači nije potrebno ništa na klijentskom računaru, već samo da instaliraš TNT kod sebe.

Obrati pažnju da ti za Windows 9x treba da se instalira unicode podrška. Radiće i bez toga, ali samo kao ANSI, što znači da nema unicoda i da moraš da podešavaš windows.

TMS je kupio TNT, tako da TNT više nije free. I pored toga mislim da se isplati kupiti ih. Sada mnogo brže izlaze updati i proširenja novim komponentama.

Verovatno negde imaš da skineš poslednju verziju koja je izašla kao free.
viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u30.06.2007. u 01:42 - pre 203 meseci
> Zna li neko kako u Delphi-u da ispisujem nasa slova?
> Probao sam sa zezalicama tipa &#num, ali nije mi uspelo.

Gde ti tačno trebaju naša slova? Jedno moguće rešenje si već dobio, da koristiš Unicode komponente, a drugo je da koristiš uobičajene komponente i ANSI slova. Osim TNT kontroli postoji i ElPack koji je komercijalno rešenje ali radi i na Win9x sistemima. Bez obzira da li koristiš Unicode ili ANSI kontrole osnova svega je odabir Unicode fonta, Arial, Tahoma, Courier New, Verdana... Za klasični pristup potrebno je da podesiš i charset fonta, npr. za latinicu je EASTEUROPE_CHARSET, naša latinična slova unosiš kao i ostali tekst.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u30.06.2007. u 18:15 - pre 203 meseci
Citat:
savkic: Za klasični pristup potrebno je da podesiš i charset fonta, npr. za latinicu je EASTEUROPE_CHARSET, naša latinična slova unosiš kao i ostali tekst.


Vidim sa vremena na vreme da pričate o tome da treba izabrati charset.

Čemu to služi, kad je to manje više beskorisno?

Default charset je sasvim dovoljan, jer i onako moraš da podešavaš regional settings. Pa će samim tim da ti bude podešen charset kako treba.

Ako ti regional settings nije podešen kako treba, džabe menjaš charset.

Eventualno mi pada na pamet da je to bilo korisno za stare verzije Delphija, da bi isčitao form kako treba.

Od kad se form snima kao unicode, ne vidim čemu ovo služi.
viking ®
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u30.06.2007. u 18:30 - pre 203 meseci
Citat:
savkic: Osim TNT kontroli postoji i ElPack koji je komercijalno rešenje ali radi i na Win9x sistemima.


TNT je sada takođe komercijalno rešenje. :)

http://www.tmssoftware.com/tmsuni.htm

Niko nije rekao da TNT ne radi pod 9x sistemima. Poenta je samo u tome da radi na različit način kad nema unicode podrške, nego kada je ima.

Bez Microsoftovog Layera za Unicode za Windows 95/98/Me nema ništa od unicoda na tim sistemima.

http://www.microsoft.com.nsatc...handson/dev/mslu_announce.mspx
viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u30.06.2007. u 23:52 - pre 203 meseci
> Vidim sa vremena na vreme da pričate o tome da treba izabrati charset.
> Čemu to služi, kad je to manje više beskorisno?
> Default charset je sasvim dovoljan, jer i onako moraš da podešavaš regional settings. Pa će samim tim da ti bude podešen
> charset kako treba.

Beskorisno? Priznaj lepo da si spavao na časovima ;) U ANSI sistemu svako slovo se predstavlja pomoću jednog bajta, što čini 255 mogućih vrednosti. Kako je 255 malo da bi se predstavili svi mogući jezici, postoji charset koji određuje kodnu stanu, tako primera radi . u EASTEUROPE_CHARSETU karakter sa vrednošću 158 je latinično slovo ž a u RUSSIAN_CHARSETU je ćirilično slovo ć. DEFAULT_CHARSET znači da se uzima sistemski jezik datog sistema (na Win9x se ona odabira prilikom instalacije, a na W2K i novijim može i u Control panelu). Vrednosti u Control panelu nemaju nikakvog uticaja ako se koristi font koji podržava sve jezike, takvi fontovi su Arial, Courier New, Verdana itd. Dakle, savršeno je moguće da sistemski jezik bude latinica a da se u programu prikazuju grčka slova.

> Niko nije rekao da TNT ne radi pod 9x sistemima. Poenta je samo u tome da radi na različit način kad nema unicode podrške, nego kada je ima.

Osim ako nisu nešto promenili od kada su prešli na komercijalu, TNT na Win9x sistemima radi kao i standardne Delphi ANSI kontrole, dakle nema ni U od Unicode.
ElPack na svim sistemima radi kao Unicode, čak koliko se sećam i bez unicode layera. Ako nekoga zanima kako, da objasnim?

> Bez Microsoftovog Layera za Unicode za Windows 95/98/Me nema ništa od unicoda na tim sistemima.

Ne baš, postoje funkcije koje su uvek bile implementirane kao ANSI i Unicode verzije na svim platformama bez MS unicode layera.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u01.07.2007. u 01:13 - pre 203 meseci
Citat:
savkic
Beskorisno? Priznaj lepo da si spavao na časovima ;) u EASTEUROPE_CHARSETU karakter sa vrednošću 158 je latinično slovo ž a u RUSSIAN_CHARSETU je ćirilično slovo ć. DEFAULT_CHARSET znači da se uzima sistemski jezik datog sistema. Vrednosti u Control panelu nemaju nikakvog uticaja ako se koristi font koji podržava sve jezike, takvi fontovi su Arial, Courier New, Verdana itd. Dakle, savršeno je moguće da sistemski jezik bude latinica a da se u programu prikazuju grčka slova.


Nisam spavao. Sve mi je to jasno, još od '96. Sećam se Win 95 PanEuropeanEdition i kako ga podesiti da bi Delphi 2 prikazao naša slova. :)

Ja samo tvrdim da to ne radi. Bar ne za TLabel.

Napravio sam malu test aplikaciju sa 2 labela i stavio za jedan DEFAULT_CHARSET, a za drugi EASTEUROPE_CHARSET. Poslao sam aplikaciju čoveku koji ima podešeno sve ne German (logično kad je čovek Nemac) i nije uspeo da vidi sva naša slova. Što je najgore interna reprezentacija forma je UNICODE.

Ja imam XP podešen na Serbian(Latin).

Nema šanse da prikažem ćirilična slova dok ne prebacim language for nonunicode na Serbian(Cyrilic).

Slobodno me opovrgni i napravi aplikaciju kao onu gore, ali takvu da mogu da vidim ćirilična slova sa mojim podešavanjima, bez potrebe da prebacujem na Serbian(Cyrilic).

Evo sad ću da upalim Delphi i da eksperimentišem, mada tvrdim i dalje da to ne radi. :)

Citat:
savkic
ElPack na svim sistemima radi kao Unicode, čak koliko se sećam i bez unicode layera. Ako nekoga zanima kako, da objasnim?


Mene zanima kako.

Već mi se diže kosa na glavi od pomisli da ćeš da mi spomeneš traslaciju kodnih strana. :)

Citat:
savkic
Ne baš, postoje funkcije koje su uvek bile implementirane kao ANSI i Unicode verzije na svim platformama bez MS unicode layera.


Pričam o korisničkom interface-u. Naravno da su W funkcije tu od pamtiveka.
viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u01.07.2007. u 09:50 - pre 203 meseci
> Nisam spavao. Sve mi je to jasno, još od '96. Sećam se Win 95 PanEuropeanEdition i kako ga podesiti da bi Delphi 2 prikazao naša slova. :)
> Ja samo tvrdim da to ne radi. Bar ne za TLabel.

Za D2 doista se ne sećam, mislim da tada nisam ni koristio naša slova, D3, davno je bilo ali mislim da je radilo. D5 radilo je i radi i sada. D7 i noviji, počeo je da se pravi pametan i da greši u streamin i streamout formi, kada se ručno podesi sadržaj radi.

> Slobodno me opovrgni i napravi aplikaciju kao onu gore, ali takvu da mogu da vidim ćirilična slova sa mojim podešavanjima, bez potrebe
> da prebacujem na Serbian(Cyrilic).

Evo, sve ono o čemu sam pričao. Samo ne znam da li ću uspeti da uploadujem.
http://www.MegaShare.com/218829

> ElPack na svim sistemima radi kao Unicode, čak koliko se sećam i bez unicode layera. Ako nekoga zanima kako, da objasnim?
> Mene zanima kako.
> Već mi se diže kosa na glavi od pomisli da ćeš da mi spomeneš traslaciju kodnih strana. :)

Ne, zapravo je veoma jednostavna ideja. Kada se pritisne neki taster, na osnovu trenutnog input jezika, ANSI karakter pretvori u WideChar i doda ga u interni WideString bafer, kod prikazivanja teksta ne oslanja se na Windows već radi custom painting, mislim sa ExtTextOutW funkcijom.

> Pričam o korisničkom interface-u. Naravno da su W funkcije tu od pamtiveka.

Kakve to ima veze.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u01.07.2007. u 12:48 - pre 203 meseci
Citat:
savkic
D7 i noviji, počeo je da se pravi pametan i da greši u streamin i streamout formi, kada se ručno podesi sadržaj radi.


Ja se više ne sećam ni D7, a ne onih pre njega. :)

Znam da su nešto menjali kod snimanja formova u D7, ali se ne sećam šta. :(

Citat:
savkic:
Evo, sve ono o čemu sam pričao. Samo ne znam da li ću uspeti da uploadujem.
http://www.MegaShare.com/218829


Code:

Label1.Caption := #198#193#156;


E vidiš, da si umesto toga stavio:

Label1.Caption := 'ćirilica'; //(ali napisano ćirilicom)

to ne bi radilo.

Meni je logično da ako podesis sve na ćirilicu (language for non unicode, regional), napraviš aplikaciju u kojoj koristiš ćirilične stringove i podesiš language aplikacije (zbog resource stringova), podesis charset za font, da će to svuda da radi.

Ali to nije tako. :(

Rezultati mog eksperimentisanja pokazuju da žongliranje sa WideCharToMultiByte i MultiByteToWideChar očigledno daje rezultate za Label, ali ne i za Edit.

Baš me zanima kako se boriš sa ovim.

Citat:
savkic:
> Pričam o korisničkom interface-u. Naravno da su W funkcije tu od pamtiveka.

Kakve to ima veze.


Ja sam shvatio da u ovoj rečenici ti pričaš o xxxxxxxxxW funkcijama:

Citat:

Ne baš, postoje funkcije koje su uvek bile implementirane kao ANSI i Unicode verzije na svim platformama bez MS unicode layera.


viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u01.07.2007. u 14:10 - pre 203 meseci
> E vidiš, da si umesto toga stavio:
> Label1.Caption := 'ćirilica'; //(ali napisano ćirilicom)
> to ne bi radilo.

U editoru i ne bi mogao da uneseš ćirilicu ako ti je sistemski jezik latinica, zato možeš da uneseš u Object Inspectoru i onda radi, ako je D5.

> Meni je logično da ako podesis sve na ćirilicu (language for non unicode, regional), napraviš aplikaciju u kojoj koristiš ćirilične stringove
> i podesiš language aplikacije (zbog resource stringova), podesis charset za font, da će to svuda da radi.
> Ali to nije tako. :(

Kako nije, pa eno ti exe u onom mom primeru, kompajliran u D5. Na novijim verzijama Delphia, može sve da se unosi kao latinica a da se onda to za vreme izvršavanja programa konvertuje u ćirilicu.

> Rezultati mog eksperimentisanja pokazuju da žongliranje sa WideCharToMultiByte i MultiByteToWideChar očigledno daje rezultate za Label, ali ne i za Edit.
> Baš me zanima kako se boriš sa ovim.

Nisam shvatio.

> Ja sam shvatio da u ovoj rečenici ti pričaš o xxxxxxxxxW funkcijama:

I pričam, ExtTextOutW je sve što ti treba da dobiješ full unicode podršku na svim sistemima, a ona ne zavisi od MS unicode layera.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u01.07.2007. u 19:54 - pre 203 meseci
Citat:
savkic: U editoru i ne bi mogao da uneseš ćirilicu ako ti je sistemski jezik latinica, zato možeš da uneseš u Object Inspectoru i onda radi, ako je D5.


Pa i mislio sam na to da je sve podešeno na ćirilicu, ali da opet ne radi sve kako treba, ako nije podešen language for non unicode.

U novim verzijama je moguće ubaciti čak i kombinaciju ćirilice i latinice u editor, jer ga onda tretira kao widestring.

Citat:
savkic:
Kako nije, pa eno ti exe u onom mom primeru, kompajliran u D5. Na novijim verzijama Delphia, može sve da se unosi kao latinica a da se onda to za vreme izvršavanja programa konvertuje u ćirilicu.

> Rezultati mog eksperimentisanja pokazuju da žongliranje sa WideCharToMultiByte i MultiByteToWideChar očigledno daje rezultate za Label, ali ne i za Edit.
> Baš me zanima kako se boriš sa ovim.

Nisam shvatio.


U polu-uspešnom eksperimentu koristio sam WideCharToMultiByte da prebacim widestring u string u određenom code page-u (u ovom slučaju 1251) i onda takav string prosledim kontroli. WideStringToString je funkcija koja koristi WideCharToMultiByte, ali ima manje parametara.

Evo je ovde: http://www.swissdelphicenter.ch/torry/showcode.php?id=1692

E sad problem.

Code:

  // radi
  Label1.Font.Charset := RUSSIAN_CHARSET;
  Label1.Caption := WideStringToString('ćirilični string', 1251):
  // ne radi
  Edit1.Font.Charset := RUSSIAN_CHARSET;
  Edit1.Text := WideStringToString('ćirilični string', 1251):


Kad prebaciš input langage na ćirilicu slova se pojavljuju, ali samo dok ih kucaš. Šta god posle toga... ne radi. :(

Zato sam pitao kako se boriš sa editom.

Kad se podesi language for non unicode na ćirilicu, onda sve radi. Ali tada sve radi i kad je podešen DEFAULT_CHARSET i bez igranja sa konverzijom.
viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u02.07.2007. u 09:43 - pre 203 meseci
> Pa i mislio sam na to da je sve podešeno na ćirilicu, ali da opet ne radi sve kako treba, ako nije podešen language for non unicode.
> U novim verzijama je moguće ubaciti čak i kombinaciju ćirilice i latinice u editor, jer ga onda tretira kao widestring.

O čemu pričaš, Delphi BDS? On izgleda da ima ozbiljnih problema sa višejezičnom podrškom, slobodno mogu reći i bagove, D5 je zakon.

> U polu-uspešnom eksperimentu koristio sam WideCharToMultiByte da prebacim widestring u string u određenom code page-u (u ovom slučaju 1251)
> i onda takav string prosledim kontroli. WideStringToString je funkcija koja koristi WideCharToMultiByte, ali ima manje parametara.

> // radi
> Label1.Font.Charset := RUSSIAN_CHARSET;
> Label1.Caption := WideStringToString('ćirilični string', 1251):
> // ne radi
> Edit1.Font.Charset := RUSSIAN_CHARSET;
> Edit1.Text := WideStringToString('ćirilični string', 1251):

> Kad se podesi language for non unicode na ćirilicu, onda sve radi. Ali tada sve radi i kad je podešen DEFAULT_CHARSET i bez igranja sa konverzijom.

Ovo nije problem Windowsa već bag u BDS tačnije u načinu kako handluje uneti tekst i kako vrši automatsku konverziju iz Unicode u Ansi.
Svrha tvog primera mi nije jasna, ovako ne može da se radi. Latinični unicode tekst se ne može konvertovati u ANSI (ili unicode) ćirilicu na ovaj način, ovako se može Unicode latinica konvertovati u ANSI latinicu.
Ako je potrebna Lat <-> Ćir konverzija mora se pisati posebna rutina, koja će svaki karakter iz latinice translirati u odgovarajući ćirilični i obratno.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.co.yu.



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u02.07.2007. u 11:55 - pre 203 meseci
Citat:
savkic: O čemu pričaš, Delphi BDS? On izgleda da ima ozbiljnih problema sa višejezičnom podrškom, slobodno mogu reći i bagove, D5 je zakon.


procedure D5; deprecated;
procedure Win9x; deprecated;

:)

Ne verujem da bi se vratio na bilo koji Delphi pre D2005, kao što ne shvatam zašto se i dalje insistira na 9x podršci kad je i MS digao ruke od toga. O ovome možemo da pričamo ili private ili u nekoj drugoj temi, nemoj da idemo ovde u offtopic.

Izvor svih ovih problema sa slovima u BDS-u je nešto sasvim drugo, a ne sam BDS. Nešto što se pojavilo u D7, ali može da se primeni i na starije Delphije.

A šta... malo niže. :)

64bit Delphi će imati native UNICODE. Samo treba sačekati. E to će biti zakon. :)

Citat:

Ovo nije problem Windowsa već bag u BDS tačnije u načinu kako handluje uneti tekst i kako vrši automatsku konverziju iz Unicode u Ansi.


E vidiš, upravo smo otkrili u čemu je problem i jeste problem do Windowsa, a ne do Delphija.

Problem je novi comctl32.dll, odnosno XP manifest, koji kaže aplikaciji da koristi novi comctl.

Molim te da probaš nešto. Ubaci u svoju aplikaciju, koja inače radi, XP manifest, pa mi javi da li radi. :>

Veruj mi da ti edit neće raditi. :(

Isključio sam XP manifest i sve radi. :)

Citat:

Svrha tvog primera mi nije jasna, ovako ne može da se radi. Latinični unicode tekst se ne može konvertovati u ANSI (ili unicode) ćirilicu na ovaj način, ovako se može Unicode latinica konvertovati u ANSI latinicu.


Pa naravno da ti nije jasan kad mi je ES sam prebacio ćirilični string u latinični. :)

Ja sam lepo ćirilicom napisao ćirilični string, a on ladno prebacio iz 1251 u 1250. :(

Znači ćirilični string koji je 1251, a ne 1250.

Izvinjavam se na zabuni, ali nije bilo do mene.

Apsolutno nisam pokušavao da latinicu prebacim u ćirilicu, nego da ćirilični widestring prebacim u običan ćirilični string. Inače sad sve to lepo radi i u D2007. :)

btw. Sad mi je skrenuta pažnja da je mnogo jednostavnije staviti SetMultiByteConversionCodePage(1251), nego koristiti one dve funkcije.


viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u02.07.2007. u 15:02 - pre 203 meseci
> Ne verujem da bi se vratio na bilo koji Delphi pre D2005, kao što ne shvatam zašto se i dalje insistira na 9x podršci kad je i MS digao ruke
> od toga. O ovome možemo da pričamo ili private ili u nekoj drugoj temi, nemoj da idemo ovde u offtopic.

Ja i dalje aktivno koristim D5, D7 mi je primarno okruženje a BDS po potrebi.
Pitanje i nije toliko vezano za Win9x, dobar program treba da radi na bilo kom sistemu sa bilo kakvim podešavanjima, a ne da se zahteva promena sistemskog jezika ili podešavanja.

> E vidiš, upravo smo otkrili u čemu je problem i jeste problem do Windowsa, a ne do Delphija.
> Problem je novi comctl32.dll, odnosno XP manifest, koji kaže aplikaciji da koristi novi comctl.

Bug je u Delphiu, evo i zašto. On uneti tekst snimi kao UTF8, tj. kao Unicode, kako label ili edit kontrole koriste AnsiString, on mora implicitno konvertovati Unicode u Ansi i tu konverziju vrši po sistemskoj kodnoj strani. Ako je uneti tekst ćirilica, a sistemski jezik latinica, biće upotrebljena pogrešna kodna strana i kao rezultat će se dobiti kuke i kvake. E zato ako se ćirilica postavi kao sistemski jezik, menja se i kodna strana po kojoj se radi konverzija i kao rezultat izađe ispravan ANSI string. D5 se ne pravi pametan i tekst čuva kako je unet i nema implicitne unicode -> ansi konverzije.

> Molim te da probaš nešto. Ubaci u svoju aplikaciju, koja inače radi, XP manifest, pa mi javi da li radi.

Imam W2K. Da li si ti probao onaj moj exe, trebalo bi da radi svuda i bez obzira na podešeavanja sistema.

> Ja sam lepo ćirilicom napisao ćirilični string, a on ladno prebacio iz 1251 u 1250. :(

Aha, da i ja sam to primetio par puta, namerno su zabranili pisanje ćirilićnih tekstova, što mislim da je greška.

> btw. Sad mi je skrenuta pažnja da je mnogo jednostavnije staviti SetMultiByteConversionCodePage(1251), nego koristiti one dve funkcije.

Tako se, pretpostavljam, postavlja kodna strana po kojoj se vrši implicitna konverzija koju sam gore spominjao. Ne mislim da je bolje rešenje, sa izričitom konverzijom se više kuca ali se tačno vidi šta se dešava i kod je kompatibilan sa raznim Delphi verzijama.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.co.yu.



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u03.07.2007. u 15:57 - pre 203 meseci
Citat:

Pitanje i nije toliko vezano za Win9x, dobar program treba da radi na bilo kom sistemu sa bilo kakvim podešavanjima, a ne da se zahteva promena sistemskog jezika ili podešavanja.


Jedino sigurno rešenje za ovo je UNICODE. Zato i koristim TNT. :)

Da citiram sebe opet:

Citat:

E vidiš, upravo smo otkrili u čemu je problem i jeste problem do Windowsa, a ne do Delphija.
Problem je novi comctl32.dll, odnosno XP manifest, koji kaže aplikaciji da koristi novi comctl.


Edit iz comctl-a 6 ne interesuje tvoj charset, samo sistemski. Možeš da setuješ gde i kako hoćeš Font.Charset, on će koristiti systemski, a ne tvoj.

Nije problem da edit ne dobija 1251 string, već je problem što edit ne reaguje na promenu charseta i prikazuje se kao da nisam ni menjao charset. U editu vidim "žčđčëčöŕ", umesto da piše "ćirilica". Proveri kodove ovih karaktera po 1250, pa ćeš videti da je to tačno ono što i ćirilica po 1251.

Znači imam identičnu test aplikaciju sa manifestom i bez njega. Svim kontrolama prosleđujem identičan string ("ćirilica"). Verzija sa manifestom koja koristi comctl 6 ima problem sa editom. Ako sklonim manifest vidim da piše ćirilica. Znači problem je comctl, a ne Delphi.

Ponovo te molim da ubacis manifest u neku svoju aplikaciju koja lepo radi sa ćirilicom i ima edit i da je istestiraš na nekom XP-u.

U krajnjem slučaju dodaj u onu tvoju test aplikaciju edit i manifest, iskompajliraj, pa mi pošalji, a ja ću ti poslati screen shot. Definitivno nema veze sa Delphijem.

Citat:

Bug je u Delphiu, evo i zašto. On uneti tekst snimi kao UTF8, tj. kao Unicode, kako label ili edit kontrole koriste
AnsiString, on mora implicitno konvertovati Unicode u Ansi i tu konverziju vrši po sistemskoj kodnoj strani. Ako je uneti tekst ćirilica, a sistemski jezik latinica, biće upotrebljena pogrešna kodna strana i kao rezultat će se dobiti kuke i kvake. E zato ako se ćirilica postavi kao sistemski jezik, menja se i kodna strana po kojoj se radi konverzija i kao rezultat izađe ispravan ANSI string.


To nije bug to je feature. Apsolutno podržavam tu promenu.

Problem nastaje samo ako se Delphiju ne naznači kako da radi konverziju. Ja sam lepo konvetovao svaki unicode string u 1251.

I uporno pričam:
Kuke i kvake možeš da dobiješ i na drugi način, tako što glupa windows controla ne reaguje na promenu charset-a. I ne pomaže ništa sem promene sistemske kodne strane.

Citat:

Imam W2K. Da li si ti probao onaj moj exe, trebalo bi da radi svuda i bez obzira na podešeavanja sistema.


Da radi, jer ima samo labele. Label radi i sa comctl v6.

Citat:

Tako se, pretpostavljam, postavlja kodna strana po kojoj se vrši implicitna konverzija koju sam gore spominjao.


Baš tako. Inače zahteva D2006+.
viking ®
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u03.07.2007. u 19:15 - pre 203 meseci

> Ponovo te molim da ubacis manifest u neku svoju aplikaciju koja lepo radi sa ćirilicom i ima edit i da je istestiraš na nekom XP-u.
> U krajnjem slučaju dodaj u onu tvoju test aplikaciju edit i manifest, iskompajliraj, pa mi pošalji, a ja ću ti poslati screen shot.
> Definitivno nema veze sa Delphijem.

Manifeste nisam nikada koristio i ne znam kako se ubacuju. A XP baš i nemam. Ako kažeš da je tako onda je to verovatno tako, pogledaj na netu ima li neki workaround, sigurno nisi jedini.

> To nije bug to je feature. Apsolutno podržavam tu promenu.

Kako feature? Pazi taj Delphi zvanično podržava Win9x i zvanično podržava ANSI kontrole i charsete kao rešenje za non english aplikacije a neupotrebljiv je na Win9x sistemima (tj. može ali ako sam praviš obilaznice), to definitivno jeste bug.

> Problem nastaje samo ako se Delphiju ne naznači kako da radi konverziju. Ja sam lepo konvetovao svaki unicode string u 1251.

Probaj da u BDSu u Caption TLabela uneseš ćirilicu, nećeš uspeti (ni na W2K sa ćirilicom kao sistemskim jezikom). To nije normalno ponašanje, ne zaboravi da su TNT ili ElPack thirdparty rešenja i to komercijalna, dakle BDS _nema_ regularno rešenje za non english aplikacije.

Inače, mnogo se odužila ova diskusija, vreme je da završimo ili pređemo na privatnu prepisku, ne verujem da je ovo interesantno za širu publiku.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
89.216.193.*



Profil

icon Re: Č, Ć i ostali specijaliteti u Delphi-u03.07.2007. u 23:06 - pre 203 meseci
Citat:
savkic
Probaj da u BDSu u Caption TLabela uneseš ćirilicu, nećeš uspeti (ni na W2K sa ćirilicom kao sistemskim jezikom). To nije normalno ponašanje, ne zaboravi da su TNT ili ElPack thirdparty rešenja i to komercijalna, dakle BDS _nema_ regularno rešenje za non english aplikacije.

Inače, mnogo se odužila ova diskusija, vreme je da završimo ili pređemo na privatnu prepisku, ne verujem da je ovo interesantno za širu publiku.


Ne znam da li je interesatno, ali je EXTREMNO KORISNO!

Idemo prvo screen shotove sa XP-a i Viste.

Aplikacija bez manifesta. Languge for Non Unicode - German na obe mašine.





Identična aplikacija sa manifestom na istim mašinama.





Screenshotove sa Win2000 i 98SE ću imati sutra.

A sad aplikacije (exe):

Bez manifesta
http://viking.users.sbb.co.yu/codepages/noman.exe

Sa manifestom
http://viking.users.sbb.co.yu/codepages/man.exe

Najzanimljiviji su TButton-i (oni su dole, ono gore su TBitButton-i). U zavisnosti od toga da li vam je podešena ćirilica ili latinica jedno od dva dugmeta će imati normalan caption. Ukoliko je podešen recimo German, ni jedno dugme neće imati normalan caption.

Svim kontrolama levo se prosleđuje isti CP1251 string, a svim kontrolama desno isti CP1250 string.

Sve ovo ukazuje na OČIGLEDAN bug u samom Windowsu, odnosno comctl32.dll-u i apsolutno nema veze Delphijem.

A to potrvđuje i sledeće:

Citat:

But in fact this works only if I use the old common controls version 5. If I use a manifest to use the common controls version 6, obviously the system locale is used to show the text and the lfCharSet of the font has no effect.


Jedina dilema ostaje sa buttonima. Da li je u pitanju bug novijih Delphija ili bug postoji i u starijem comctl32.dll-u.

Source aplikacije se nalazi ovde:

http://viking.users.sbb.co.yu/codepages/CP125x.ZIP

Za one sa starijim Delphijem, treba skloniti iz Project1.dpr sledeću liniju:

Code:

  Application.MainFormOnTaskbar := True;


Moguće da će buttoni imati normalan caption na nekoj starijoj verziji windows-a, ali čisto sumnjam da će imati efekta kompajliranje sa starijim Delphijem.

Uporno pokušavam da objasnim svima ovde, uključujući i tebe, da to o čemu ti pričaš, radi kako treba AKO I SAMO AKO je podešen sistemski code page.
viking ®
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Č, Ć i ostali specijaliteti u Delphi-u

[ Pregleda: 4639 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.