Komentarze
Adam Boduch
Zastanawiałeś się kiedyś jak można w RichEdit tworzyć coś w rodzaju komentarzy tak jak w Delphi? Tzn., że jeżeli naciśniesz { to zmieni się kolor i styl czcionki, a jak naciśniesz } to styl i kolor powrócą do poprzedniego. Rozwiązanie jest dość proste, ale niezbyt zgrabne :)
Otóż stworzymy nowy typ danych mogący zawierać tylko
cyfrę 1 ( lewy nawias: { ) lub cyfrę 2 ( prawy nawias: } ).
type
chrBuckle = 1..2;
Teraz w sekcji Interface odpowiednie dane - tzn., zamiast pisać cyfry
oznaczające nawias zastosujemy stałe opisowe:
(*
Stale symbolizuja dwa znaki - { i }
*)
const
chrLeft = 1;
chrRight = 2;
Teraz zmienną wskazującą na nowy typ danych:
var
BUCKLE : chrBuckle; // zmienna moze przyjac wartosc 1 lub 2
Oprogramuj teraz zdarzenie "OnKeyPress" komponentu TRichEdit.
Wygląda to tak:
procedure TMainForm.rchTestKeyPress(Sender: TObject; var Key: Char);
begin
(*
Pobiera numer nacinietego klawisza. Jezeli jest to numer 123 tzn., ze
nacisniety zostal przycisk odpowiadajacy znakowi {
Jezeli 125 to znaczy, ze wpisany zostal symbol }
W zaleznosci jaki znak zostal wcisniety zmienna "BUCKLE" moze
przyjac dwa parametry - cyfre 1 dla znaku { oraz cyfre 2 dla znaku }
Zeby latwiej to bylo zapamietac zastosowalem stake, ktore odpowiadaja
tymze cyfra
*)
case Ord(Key) of
123: BUCKLE := chrLeft;
125: BUCKLE := chrRight;
end;
if BUCKLE = chrLeft then // Jezeli wcisniety jest znak { to....
begin
rchTest.SelAttributes.Color := clActiveCaption; //... zmien kolor czionki...
rchTest.SelAttributes.Style := Font.Style + [fsItalic];//...ustaw pochylenie
end;
end;
Na początek jest sprawdzane jaki klawisz został naciśnięty - jeśli
jest to klawisz { to odpowiednio zmień kolor czcionki w komponencie.
Teraz oprogramuj zdarzenie "OnKeyUp" komponentu TRichEdit:
procedure TMainForm.rchTestKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
(*
Pewnie zastanawiasz sie dlaczego ponizszy kod wpisany zostal w procedurze "OnKeyUp" zamiast "OnKeyPress"? Otoz zdarzenie "OnKeyUp" wystepuje dopiero po puszczeniu klawisza klawiatury i przed dodaniem do RichEdit'a znaku mozna zmienic jeszcze kolor czionki jaki bedzie w nim uzyty.
*)
if BUCKLE = chrRight then
begin
rchTest.SelAttributes.Color := clBlack;
rchTest.SelAttributes.Style := Font.Style - [fsItalic];
end;
end;
Cały kod programu wygląda tak:
(****************************************************************)
(* *)
(* Copyright (c) 2001 by Service for programmers *)
(* Build: 24.03.2001 *)
(* HTTP://WWW.PROGRAMOWANIE.OF.PL *)
(* E - mail: boduch@poland.com *)
(* *)
(****************************************************************)
(*
Program dziala w ten sposob, ze wpisujac w komponencie "RichEdit"
komentarz w stylu Delphi ( { i } ) usyskujemy efekt zastosowania
tychrze komentarzy - tzn., czcionka zmienia kolor i staje sie
pochylona.
*)
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;
type
TMainForm = class(TForm)
rchTest: TRichEdit;
procedure rchTestKeyPress(Sender: TObject; var Key: Char);
procedure rchTestKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
{
Nowy typ danych zawierajacy cyfry jedynie od 1 do 2
}
type
chrBuckle = 1..2;
(*
Stale symbolizuja dwa znaki - { i }
*)
const
chrLeft = 1;
chrRight = 2;
var
MainForm: TMainForm;
BUCKLE : chrBuckle; // zmienna moze przyjac wartosc 1 lub 2
implementation
{$R *.DFM}
procedure TMainForm.rchTestKeyPress(Sender: TObject; var Key: Char);
begin
(*
Pobiera numer nacinietego klawisza. Jezeli jest to numer 123 tzn., ze
nacisniety zostal przycisk odpowiadajacy znakowi {
Jezeli 125 to znaczy, ze wpisany zostal symbol }
W zaleznosci jaki znak zostal wcisniety zmienna "BUCKLE" moze
przyjac dwa parametry - cyfre 1 dla znaku { oraz cyfre 2 dla znaku }
Zeby latwiej to bylo zapamietac zastosowalem stake, ktore odpowiadaja
tymze cyfra
*)
case Ord(Key) of
123: BUCKLE := chrLeft;
125: BUCKLE := chrRight;
end;
if BUCKLE = chrLeft then // Jezeli wcisniety jest znak { to....
begin
rchTest.SelAttributes.Color := clActiveCaption; //... zmien kolor czionki...
rchTest.SelAttributes.Style := Font.Style + [fsItalic];//...ustaw pochylenie
end;
end;
procedure TMainForm.rchTestKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
(*
Pewnie zastanawiasz sie dlaczego ponizszy kod wpisany zostal w procedurze "OnKeyUp" zamiast "OnKeyPress"? Otoz zdarzenie "OnKeyUp" wystepuje dopiero po puszczeniu klawisza klawiatury i przed dodaniem do RichEdit'a znaku
mozna zmienic jeszcze kolor czionki jaki bedzie w nim uzyty.
*)
if BUCKLE = chrRight then
begin
rchTest.SelAttributes.Color := clBlack;
rchTest.SelAttributes.Style := Font.Style - [fsItalic];
end;
end;
end.