Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];

Вниз

Автозавершение строки при введении её в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
3-48407
Igor Mish
2003-08-26 10:42
2003.09.15
Обновление базы Дом <-> Работа


1-48541
Raper
2003-09-02 11:28
2003.09.15
Как использовать функцию BinToHex, HexToBin


1-48575
Viktor1
2003-09-03 16:52
2003.09.15
Как из файла Word вытащить заголовок?


14-48727
Любознательный
2003-08-26 16:02
2003.09.15
Перенос веток


1-48594
MakNik
2003-09-03 12:11
2003.09.15
FloatToStr





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский