Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > ListBox смотрит вводимый текст в Richeidt


Автор: gafarov 17.9.2008, 10:26
Будет хтмл редактор и выпадающий список как в С++ билдере. предлагающий для ввода похожщий тег.
Положение листбокса уже нашел. бегает за курсором как надо, теперь надо чтобы он начал предлагать теги похожие на вводимые

Автор: mrbrooks 17.9.2008, 10:56
Цитата(gafarov @  17.9.2008,  10:26 Найти цитируемый пост)
ListBox смотрит вводимый текст в Richeidt и откидывает те, что не совпадают. Все кака в Билдере. Пишешь фразу, ЛистБокс появился и начинает кидать подсказки. (ЛистБокс уже появляется, осталось чтобы подсказывал.)
я не знаю как это делать, но начал с того что ищу каждый новый вводимый знак. я не понимаю того. как пользоваться SelLeght и  selText.

Ничего не понял  smile 

Автор: Michrutka 17.9.2008, 11:32
Цитата(gafarov @ 17.9.2008,  10:26)
необходимо сделать выпадающий список тегов. не знаю как находить вводимый в РичЭдит текст и отбирать в ЛистБоксе нужный тег.

подскажите как это делать??

спасибо smile

Имеешь в виду контекстную подсказку??

Автор: gafarov 19.9.2008, 05:59
Да, именно так

Автор: Michrutka 19.9.2008, 10:36
Как вариант - 
используешь свойство CaretPos
Код

RichEdit1->CaretPos.x//индекс символа в строке
RichEdit1->CaretPos.y//индекс строки в которой находится курсор

ну и далее при нажатии клавиши смотришь предыдущий символ в строке ричедита, точнее до пробела, и сравниваешь с твоим массивом тегов и каждый раз формируешь свой лист.

Автор: gafarov 22.9.2008, 07:55
Цитата(Michrutka @ 19.9.2008,  10:36)
Как вариант - 
используешь свойство CaretPos
Код

RichEdit1->CaretPos.x//индекс символа в строке
RichEdit1->CaretPos.y//индекс строки в которой находится курсор

ну и далее при нажатии клавиши смотришь предыдущий символ в строке ричедита, точнее до пробела, и сравниваешь с твоим массивом тегов и каждый раз формируешь свой лист.

Спасибо. примрено так себе и представлял. только вот подробнее раскидать не могу(((

Автор: Michrutka 23.9.2008, 11:35
Пожалуйста)
вот так, если в кратце smile 
собственно останется только некотороые защиты поставить и се smile 

Код

//---------------------------------------------------------------------------
void __fastcall TForm1::RichEdit1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
String MasTag[]={"<table>","<tr>","<href>","<p></p>","<form>","<div>"};//массив тегов
int iCountTag = 6;//число тегов в массиве
int iCol = RichEdit1->CaretPos.x;//индекс позиции курсора в строке
int iRow = RichEdit1->CaretPos.y;//индекс строки в которой находится курсор
if (iCol!=0){
        String CurStr = RichEdit1->Lines->Strings[iRow];
        String CurTag = "";//набираемый тег
        for (int iStr=CurStr.Length();iStr>0;iStr--){
                if (CurStr[iStr]==' '){//до пробела
                        break;
                }
                else{
                        String StrTemp = CurStr[iStr];
                        StrTemp += CurTag;
                        CurTag = StrTemp;
                }
        }
        ListBox1->Clear();
        for (int iCt=1;iCt<=iCountTag;iCt++){
                //сравниваем строки до длины CurTag.Length() без учета
                //регистра, если они одинаковы, то возвращается 0
                int iCompare = AnsiStrLIComp(CurTag.c_str(),MasTag[iCt-1].c_str(),CurTag.Length());   
                if (iCompare==0){
                        ListBox1->Items->Add(MasTag[iCt-1]);
                }
        }
}
}
//---------------------------------------------------------------------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)