Нумерация линий

Тема в разделе "Общие вопросы по С и С++", создана пользователем -, 2 апр 2007.

Статус темы:
Закрыта.
  1. Гость

    Недавно начал изучение C++ Builder и решил сделать текстовой редактор,редактор текста сделал,но вот уже несколько недель бьюсь над тем что бы прикрутить к редактору нумерацию строк, что-то наподобии Front Page, помогите пожалуйста.
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Можно конечно и руками попытаться сделать, но есть растопыренный компонент, который позволяет сделать еще много чего другого. Называется Ossynedit. Если проект делаешь для себя с целью изучения программирования, то лучше его не используй, т.к. это уже почти готовый редактор
     
  3. Гость

    Делаю именно для того что бы понять как это работает, так что нужен хотя бы намек в каком направлении идти, компонент не подходит.
     
  4. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Билдер не знаю - но обычно делают либо в неклиентской области, либо просто сдвигают вывод текста в сторону - и появляется место для номеров.
     
  5. Гость

    Нужна именно автоматическая нумерация строк то есть при открытии есть строка с номером 1, но при нажатии на Enter (переход на следущую строку) появлялась строка с номером 2 и так далее.
     
  6. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    А какая разница? Или твой редактор на стандартном edit\richedit основан? Если так - то не знаю. Я думал ты сам редактор написал для обучения.
     
  7. Гость

    Основан на компоненте RichEdit.Жаль что не знаешь.
     
  8. zubr

    zubr Гость

    1. Берем панель, устанавливаем у нее BorderStyle=bsSingle; BevelOuter=bvNone; BevelInner=bvNone;
    2. На эту панель ложим Memo Align=alLeft; BevelOuter=bvNone; Ширину ставим только под номера.
    3. На панель ложим RichEdit Align=alClient; BevelOuter=bvNone;
    4. В обработчике OnChange RichEdit проверяем количество строк RichEdit1->Lines.Count, если изменились по сравнению с предыдущим значением, делаем апдейт в Memo-устанавливаем новые номера.
     
  9. Гость

    А можно чуть поподробнее с 4 пунктом, если я правильно понял, то надо в обработчике событий написать этот код,но если я его вписываю он выдают ошибку.
     
  10. zubr

    zubr Гость

    Код (Text):
    void TForm1::SetNum()
    {
    if(Memo1->Lines->Count==RichEdit1->Lines->Count)
    return;

    if(Memo1->Lines->Count<RichEdit1->Lines->Count)
    {
    for(int i=Memo1->Lines->Count; i<RichEdit1->Lines->Count; i++)
    {
    Memo1->Lines->Add(IntToStr(i+1));
    };
    }
    else
    if(Memo1->Lines->Count>RichEdit1->Lines->Count)
    {
    for(int i=Memo1->Lines->Count; i!=RichEdit1->Lines->Count; i--)
    Memo1->Lines->Delete(i-1);
    };
    };

    void __fastcall TForm1::RichEdit1Change(TObject *Sender)
    {
    SetNum();
    }
    Да, и сделай Memo1->Enabled=false;
     
  11. Гость

    [C++ Error] Unit1.cpp(18): E2316 'TForm1::SetNum()' is not a member of 'TForm1'
    [C++ Error] Unit1.cpp(40): E2268 Call to undefined function 'SetNum'

    Это ошибка в самой IDE или это у меня руки кривые?
     
  12. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    А ты TForm1::SetNum() объявил?
     
  13. Гость

    Объявить надо там где #include ? или надо что-то в скобках написать?
     
  14. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    В секции private класса TForm1 в *.h файле, например
     
  15. Гость

    Спасибо,буду разбиратся. :(
     
  16. brink

    brink Гость

    2Ворлог: ...тело функции SetNum() скопируй в оброботчик OnChange RichEdit - будет почти тоже самое.

    От меня: если добавить в оброботчик OnKeyUp RichEdit код,

    Код (Text):
    void __fastcall TForm1::RichEdit1KeyUp(TObject *Sender, WORD &Key,
    TShiftState Shift)
    {
    if(Key == VK_RETURN)
    Memo1->Lines->Add(IntToStr(RichEdit1->Lines->Count+1));
    }
    то по нажатию клавиши <Enter>, у тябя будет появляться номер новой строчки.

    удачи.

    Да еще: я бы сделал так:
    Memo Align=alLeft; BevelOuter=bvNone; BorderStyle=bsSingle; BevelKind=bkSoft; BevelInner=bvRaised;
    Color=clGray; Enabled=true;ReadOnly=true; и выбрать цвет для цыфр, например, жолтый:)

    2zubr: интересное решение\M/:(
     
  17. zubr

    zubr Гость

    Код (Text):
    //---------------------------------------------------------------------------

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE-managed Components
    private:    // User declarations
    void SetNum();
    public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
     
  18. Гость

    Спасибо огромноеза помощь! :) все работает просто супер!!!!
     
  19. Гость

    Еще один маленикий вопрос по поводу кода, как сделать что бы прокрутка от RichEdit, прокручивала и поле Memo?
    То есть в Memo нумерация строк в RichEdit'e текст то когда я прокручиваю текст нумерация останавливается и вверх не прокручивается вместе с текстом.
     
Загрузка...
Похожие Темы - Нумерация линий
  1. Zhuk
    Ответов:
    18
    Просмотров:
    1.965
  2. Xalet
    Ответов:
    5
    Просмотров:
    4.240
  3. makaset
    Ответов:
    40
    Просмотров:
    13.686
  4. pastorixx
    Ответов:
    1
    Просмотров:
    2.142
  5. pbnoob
    Ответов:
    2
    Просмотров:
    3.184
Статус темы:
Закрыта.

Поделиться этой страницей