Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2019, 13:02   #1
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию XE7 Memo Нумерация строк

Здравствуйте как сделать так что бы строки в мемо слева нумеровались как на видео? https://yadi.sk/i/RCaUkQQpH2fJsw
falsebegin вне форума Ответить с цитированием
Старый 11.10.2019, 15:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, на видео НЕ МЕМО
во-вторых, с Memo можно организовать такое, но будет очень криво, например, через Label сбоку - так
в-третьих, почему бы не взять компоненты, где нумерация уже присутствует изначально? Например, SynEdit
flock-demo.png

Последний раз редактировалось Serge_Bliznykov; 11.10.2019 в 15:57.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2019, 17:02   #3
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

да знаю на видео не memo показал типа примера как должен работать про label знаю но как бы делать так чтобы при прокрутке memo тоже покрутился label?

Последний раз редактировалось falsebegin; 11.10.2019 в 17:06.
falsebegin вне форума Ответить с цитированием
Старый 11.10.2019, 17:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
но как бы делать так чтобы при прокрутке memo тоже покрутился label?
не знаю. наверное, можно, как-то.

но зачем Вы к этому убогому Мемо привязались? Чем Вас SynEdit не устроил?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.10.2019, 18:08   #5
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

synedit компонент отдельный надо установить + тоже глючный
falsebegin вне форума Ответить с цитированием
Старый 11.10.2019, 18:37   #6
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

вот сделал так в место label добавил memo2 но когда добавляется 692618 строки начинает жудко тормозит как можно его исправить? чтобы не тормозило?
и как растянуть автоматически по ширине текста если memo2 прикреплен к левому углу ?

Цитата:
s := '';
n := Memo1.Perform(EM_GETFIRSTVISIBLELIN E, 0, 0);
for i:=n to memo1.lines.count-0 do
s := s + IntToStr(i) + #13#10;
memo2.text := s;
falsebegin вне форума Ответить с цитированием
Старый 11.10.2019, 19:31   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Не мучайтесь берите synedit.

Цитата:
Сообщение от falsebegin Посмотреть сообщение
692618 строки начинает жудко тормозит как можно его исправить?
Написать свой компонент. Либо использовать ListBox в режиме виртуального вывода.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 12.10.2019, 03:31   #8
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

xmmm когда придется ставить synedit

Последний раз редактировалось falsebegin; 12.10.2019 в 04:01.
falsebegin вне форума Ответить с цитированием
Старый 18.10.2019, 10:52   #9
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
xmmm когда придется ставить synedit
Код:
const
  PaddingLeft: integer = 40;
Вот так можно рисовать на Canvas Memo:
Код:
procedure TForm1.DrawLinePosition;
var
  MCanvas: TControlCanvas;
  DrawBounds : TRect;
begin
  FMaxLine := Memo1.Lines.Count;
  MCanvas:= TControlCanvas.Create;
  DrawBounds := ClientRect;
  Try
   MCanvas.Control:= Memo1;
   With MCanvas do
   Begin
    MoveTo ( PaddingLeft, 0 );
    LineTo ( PaddingLeft, ClientHeight );
    TextOut(10,(Memo1.Lines.Count) * TextHeight(IntToStr(Memo1.Lines.Count + 1))  + 1,IntToStr(Memo1.Lines.Count + 1));
   end;
  finally
    MCanvas.Free;
  End;
end;
Вот так можно сделать отступ для курсора в MEMO:
Код:
procedure TForm1.FormResize(Sender: TObject);
var
  Rect: TRect;
begin
  SendMessage(Memo1.Handle, EM_GETRECT, 0, LongInt(@Rect));
  Rect.Left:= PaddingLeft + 5;
  Rect.Top:= 1;
  SendMessage(Memo1.Handle, EM_SETRECT, 0, LongInt(@Rect));
  Memo1.Refresh;
end;
А дальше полет фантазий =)
Пишу много и развернуто

Последний раз редактировалось Heneken87; 18.10.2019 в 11:10.
Heneken87 вне форума Ответить с цитированием
Старый 18.10.2019, 10:56   #10
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
удко тормозит как можно его исправить? чтобы не тормозило?
и как растянуть автоматически по ширине текста если memo
1 - Долго - потому что крутишь огромный цикл. И чем больше Lines.Count тем тормознее.
Быстро будет, если будешь перерисовывать саму канву от видимого Rect(даже если и завернешь тут цикл, он будет маленький, потому что кол-во строк которое нужно перерисовать, ограничено Memo1.Height и TextHeight)
2 - Текст сам "тянется" - переноситься по ширине если стоит вертикальный скролбар.

P:S: Пример выше написан на коленке и он НЕ будет работать именно ТАК, как показано на видео(вниз будет работать сразу, если на OnKeyPress поставить DrawLinePosition, но до того момента, пока строки влезают в видимую область)
пример для понимания, что можно и без полумиллионных циков это организовать. Нет миллионых циклов - значит и работать будет одинаково быстро, что при 100 строках, что при 100 млн строк
Пишу много и развернуто

Последний раз редактировалось Heneken87; 18.10.2019 в 11:14.
Heneken87 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi.Чтение файла в Memo, вычисление, добавление строк в Memo antonio_sk Помощь студентам 0 26.04.2013 18:01
нумерация строк ЦЕРЦЕЯ Microsoft Office Excel 9 02.07.2011 00:35
Нумерация строк в БД grom333 БД в Delphi 3 21.05.2011 18:51
Нумерация строк. QT 4 NikLik Qt и кроссплатформенное программирование С/С++ 2 18.12.2008 22:38
Нумерация строк в Memo Макс84 Компоненты Delphi 10 02.04.2007 17:10