Niestandartowy znak

dział ogólny

Re: Niestandartowy znak

Nowy postprzez Witold » sobota, 6 wrzeÅ›nia 2008, 09:37

Michal-S2 napisał(a):Dzięki :D To jest właśnie to o co mi chodziło. Ale czy mógłbyś mi jeszcze wytłumaczyć(bo przecież nie chodzi o to żeby tylko bezmyślnie przepisywać z forum) co oznaczają poszczególne wyrazy w:
char opor20[] = "{\\rtf1\\ansi\\ansicpg1250\\deff0\\deflang1045{\\fonttbl"
"{\\f0\\fswiss\\fprq2\\fcharset238{\\*\\fname Arial;}Arial CE;}}\n"
"\\viewkind4\\uc1\\pard\\f0\\fs20 Op\\'f3r: 20 \\u937?\n\\par }";
?


Te kod jest na podstawie tego co zapisał WordPad. Słabo znam temat, kiedyś przeglądałem specyfikacje i zapamiętałem że RTF obsługuje unicode w swoich tagach.
http://msdn.microsoft.com/en-us/library/aa140277.aspx
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez Cyfrowy Baron » sobota, 6 wrzeÅ›nia 2008, 09:47

Przerabiając kod podany przez Witold'a można z powodzeniem wstawiać znaki unicode do Label. Trzeba tylko z góry ustalić wymiary komponentu Label, gdyż w tym konkretnym przypadku właściwość AutoSize nie zadziała, poza tym komponent nie może zawierać żadnego tekstu we właściwości Caption, gdyż nie będzie ona wykorzystywana i wprowadzony tekst z poziomu kodu może się nakładać na już tam będący:

Kod: Zaznacz cały
#include <stdio.h>

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int liczba = 90;
  int znak = 0x03A9; // numer znaku można odczytać z programu Tablica znaków

  wchar_t bufor[256];
  int dl = swprintf(bufor, (WideString)"Opór: %d %c", liczba,  znak);


  TextOutW(Label1->Canvas->Handle, 2, 2, bufor, dl);
}
//---------------------------------------------------------------------------


Tak wstawiony tekst wymaga jednak odświeżania, gdyż jest to w zasadzie rysunek, wiec jeżeli Label zostanie przesłonięty jakimś oknem to tekst zostanie wymazany. Rozwiązaniem może być umieszczenie całego kodu w zdarzeniu OnPaint formularza. Pojawia się problem z wprowadzanymi wartościami bo mogą się zmieniać, w takiej sytuacji można zmienne liczba i znak zadeklarować jako globalne, raz ustawione wartości takich zmiennych nie zmienią się bez ingerencji użytkownika:

Kod: Zaznacz cały
int liczba = 0;
int znak = 0;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  liczba = 90;
  znak = 0x03A9;

  this->Invalidate(); // odÅ›wieżenie Canvas formularza
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
  Label1->Canvas->Brush->Style = bsClear;
  Label1->Canvas->Font->Size = 12;
  Label1->Canvas->Font->Name = "Tahoma";

  if(znak != 0)
  {
   wchar_t bufor[256];
   int dl = swprintf(bufor, (WideString)"Opór: %d %c", liczba,  znak);


   TextOutW(Label1->Canvas->Handle, 2, 2, bufor, dl);
  }
}
//---------------------------------------------------------------------------
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
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez kinio » sobota, 6 wrzeÅ›nia 2008, 21:47

Cześć!

Chciałbym się z wami podzielić tym malutkim komponentem, który właśnie napisałem przy okazji tego tematu. Mam nadzieje że się wam przyda :!:
Jest to udoskonalony komponent TLabel, który może wyświetlać formatowany tekst (nie Unicode). Formatowanie jest możliwe dzięki specjalnemu znacznikowi, który posiada kilka parametrów.

W archiwum przesyłam pliki komponentu. Od razu mówię że nigdy nie wysyłałem tworzonych przeze mnie komponentów i nie wiem jak będzie z instalacją, czy to wystarczy co zamieściłem, w razie braku plików proszę Cię CB byś podał mi dokładnie co mam jeszcze zamieścić. Dodatkowo w archiwum dołączyłem programik przykładowy, pokazujący składnię i możliwości komponentu.

