Polskie czcionki

dział ogólny

Polskie czcionki

Nowy postprzez sebaskow » piÄ…tek, 19 października 2012, 19:56

Mam taki problem.
Napisałem program 3 lata temu. Ogólnie jest to baza danych, do tej pory wszystko działało ok. I na komputerach z systemem XP jak i Windows 7.

Jednak na jednym z komputerów w mojej firmie ( akruat na Windows 7 )nie wyświetlają się polskie znaki. Nie mogę przez to tworzyć zapytań SQL

Moje pytanie brzmi - Co jest przyczyną tego stanu rzeczy i ewentualnie jak to zmienić w moim programie ?

Zwróćcie proszę uwagę iż tekst jest zapisany w kontrolkach: RichEdit, natomiast komunikat jest wygenerowany w MessageBox. Również zapytania SQL które wysyła mój program mają błędy polskich znaków. - Niefortunnie niektóre kolumny tabel nazwałem z polskimi znakami.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Corvis » piÄ…tek, 19 października 2012, 20:34

Jak baza danych ?? Jakie komponenty bazodanowe ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Polskie czcionki

Nowy postprzez sebaskow » sobota, 20 października 2012, 10:13

Akurat komponenty ADO, baza MS Access.
Choć nie wiem czy ma to jakieś znaczenie bo cały program nie obsługuje polskich czcionek. Nie wiem czy to kwestia ustawień systemu czy mojego programu.
Ogólnie wszystkie stringi które są zawarte w moim programie są nieprawidłowo obsługiwane. Używam klasy AnsiString.
Jeśli chodzi o komputer to mam niewielki wpływ bo to komputer korporacyjny i zarządza nim administrator.
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez sebaskow » wtorek, 23 października 2012, 11:01

Czy macie może jakiś pomysł ?
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Mironas » wtorek, 23 października 2012, 11:22

Używam klasy AnsiString

W C++ Builder XE powinieneś raczej użyć UnicodeString lub po prostu String. Na zrzutach widać że na przyciskach masz poprawne znaki. Caption przycisku w XE to właśnie UnicodeString.

Jeśli na innych komputerach program działa poprawnie to porównaj ustawienia regionalne (czy jak to się tam pod siódemką nazywa) z innym komputerem.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
PodziÄ™kowaÅ‚ : 17
OtrzymaÅ‚ podziÄ™kowaÅ„: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez sebaskow » wtorek, 23 października 2012, 22:35

Sprawdzałem te ustawienia.
Wydaje się wszystko OK. Język polski, klawiatura programisty itp...

Myślice że może mieć wpływ ustawienie

Font.Charset = DEFAULT_CHARSET

lub też

Font.Charset = EASTEUROPE_CHARSET
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Mironas » Å›roda, 24 października 2012, 09:27

sebaskow napisał(a):Myślice że może mieć wpływ ustawienie
Font.Charset = DEFAULT_CHARSET
lub też
Font.Charset = EASTEUROPE_CHARSET

Raczej nie.
Sprawdź jak są kodowane (ANSI/unicode/...) teksty które wyświetlasz z bazy danych. Może trzeba zrobić konwersje (Utf8ToAnsi(...) - lub coś podobnego). Spróbuj w programie zamienić AnsiString na UnicodeString/String.
Pokaż kawałek kodu który wyświetla okienko z drugiego zrzutu.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
PodziÄ™kowaÅ‚ : 17
OtrzymaÅ‚ podziÄ™kowaÅ„: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez sebaskow » Å›roda, 24 października 2012, 11:00

Kod: Zaznacz cały
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
/*
    Jeżeli w linii raportu wad jest wiÄ™cej niż dwie liniijki bÄ™dzie to znaczyÅ‚o
    że jest zaraportowana przynajmnij jedna wada.

    NastÄ™pnie sprawdzamy czy zmianna glabalna ma wartość true czyli dane zostaÅ‚y zapisane.
*/

String str;

str += "Zamknięcie raportu spowoduje stratę wszystkich nie wprowadzonych danych...\n\n";
str += "Czy chcesz zamknąć raport?\n\n";
str += "Wsiśnij TAK \tjeżeli chcesz zamknąć raport\n";
str += "Wciśnij NIE \tjeżeli jednak chcesz pozostać w trybie edycji\n";


if(Form_RaportWad->StringGrid1->RowCount > 2)
    {

    if(!m_global_zapisdanych)
        {
        int ms = MessageBox(Handle, str.c_str(), L"Pytanie...", MB_ICONSTOP | MB_YESNO);
        if(ms == IDNO) CanClose = false;
        return;
        }
    }
else
    {
    str  = "Jeżeli dane zostaÅ‚y zapisane nie musisz zamykać programu aby rozpocząć nowÄ… edycjÄ™.\n\n";
    str += "Czy pomimo to chcesz zamknąć program?";
    int ms = MessageBox(Handle, str.c_str(), L"Pytanie...", MB_ICONINFORMATION | MB_YESNO);
    if(ms == IDNO) CanClose = false;
    CanClose = true;
    }
//
}
//---------------------------------------------------------------------------
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Mironas » Å›roda, 24 października 2012, 11:43

Funkcja zbudowana jest poprawnie.

