Страница 2 из 5

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 10.08.2016 22:30:21
Deimos
тогда убираем вотэто за ненужностью


обоснуйте

Добавлено спустя 4 минуты 43 секунды:
Re: Базовый шаблон для создания редактора, с поддержкой вкладок
Не удержался )))


Можно работать с динамическими компонентами, без списка онных и указателя на конкретный? Просветите... Буду только рад

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 10.08.2016 22:40:01
zub
1) Даже если в указателях тут есть какаято необходимость (невижу в упор) - в данной реализации они всеравно длагополучно утекают - надо доводить до ума
2) atab:ttabsheet; - atab тут уже указатель (так устроены классы). и конструкция вида atab: ^ttabsheet; это масло маслятое - указатель на указатель на инстанс

>>Можно работать с динамическими компонентами, без списка онных и указателя на конкретный? Просветите... Буду только рад
разрешаю, можно!))

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 10.08.2016 22:45:22
Deimos
разрешаю, можно!


Зуб - без обид...

Срач с Айрином уже который день...

Много замечаний к моему - есть толковые.... Теоретические

Код давай. Поправь нас... Научимся - исправим..

Модераторам - закройте тему пожалуйста.

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 10.08.2016 22:58:41
zub
>>Зуб - без обид..
Какие обиды)) Ты тоже сильно не напрягайся - твой код реально неправильный

>>Много замечаний к моему - есть толковый.... Теоретические
Обоснованые. Проверь утечки в своей программе. Научить как?

>>Код давай. Поправь нас... Научимся - исправим..
Не надо ждать от меня полного кода. динамическое создание таба должно выглядеть примерно так
Код: Выделить всё
procedure TmForm.create_tab(path,fext:string);
var
   TEMPatab:ttabsheet;//просто класс, не указатель на класс
begin
   mform.BeginFormUpdate;
   //new(TEMPatab);//ненадо так
   TEMPatab:=ttabsheet.Create(pages);
   TEMPatab.PageControl:=pages;
   TEMPatab.Parent:=pages;
   TEMPatab.caption:=extractfilename(path);
   statusbar1.Panels[0].Text:=extractfilepath(path)+extractfilename(path);
   new(aedit);
   aedit^:=tsedit.create(TEMPatab,path);
   aedit^.Parent:=TEMPatab;
  ....

aedit - сам правь. дальнейшие вхождения тоже сам

кроме того, по мне необходимость aedit и atab в описании класса не обоснована (поэтому TEMPatab у меня стал локальной переменной). Если ты так не считаешь - дело твое и непринципиальное, тогда перекинь TEMPatab в класс

>>Модераторам - закройте тему пожалуйста.
Ишь какой. Выложил косячный пример и в кусты?))

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 11.08.2016 00:22:56
скалогрыз
имхо, zub намекает, что
1) вообще .lfm (или часть его) нужно держать как внешний ресусрный файл и подгружать по необходимости.
2) ещё было бы неплохо, цеплять скрипты динамически. При чём pascalscript, а какой-нить lua вешать, опционально
3) или вместо скриптовой реализации компилировать не лету в дин библиотеки.
(этакая альтернатива html+js)
конечно, потом все эти вещи можно будет погружать из сети. Но так или иначе RTTI это наше всё :mrgreen:

ну или хотя бы - убрать всё лишнее из примера

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 11.08.2016 09:18:39
Лекс Айрин
Deimos писал(а):Срач с Айрином уже который день...


Это не срач, пусть и выглядит так.

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 11.08.2016 11:54:27
zub
Срач с Айрином уже который день...

Вы срачей не видели))
Критика это всегда хорошо. я был бы рад если по моей работе ктонить бы также пробежался

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 11.08.2016 12:03:16
Deimos
zub писал(а):Критика это всегда хорошо


Абсолютно согласен. С утечками - мой косяк... Мне и самому далеко не весь код нравится ))) И мой, иногда, в том числе...

С указателями намудрил действительно-лишнего.

Убрал утечки )))

Потом прикинул и таки поменял на экшены...

Ну и код чуть причесал в паре процедур

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 00:35:16
zub
Красота. Но зачем тут указатели?

Сейчас еще меняем
Код: Выделить всё
    aedit: ^Tsedit;
    atab: ^ttabsheet;

на
Код: Выделить всё
    aedit: Tsedit;
    atab: ttabsheet;

трём все строки с new и dispose
поиском и заменой меняем везде aedit^ и atab^ на aedit и atab соответственно

Чудеса - всё работает без указателей - они не нужны для динамического создания классов

Можно работать с динамическими компонентами, без списка онных и указателя на конкретный? Просветите... Буду только рад

Можно и без списков и без указателей.
Списки уже заботливо есть внутри owner`ов, И если своему динамически созданому контролу назначить owner`а - указатель на него сохранится в внутреннем списке дочерних контролов хозяина и будет в дальнейшем убит вместе с хозяином.
Указателем уже является сама классовая переменная.
Код: Выделить всё
procedure TmForm.create_tab(path,fext:string);
var
   TEMPatab:ttabsheet;//TEMPatab по сути это указатель на инстанс класса ttabsheet
...
begin
   TEMPatab:=ttabsheet.Create(pages);//тут в куче создается инстанс ttabsheet, адрес его сохраняется в TEMPatab, муть с new\dispose ненужна
                                                             //также раз указан владелец - указатель на созданый таб сохраняеися внутри pages


Указатели нужны чтобы создавать в куче например рекорды, обжекты, простые массивы. Классы, динмассивы, длинные стринги это уже указатели по своему внутреннему устройству.
Сохранять указатели в списках\переменныч\ещеекакто - в принципе обязательно чтоб работать с созданными данными и потом не забыть уничтожить их. Но в данном случае нам на помощь приходит LCL с своими "механизмами" owner и sender. Если потребуется чтото большее чем убийство контрола вместе с хозяином или "вспоминание" о контроле только при событии от него в виде содержимого sender - TEMPatab придется гдето-както сохранять

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 00:55:38
Deimos
zub писал(а):Красота. Но зачем тут указатели?


Пока я только поправил бяки )))

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 11:18:11
Ichthyander
Кстати, а есть ли возможность, техническая и юридическая, вычленить/форкнуть редактор кода Lazarus в отдельное приложение и уже его развивать по открытой лицензии?

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 20:41:50
Deimos
Ichthyander писал(а):Кстати, а есть ли возможность, техническая и юридическая


Юридическая есть - Lazarus лицензирован под GPL

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 21:05:08
Лекс Айрин
В принципе, и техническая есть... просто открыть как проект и тупо удалить поддержку компилятора и прочего "левого" инструментария... правда, надо найти где именно он расположен.

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 21:05:40
Ichthyander
Deimos писал(а):
Ichthyander писал(а):Кстати, а есть ли возможность, техническая и юридическая


Юридическая есть - Lazarus лицензирован под GPL

Ну под этой лицензией и оставить, проблем нет

Добавлено спустя 7 минут 35 секунд:
Лекс Айрин писал(а):В принципе, и техническая есть... просто открыть как проект и тупо удалить поддержку компилятора и прочего "левого" инструментария... правда, надо найти где именно он расположен.

Да, наверное, в основном техническая. А так неплохо бы отталкиваться от этого функционала. Как бы уже есть к нему некая привычка и расширять мог бы каждый под себя или совместно...

Re: Базовый шаблон для создания редактора, с поддержкой вкла

СообщениеДобавлено: 12.08.2016 21:14:54
Лекс Айрин
Кстати, есть отдельный модуль SourceEditor... можно и попробовать отделить...