Jeszcze teraz pokrótce omówię podstawowe kwestie:
Jak już pisałem jest to udoskonalony komponent TLabel. Posiada on kilka nowych własności:
- RTFCaption - (to samo co Caption) jedno i drugie mogą być używane naprzemiennie do przypisania tekstu (wraz ze znacznikami formatowania) który ma zostać wyświetlony na komponencie.
- DefaultLeftMargin - definiuje odstęp pomiędzy sąsiadującymi formatowaniami z lewej strony.
- DefaultRightMargin - definiuje odstęp pomiędzy sąsiadującymi formatowaniami z prawej strony.
- PlainText - właściwość tylko do odczytu zwracająca czysty tekst bez tagów formatujących.

Do formatowania tekstu używamy pary tagów: <f></f>:
Tag <f> może przyjąć następujące parametry:
- n - nazwa czcionki np. <f n="Arial">
- s - rozmiar czcionki np. <f s="12">
- c - kolor czcionki podany jako liczba dziesiętna lub szesnastkowa np. <f c="255">, <f c="0xFF0000">
- b - włącza (true)/wyłącza (false) czcionkę pogrugioną np. <f b="true">, <f b="false">. Inne wartości niż "true" i "false" nie są parsowane, dotyczy to również innych parametrów.
- i - włącza (true)/wyłącza (false) czcionkę pochyłą np. <f i="true">, <f i="false">.
- u - włącza (true)/wyłącza (false) podkreślenie czcionki np. <f u="true">, <f u="false">.
- o - włącza (true)/wyłącza (false) przekreślenie czcionki np. <f u="true">, <f u="false">.
- lm - definiuje odstęp od formatowania na lewo od bieżącego np. <f lm="10">.
- lm - definiuje odstęp od formatowania na prawo od bieżącego np. <f rm="10">.

- Oczywiście parametry można łączyć ze sobą: <f n="Arial" c="255" b="true">
- Tag zamykający </f> nie jest obowiązkowy - formatowanie będzie zastosowane do końca tekstu.
- Tag otwierający, oraz zamykający mogą się znajdować tylko na tym samym poziomie zagnieżdżenia (to chyba oczywiste).
- Formatowanie kaskadowe:
Kod: Zaznacz cały
Zapis: Tekst normalny<f b="true"> i pogrubiony<f b="false"> i znowu normalny </f>i znowu pogrubiony.

będzie przedstawiony jako: Tekst normalny i pogrubiony i znowu normalny i znowu pogrubiony.

Resztę proponuję protestować. Jestem otwarty na pytania, sugestię no i oczywiście jeżeli zauważycie jakieś niedociągnięcia. W miarę możliwości postaram się odpowiedzieć/poprawić.

Pozdr!
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
If a machine is expected to be infallible, it cannot also be intelligent.
-- A.Turing
Avatar użytkownika
kinio
Homos antropiczny
Homos antropiczny
 
Posty: 67
Dołączył(a): poniedziałek, 14 lipca 2008, 08:51
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez Michal-S2 » niedziela, 7 wrzeÅ›nia 2008, 08:53

Nie mogę zainstalować tego komponentu.
Najgorsze nieszczęścia w historii były spowodowane przez idealistów próbujących zmuszać ludzi do tego, "co dla nich dobre"
Bjarne Stroustrup - twórca c++
Avatar użytkownika
Michal-S2
Intelektryk
Intelektryk
 
Posty: 148
Dołączył(a): sobota, 19 lipca 2008, 13:03
Lokalizacja: Gdańsk
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 1
System operacyjny: Windows 7 Professional OEM 64bit
Kompilator: Turbo C++ Explorer
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez wargo » niedziela, 7 wrzeÅ›nia 2008, 09:16

Dlaczego?
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez kinio » niedziela, 7 wrzeÅ›nia 2008, 09:24

Cześć!
Nie mogę zainstalować tego komponentu.

A możesz podać więcej szczegółów?

Na wszelki wypadek przedstawiÄ™ jak ja go instalujÄ™ na BCB 6.0 Enterprise Edition:

