Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.15;
Скачать: CL | DM;

Вниз

Автозавершение строки при введении её в Memo   Найти похожие ветки 

 
download   (2003-09-01 00:05) [0]

Уважаемые мастера, подскажите пожалуйста, как при вводе в Memo тегов HTML сделать так, чтобы они автоматически завершались - то есть, ввожу <BODY>, а </BODY> вводится тут же сам.


 
Song ©   (2003-09-01 08:28) [1]

Руками.


 
pasha_golub ©   (2003-09-01 12:04) [2]

Создай такой вот список

<BODY>=</BODY>
...=...

А потом смотри Song


 
Sfagnum ©   (2003-09-01 12:25) [3]

по моему проще от формировать закрытый тэг от открытого вырезать всё от "<" до ">" или " " в переменную а потом вставить "</" + переменная ">" - преймущества не надо все тэги знать...


 
pasha_golub ©   (2003-09-01 12:50) [4]

2Sfagnum
А вот у некоторых тегов нет завершающих братьев, например <br> + <hr> etc


 
NAlexey ©   (2003-09-01 13:05) [5]

>А вот у некоторых тегов нет завершающих братьев, например <br> + <hr> etc
Ну почемуже, кажись они есть, просто ничего страшного не случится если их не указать...


 
download   (2003-09-02 22:22) [6]

А Вы не могли бы поподробнее про список <BODY>=</BODY>? Что Вы хотите этим сказать? Как это реализовать?


 
Palladin ©   (2003-09-03 08:44) [7]

Может тебе сначала научится составлять более простые алгоритмы?


 
download   (2003-09-03 22:30) [8]

Да более простые я умею, и алгоритм автозавершения я уже вчера написал сам (другим способом), но он прекрасно работает только в обычном Memo, а вот в SynEdit, где он мне нужен, не хочет.

Вот мой алгоритм:

var
Form1: TForm1;
words: TStringList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
words := TStringList.Create;
words.Sorted := true;
words.LoadFromFile("tags.txt");
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
const
chars: set of char = ["A".."Z", "a".."z", "<", "/", ">", """];
var
w: string;
i: integer;
s: string;
full: string;
SelSt: integer;
begin
try
if Key = 13 then begin
Edit1.SelStart := Edit1.SelStart + Edit1.SelLength;
Edit1.SelLength := 0;
Exit;
end;
s := Edit1.Text;
SelSt := Edit1.SelStart;
i := SelSt;
if (length(s) > i) and (s[i+1] in chars) then Exit;
w := "";
while (i >= 1) and (s[i] in chars) do begin
w := s[i] + w;
dec(i);
end;
if length(w) <= 0 then Exit;
words.Find(w, i);
if (i >= 0) and (UpperCase(copy(words[i], 1, length(w))) = UpperCase(w)) then begin
full := words[i];
insert(copy(full, length(w) + 1, length(full)), s, SelSt + 1);
Edit1.Text := s;
Edit1.SelStart := SelSt;
Edit1.SelLength := length(full) - length(w);
end;
except exit;
end;
end;

Придётся мне, видимо, самому писать с нуля (т.е. с TObject) свой редактор, который справится с задачей подсветки и автозавершения тегов. Я думал, дело в том, что в SynEdit нет свойства SelLength, которое используется в этом алгоритме, я написал сам это свойство, оно работает в SynEdit, но алгоритм автозавершения почему-то всё равно не работает.

Вот как я добавил свойство SelLength:

type
THEdit = class(TSynEdit)
private
protected
function GetSelLength: Integer;
procedure SetSelLength(Value: Integer);
public
property SelLength: Integer read GetSelLength write SetSelLength;
published
end;

function THEdit.GetSelLength: Integer;
begin
SendMessage(Handle, EM_GETSEL, SelStart, SelEnd);
Result := SelEnd - SelStart;
end;

procedure THEdit.SetSelLength(Value: Integer);
begin
SendMessage(Handle, EM_GETSEL, SelStart, SelEnd);
SelEnd := SelStart + Value;
SendMessage(Handle, EM_SETSEL, SelStart, SelEnd);
SendMessage(Handle, EM_SCROLLCARET, 0,0);
end;

Ничего не пойму. А вот со списком я не совсем понял. Может, кто-нить объяснит, plzzzz?



Страницы: 1 вся ветка

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
9-48385
Smola
2003-03-08 13:49
2003.09.15
Можно ли увеличить допустимый размер дмф файла


1-48536
Dream
2003-09-02 11:18
2003.09.15
Как проверить есть ли в списке listbox текст указаный в edit ?


1-48641
dmitriyt
2003-09-04 15:53
2003.09.15
PaintBox в ScrollBox


14-48702
DeMoN-777
2003-08-28 14:45
2003.09.15
Проблема с передачей параметров скрипту


1-48545
ZoKr
2003-09-02 05:32
2003.09.15
Excel Copy