1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

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

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

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

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

    grigsoft Well-Known Member

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

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

    grigsoft Well-Known Member

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

    Репутация:
    0
    Основан на компоненте RichEdit.Жаль что не знаешь.
     
  8. zubr

    zubr Гость

    Репутация:
    0
    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. Гость

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

    zubr Гость

    Репутация:
    0
    Код:
    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. Гость

    Репутация:
    0
    [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

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

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

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

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

    brink Гость

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

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

    Код:
    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 Гость

    Репутация:
    0
    Код:
    //---------------------------------------------------------------------------
    
    #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. Гость

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

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

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