1. Po uruchomieniu BCB File->Close All.
2. Następnie wybieramy polecenie: Component->Install Packages. Pojawia się dialog z zakładką Packages.
3. W tym okienku klikamy przycisk Add i znajdujemy plik bpl, który wypakowujemy z archiwum.
4. Po rejestracji komponentu powinien się on pojawić na zakładce Additional pewnie na końcu. Ikonę ma taką samą jak komponent TLabel.
5. Teraz kiedy jeszcze wszystko jest zamknięte wybieramy: Project->Options i przechodzimy na zakładkę Directories/Conditionals i do Library Path dodajemy lokalizację w której znajduje się drugi plik wypakowany z archiwum: lib.

Uwaga!
Ścieżkę lepiej jest dodać dla default.bpr tak aby przy każdorazowym tworzeniu nowego projektu który będzie wykorzystywał ten komponent nie trzeba było dodawać lokalizacji lib na nowo.

Mam nadzieje że to wystarczy, jeżeli dalej się nie da to podaj więcej szczegółów.

Pozdr!
If a machine is expected to be infallible, it cannot also be intelligent.
-- A.Turing
Avatar użytkownika
kinio
Homos antropiczny
Homos antropiczny
 
Posty: 67
Dołączył(a): poniedziałek, 14 lipca 2008, 08:51
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez Witold » niedziela, 7 wrzeÅ›nia 2008, 10:17

Kinio: BCB6 chce "RTFLabel.h" oraz "kinio.bpi". Źródeł nie zdradzisz ? ;)


Cyfrowy Baronie: czemu użyłeś:

Kod: Zaznacz cały
int dl = swprintf(bufor, (WideString)"Opór: %d %c", liczba,  znak);

// zamiat:

int dl = swprintf(bufor, L"Opór: %d %c", liczba,  znak);

// dla

int swprintf(wchar_t *buffer, const wchar_t *format[, argument, ...]);

Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez Cyfrowy Baron » niedziela, 7 wrzeÅ›nia 2008, 13:04

Pytasz dlaczego użyłem WideString zamiast L? Dlatego, że tak można. WideString jest zmienną 16 bitową zdolną do przechowywania znaków Uniode. Użyłem polimorfizmu, gdyż często tak robię i jest to dla mnie bardziej czytelne.

do kinio:

Sam plik *.BPL to za mało żeby zainstalować komponent. Poza tym jeżeli stworzyłeś swój komponent w BCB 6, to w nowszych wersjach BCB można go zainstalować tylko poprzez utworzenie nowej paczki.
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
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez kinio » poniedziaÅ‚ek, 8 wrzeÅ›nia 2008, 17:36

Witam!!!

BCB6 chce "RTFLabel.h" oraz "kinio.bpi". Źródeł nie zdradzisz ?


A więc dołączam nowe archiwum ze wszystkimi plikami.
Źródełka nie podam, po pierwsze ze względu na plagiaty a po drugie że zawsze znajdzie się jakiś specjalista któremu coś nie będzie pasowało i będzie poprawiał i chwalił się czego to on nie zaprogramował - szczególnie że ta kontrolka jest napisana na szybko i pewnie ma trochę bug-ów a poprawki mimo udostępnionego kodu spadły by tak czy tak na mnie.
Wolę sobie tego zaoszczędzić przede wszystkim ze względu na brak czasu (praca).

Takiego komponentu jeszcze nie widziałem, być może gdzieś tam jest, ale jako że owego nie posiadam napisałem jakiś prototyp który być może do czegoś, komuś się przyda!!

Dla tych co używają nowszych wersji BCB postaram się w najbliższym czasie, bliżej nie określonym, stworzyć dll-a z którego będzie można sobie zaimportować klasę.

Pozdr!
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
If a machine is expected to be infallible, it cannot also be intelligent.
-- A.Turing
Avatar użytkownika
kinio
Homos antropiczny
Homos antropiczny
 
Posty: 67
Dołączył(a): poniedziałek, 14 lipca 2008, 08:51
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Niestandartowy znak

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 8 wrzeÅ›nia 2008, 20:57

Takiego komponentu jeszcze nie widziałem, być może gdzieś tam jest, ale jako że owego nie posiadam napisałem jakiś prototyp który być może do czegoś, komuś się przyda!!


Podobny komponent (Label obsługujący tagi HTML) z większymi możliwościami, dla Delphi i BCB w wersji od 3 do BDS 2007 plus kilkadziesiąt innych można znaleźć w darmowej paczce LMD 2007.

Do pobrania stÄ…d: http://www.lmd.de/download/
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
    NieznanyNieznana

Poprzednia 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 2 gości