Richedit i formatowanie tekstu PDF Drukuj Email
Wpisał doctor   
Środa, 03. Czerwiec 2009 18:47

Komponent Richedit i formatowanie tekstu

Jednym z popularniejszych projektów zwłaszcza wśród początkujących programistów środowiska C++ Builder jest edytor tekstowy. Napewno każdy zna komponent TMemo, który umożliwia łatwe i sprawne wypisywanie tekstu.Kontrolka TMemo przydaje się więc przy wypisywaniu wszelkich informacji pomocnych operatorowi programu.Jednak wypisywanie większych ilości tekstu w komponencie Memo może być nużące, bo taki tekst jest jednostajny i szybko męczy wzrok.O wiele łatwiej użyć komponentu który pozwala formatować tekst, a przez to można skierować uwagę operatora na poszczególne części dokumentu, np. pogrubiając je lub zaznaczając na czerwono.Tym komponentem jest TRichEdit.

Kontrolka RichEdit należy do komponentów widocznych, znajduje się w zakładce Win32. W pewnych przypadkach możemyw programie używać tylko 1 kontrolki, właśnie RichEdit.Komponent ten posiada właściwość PlanText (domyślnie false), która ustawiona na true powoduje, że RichEdit swoją funkcjonalnością przypomina komponent Memo.Zatem do dzieła.

RichEdit doskonale nadaje się do operacji na sformatowanym tekście zapisanym w dokumentach RTF.Takie dokumenty można tworzyć m.in. programem dołączanym do systemu Windows - wordpad.

Wczytywanie i zapis dokumentów do RichEdit

RichEdit1->Lines->LoadFromFile("dokument.rtf");

RichEdit1->Lines->SaveToFile("dokument.rtf");

 

Jak zapewne każdy wie, przystępując do formatowania dokumentu należy najpierw zaznaczyć interesujący nas fragment.

Wpiszmy więc do RichEdit dowolny tekst poprzez własność Lines. Umieśćmy na formie przycisk oraz Label, na którym będzie się pokazywać zaznaczony tekst.

W zdarzeniu OnClick przycisku  wpiszmy:

String zaznaczenie = RichEdit1->SelText;
Label1->Caption = zaznaczenie;

 

W ten sposób mamy wypisany zaznaczony fragment tekstu.Teraz na tym zaznaczonym fragmencie będziemy przeprowadzać dalsze operacje formatowania.

Aby wyczyścić komponent RichEdit, posłużmy się następującym kodem:

RichEdit1->Clear();

 

Aby sprawdzić ile linii tekstu zawiera dokument, posłużmy się następującym kodem:

int ilelinii = RichEdit1->Lines->Count;

 

Kolorowanie tekstu

Z palety komponentów Dialogs dodajmy do projektu ColorDialog.Dodajmy kolejny przycisk.Kliknięcie tego przycisku spowoduje, że pojawi się okno wyboru koloru, a następnie zaznaczony tekst zostanie napisany czcionką o wybranym kolorze.

if(ColorDialog1->Execute())
{
RichEdit1->SelAttributes->Color = ColorDialog1->Color;
}

 

Wybór czcionki tekstu

Aby zaznaczony fragment był napisany inną czcionką aniżeli cały dokument, posłużymy się następującym kodem:

RichEdit1->SelAttributes->Name = "Georgia";

Można to znacznie uprościć, wypełniając komponent ComboBox listą czcionek zainstalowanych w systemie a następnie obsłużyć zdarzenie OnChange.

 

Zmiana rozmiaru czcionki

Aby wybrany fragment powiększyć lub pomniejszyć, posłużmy się następującym kodem:

RichEdit1->SelAttributes->Size = 24;

W ten sposób zmieniamy wielkość czcionki.

 

Pogrubianie, pochylanie oraz podkreślanie tekstu

W tym miejscu musimy najpierw dobrze przemyśleć całą operację.Załóżmy, że tekst który jest podkreślony chcemy dodatkowo pogrubić. Pogrubienie tekstu nie może jednocześnie spowodować, że wszelkie inne atrybuty tekstu(podkreślenie) zostaną usunięte.Właściwy jest zatem kod:

RichEdit1->SelAttributes->Style = RichEdit1->SelAttributes->Style << fsBold;

który oznacza, że do zaznaczonego fragmentu dokumentu dodajemy atrybut pogrubienia.

