Wiem że coś ostatnio moda na te edytory. Ja też pisze edytor. Mam taki problem . Jak napisać, żeby program zamykał automatycznie tagi html, np.: napisze <marquee> to program napisze </marquee>, ale żeby kursor był po środku, czyli między <marquee>,a </marquee>. Poprosił bym o jakiś kodzik. Jak w tym moim edytorze zrobie zamykanie tagów, to wam sie im pochwale, bo myśle że jest ful wypas.
Nie chciałbym Cie dołowac, ale na runku edytorów jest juz pełno i każdy ma coś "specjalnego". Żeby Twój <ort>osiągnoł </ort>jakis sukces to naprawde musiałby byc full wypas.
Co do "kodziku" o który prosisz to jest on zalezny od tego z jakiego komponentu do edycji tekstu korzystasz. Generalnie jest jedna zasada. Sprawdzasz czy Ostatnio wprowadzony znak przeed karetką jest znakiem ">" jesli tak to szukasz w lewo pierwszego wystąpienia znaku "<" i po karetce wstawiasz to co znajduje się miedzy "<" a pierwszą spacją w obrębie znaków "<" i ">". Ot cała filozofia
Wiadomo, żeby program był znany to musi być ful wypas, ale ja to pisze bo jest satysfakcja, że sie napiszesz samemu jakiś program. Pokazałem nauczycielowi to nawet powieział że mu sie podoba.
A edytor mam w synedit, a ten kodzik to napisał byś coś bo nie badzo wiem jak to zrobić
stworz string jakis o nazwie np. opek
i jakis boolean np. o nazwie twojastara
zdarzenie on key down if key = vkkeyscan('<') then begin
twojastara := true;
opek := '';
end;
if key = vkkeyscan('>') then twojastara := false;
if twojastara then begin
if key = vkkeyscan('/') then begin twojastara := false; opek:=''; synedit1.text := synedit1.text + opek +'>' exit; end;
opek := opek+nacisniety+klawisz;
end;
tak na szybko bez sprawdzenia prosto xz glowy na runtime wpisywanie kodu
to mi coś nie chce działać, ale wpadłem na coś takiego:
procedure TForm1.SynEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key='<' then
begin
pos := SynEdit1.CaretX+1;
exit;
end;
if Key='>' then
begin
kon := SynEdit1.CaretX;
Timer1.Enabled := True;
Exit;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
SynEdit1.SelText := '</' + Copy(SynEdit1.Text, pos, kon);
SynEdit1.CaretX := kon+1;
Timer1.Enabled := False;
end;
wszystko działa, jak wpisze <b>
to wyskoczy </b></code>, a kursor po środku, ale jak po środku dopisze jeszcze np.
to powinno być <code><b><u> </u></b></code>, a wyskakuje <code><b><u> </u></b></b>
.
Nie wiem co jest nie tak.