Może na tym problematycznym komputerze brakuje jakiejś czcionki? Chociaż MessageBox korzysta z czcionki wg ustawień systemowych a nie ustawień programu.
Zrób mały program testowy z jednym MessageBox-em i sprawdź jak zadziała na tym komputerze. Nic więcej nie przychodzi mi do głowy.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
PodziÄ™kowaÅ‚ : 17
OtrzymaÅ‚ podziÄ™kowaÅ„: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Corvis » Å›roda, 24 października 2012, 15:00

Sprawdź mapowanie jeszcze:

viewtopic.php?f=16&t=1098#p7401
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
PodziÄ™kowaÅ‚ : 80
OtrzymaÅ‚ podziÄ™kowaÅ„: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Polskie czcionki

Nowy postprzez Cyfrowy Baron » Å›roda, 24 października 2012, 16:43

Corvis napisał(a):Sprawdź mapowanie jeszcze:


Mi się wydaje, że sebaskow niczego w programie nie zmieniał, nie tworzył go na nowo, lecz przeniósł na inny system w którym program zdaje się nie obsługiwać znaków Unicode. Tak więc sebaskow powinien dobrze sprawdzić ten system. Sprawdzić jakiej czcionki system używa dla okna komunikatów, w Windows XP jest to Microsoft Sans Serif, potem trzeba wejść do katalogu Windows\Fonts, odszukać tą czcionkę, uruchomić i jeżeli w oknie podglądu czcionki wyświetla się tekst "Zażółć gęślą jaźń" to czcionka obsługuje polskie znaki diakrytyczne, jeżeli jednak wyświetla się tekst "Jackdaws love my big sphinx of quards" to polskich znaków nie obsługuje.

Ze screena zawierającego "Zeszyt zmianowy" wynika jednak, że system obsługuje polską czcionkę, gdyż na buttonach są polskie znaki, tylko RichEdit zawiera krzaczki. Słyszałem o podobnych problemach na systemie Windows 7 64-bit, ale też, że te problemy dotyczą SQL Server 7. Dobrych wiadomości jednak nie mam, gdyż wiele osób w sieci skarży się na ten problem, ale nikt nie podaje rozwiązania.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Polskie czcionki

Nowy postprzez sebaskow » Å›roda, 24 października 2012, 20:17

Jutro będę w pracy i sprawdzę mój próbny program.

Zauważyłem jedną zależność, mój program został napisany w C++Buider2009, natomiast podobny program napisałem w C++BuiderXE i wszystko działa tak jak należy. Ten drugi program również korzysta z tej samej bazy danych.

Poniżej kod mojego próbnego programu.

Kod: Zaznacz cały
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString str = "Mój próbny komunikat. \n\n ąćęłńóżź ";

ShowMessage(str);
//MessageBox(Handle, str.c_str(), L"Komunikat ąćęłńóżź", 0);

Memo1->Text = str;
RichEdit1->Text = str;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String str = "Mój próbny komunikat. \n\n ąćęłńóżź ";

ShowMessage(str);
MessageBox(Handle, str.c_str(), L"Komunikat ąćęłńóżź", 0);

Memo1->Text = str;
RichEdit1->Text = str;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
WideString str = "Mój próbny komunikat. \n\n ąćęłńóżź ";

ShowMessage(str);
MessageBox(Handle, str.c_bstr(), L"Komunikat ąćęłńóżź", 0);

Memo1->Text = str;
RichEdit1->Text = str;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
UnicodeString str = "Mój próbny komunikat. \n\n ąćęłńóżź ";

ShowMessage(str);
MessageBox(Handle, str.c_str(), L"Komunikat ąćęłńóżź", 0);

Memo1->Text = str;
RichEdit1->Text = str;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
if(RadioButton1->Checked)
    {
    Form1->Font->Charset =   DEFAULT_CHARSET;
    }
if(RadioButton2->Checked)
    {
    Form1->Font->Charset =   EASTEUROPE_CHARSET;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
if(RadioButton1->Checked)
    {
    Form1->Font->Charset =   DEFAULT_CHARSET;
    }
if(RadioButton2->Checked)
    {
    Form1->Font->Charset =   EASTEUROPE_CHARSET;
    }
}
//---------------------------------------------------------------------------
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Cyfrowy Baron » Å›roda, 24 października 2012, 21:18

Więc to pewnie kwestia zgodności z UnicodeString. Przekompiluj program w nowym środowisku.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Polskie czcionki

Nowy postprzez sebaskow » czwartek, 25 października 2012, 08:01

Pisałem w wersji 2009 ale na wersji XE również był kompilowany. Więc to nie o to chodzi.
Avatar użytkownika
sebaskow
Intelektryk
Intelektryk
 
Posty: 135
Dołączył(a): wtorek, 3 maja 2011, 08:30
Lokalizacja: Katowice
PodziÄ™kowaÅ‚ : 10
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++ Builder XE7
Gadu Gadu: 0
    Windows XPChrome

Re: Polskie czcionki

Nowy postprzez Cyfrowy Baron » czwartek, 25 października 2012, 17:00

sebaskow napisał(a):podobny program napisałem w C++BuiderXE i wszystko działa tak jak należy


Błąd musi więc leżeć gdzieś w samym programie. Sprawdź co inaczej zrobiłeś w tym podobnym programie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 22 gości

cron