Aby usunąć pogrubienie, posłużymy się następującym kodem:

RichEdit1->SelAttributes->Style = RichEdit1->SelAttributes->Style >> fsBold; 

Do obsługi operacji pogrubienia, podkreślenia oraz pochylenia tekstu doskonale nadają się komponenty SpeedButton, które mogą być bistabilne.I tak, wciśnięcie przycisku powoduje pogrubienie tekstu, a jego wyciśnięcie powoduje usunięcie pogrubienia.

Identycznie pochylanie tekstu:

RichEdit1->SelAttributes->Style = RichEdit1->SelAttributes->Style << fsItalic;

oraz podkreślanie:

RichEdit1->SelAttributes->Style = RichEdit1->SelAttributes->Style << fsUnderline; 

 W dokumencie sformatowanym możemy tworzyć także wypunktowane listy.

RichEdit1->Paragraph->Numbering = nsBullet;

Usuwanie wypunktowania odbywa się następująco:

RichEdit1->Paragraph->Numbering = nsNone;

 

Marginesy

W komponencie RichEdit możemy ustalić wartość marginesów lewego, prawego oraz dla 1 akapitu.Odbywa się to następująco:

RichEdit1->Paragraph->LeftIndent = 10;//lewy margines
RichEdit1->Paragraph->RightIndent = 500; //prawy margines

RichEdit1->Paragraph->FirstIndent = 50; //pierwszy akapit

 

Wyrównanie tekstu

W RichEdit możemy tekst przyciągnąć do lewej lub prawej strony dokumentu lub też go wycentrować.

RichEdit1->Paragraph->Alignment = taLeftJustify; //wyrownanie do lewej

RichEdit1->Paragraph->Alignment = taCenter; //wycentrowanie tekstu

RichEdit1->Paragraph->Alignment = taRightJustify;  //wyrownanie do prawej

 

Obsługa schowka

Komponent RichEdit obsługuje schowek systemowy, oznacza to że można stosować mechanizm kopiuj-wklej.Poniżej przykłady:

RichEdit1->CopyToClipboard();  //obsluga schowka - kopiuj

RichEdit1->PasteFromClipboard();  //obsluga schowka - wklej

RichEdit1->CutToClipboard(); //obsluga schowka - wytnij


Cofanie zmian

Podobnie jak w Wordzie, notatniku czy wordpadzie, tu również mamy możliwość obsługi operacji cofnij. Każde wykonanie poniższego kodu spowoduje cofnięcie się w tył o 1zmianę.

RichEdit1->Undo();//operacja Cofnij

 

Sprawdzenie czy zmodyfikowano dokument

Ta opcja często przydaje się żeby sprawdzić czy dokument uległ zmianie od momentu np. jego otwarcia.

Odpowiedni kod należy wstawić do zdarzenia RichEditChange i odczytać zmienną boolowską Modified.

 void __fastcall TForm1::RichEdit1Change(TObject *Sender)
{
if(RichEdit1->Modified)
StatusBar1->SimpleText = "Zmodyfikowano dokument";
}

 

Drukowanie dokumentu

Komponent RichEdit posiada możliwość wydrukowania zawartości na nim umieszczonej.

Odpowiada za to kod:
RichEdit1->Print("Dokument");

gdzie "Dokument" jest nazwą dokumentu umieszczonego w kolejce wydruków.

 

Zaznaczanie całej zawartości dokumentu

Odpowiedzialny jest za to kod:

RichEdit1->SelectAll(); //operacja Zaznacz wszystko

 

Zmiana koloru tła komponentu RichEdit

Domyślnie tło RichEditajest białe, ale nic nie stoi na przeszkodzie aby go zmienić.Pamiętajmy jednak aby równolegle z tym zmienić kolor tekstu na jasny.

RichEdit1->Color = clBlack;

 
Mam nadzieję, że rozjaśniłem Wam jak używać komponentu RichEdit, w końcu posiada on spore możliwości  i warto po niego sięgać.

Komentarze
Dodaj nowy Szukaj
+/-
Napisz komentarz
Nick:
E-mail:
 
Strona www:
Tytuł:
UBBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Proszę wpisać kod antyspamowy widoczny na obrazku.

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

Ostatnia aktualizacja: Czwartek, 31. Grudzień 2009 16:51
 
 

Losowy obraz

b12.jpg

Gościmy

Naszą witrynę przegląda teraz 13 gości 




| | | |