W tym artykule znajdziez informacje na temat wyświetlania tekstu przy pomocy PowerDraw.
Wymaga on używania graficznych czcionek, przez co litery mogą mieć najróżniejsze kształty. Aby przerobić zwykłą czcionkę na PD musimy użyć programu FontRenderer. W nim możemy dodać różne efekty np. cień czy wygładzanie krawędzi. Po zapisaniu naszej czcionki przechodzimy do stworzenia prostego programu, który będzie z niej korzystał. Stworzymy baaaardzo prosty edytor tekstu. Wciskane znaki na klawiaturze będą pojawiać się na ekranie.
Wprowadzimy obsługę klawiszy Enter i Backspace oraz ograniczymy możliwość wyświetlania niektórych znaków.
1. Na początku wstaw na formę komponenty :
1 2 3 4 5 |
Komponent Proponowana nazwa PowerDraw PowerDraw1 PowerFont PowerFont1 |
2. Zaznacz Form1 i w ObjectInspector ustaw :
Width : 800
Height: 600
W ten sposób dostosowaliśmy rozmiar okna do rozmiaru naszego przyszłego pola z tekstem.
3. Inicjacja projektu :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
procedure TForm1.FormCreate(Sender: TObject); var jest : integer; begin //Inicjalizacja PD PowerDraw1.Initialize; //Inicjalizacja trybu graficznego PowerDraw1.InitDevice; //Ścieżka do biblioteki dll PowerDraw PDrawExDLLName := 'System/' + PDrawExDLLName; //Otwarcie czcionki jest := PowerFont1.LoadFromFile('System/TimesRoman.Fnt', D3DFMT_A4R4G4B4); //jeśli nie uda się otworzyć wtedy opuści program if jest<>0 then close; X :=50; //pozycja X okna tekstowego Y :=50; //pozycja Y okna tekstowego XA :=-30; //pozycja X startowa kursora tekstu YA :=0; //pozycja Y startowa kursora tekstu //rozpoczęcie rysowania PowerDraw1.beginScene; //czyścimy ekran na dany kolor PowerDraw1.Clear($00C08000); //rysuje prostokąt, który posłuż jako ramka PowerDraw1.Rectangle(5,5,790,590,clBlue,clWhite,EffectNone); //koniec rysowania PowerDraw1.endScene; end; |
4. Odczyt i wyświetlanie znaków
Odczytywać znaki będziemy w procedurze OnKeyPress Form1. A wygląda ona następująco :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin // sprawdzamy, czy kliknięty znak należy do jakiegoś z w/w przedziałów. // Jeśli tak to przechodzimy dalej If ( key in ['a'..'z'] )or ( key in ['A'..'Z'] )or ( key in ['.' , ',' , ';' , ':', '0'..'9'] )then begin //przesuwamy kursor tekstu o 30 pikseli do przodu inc(XA,30); //jeżeli pozycja kursora będzie na końcu ekranu, //wtedy na zejść niżej i na początek if X+XA > 750 then begin XA := 0; inc(YA,40); end; PowerDraw1.beginScene; //wyświetlanie wpisanego tekstu. Kolor tekstu ustawiłem, aby //był zależny od pozycji X; PowerFont1.TextOut(key,x+xa,y+ya,rgb(255-xa,255,xa),EffectNone); PowerDraw1.endScene; PowerDraw1.Present; end; end; |
5. Obsługa Enter, Space oraz BackSpace
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin //jeśli wybierze BackSpace wtedy usuń ostatnią literę //i przesuń kursor o 30 do tyłu //jeśli kursor jest na początku to wróć do poprzedniej lini If key=VK_BACK then {BACKSPACE} begin If (XA < 0) then begin XA := 680; If YA > 0 then Dec(YA,40); end; PowerDraw1.beginScene; PowerDraw1.FillRect(X+XA,Y+YA,30,40,clWhite,EffectNone); PowerDraw1.endScene; PowerDraw1.Present; Dec(XA,30); end; //jeśli wciśnie Enter, wtedy ma przejść do na początek następnej linii If key=VK_RETURN then {ENTER} begin XA := -30; inc(YA,40); end; //jeśli wciśnie spacje kursor tekstu ma się przesunąć o 30 do przodu. If key=VK_SPACE then {SPACJA} inc(XA,30); end; |
To już koniec. Jeśli czegoś nie rozumiesz zapoznaj się z kodem źródłowym lub pytaj na forum.