Посоветуйте компонент для хранения текстов.

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Посоветуйте компонент для хранения текстов.

Сообщение alexs » 02.11.2018 11:57:21

Нужен компонент для содержания массива строк (либо StringList-ов) с визуальным редактором именно в виде возможности редактирования массива текстов.
Что-то типа TStrHolder - но только именно их массив. Важен именно визуальный редактор сохраненных текстов в режиме дизайнера.
И доступ к сохранённым текстам желателен по ключу.
Самому лень писать - может что-то уже готовое есть?

Базы не предлагать :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Посоветуйте компонент для хранения текстов.

Сообщение Alex2013 » 03.11.2018 03:40:34

Может я не вник в вопрос... Но извиняюсь , чем SynEdit не катит ? :roll: Там вроде все что нужно есть ...
Сворачиваемые блоки с крутой визуализацией есть , поиск есть, "скрытая древовидность " тоже есть и еще много чего что сразу и не вспомню ... :idea:
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Посоветуйте компонент для хранения текстов.

Сообщение kit » 03.11.2018 09:07:07

Alex2013 писал(а):Может я не вник в вопрос... Но извиняюсь , чем SynEdit не катит ? :roll: Там вроде все что нужно есть ...
Сворачиваемые блоки с крутой визуализацией есть , поиск есть, "скрытая древовидность " тоже есть и еще много чего что сразу и не вспомню ... :idea:

Для SQL-скриптов?
kit
постоялец
 
Сообщения: 156
Зарегистрирован: 29.09.2016 09:39:07

Re: Посоветуйте компонент для хранения текстов.

Сообщение alexs » 03.11.2018 11:17:57

Мне нужен именно не визуальное хранилище.
Проще говоря - есть массив строк (текстов) - порядка 500 элементов, и они добавляются (юнит-тестирование функционала библиотеки)
Сначала эти строки размещал просто в виде констант в текст. Но достаёт форматировать их (переводы строк, апострофы)
В данный момент они в компонентах StrHolder на DataModul-е. Но когда там объектов перевалило за 100 - дата модуль начинает тормозить во время разработки. Да и не совсем удобно всёже.
Вот и возникла идея - компонент, который хранит строки в виде массива (но не StringList), к которому есть нормальный редактор в дизайнере, доступ к элементам массива по имени и по индексу.
Уже начал сам делать, итог работы включу в RxFPC.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Посоветуйте компонент для хранения текстов.

Сообщение Ichthyander » 03.11.2018 11:37:54

Одновременно почти тот же самый запрос на буржуйском форуме http://forum.lazarus-ide.org/index.php/ ... cseen.html
Но топикстартер не Алексей. Думаю стоит подождать, что там будут постить?
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Посоветуйте компонент для хранения текстов.

Сообщение Alex2013 » 03.11.2018 12:54:12

Гм ... "не визуальный элемент с визуальной поддержкой в дизайн тайме" . :shock: .. приди такое мне в голову я бы наверное подумал что-то вроде "Где моя губозакатывальная машинка?" или попытался написать что-то свое "самокатное"... Например простую утилитку для удобного внешнего заполнения ресурсов StrHolder или просто "генератор констант" . :idea:
Понимаю что совет малость "костыльный" но если для работы StrHolder подходит то зачем что-то еще изобретать ? :idea: :idea:
Зы
Тут тоже страдают чем-то похожим ...
http://www.sql.ru/forum/567052-1/kompon ... stringlist
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Посоветуйте компонент для хранения текстов.

Сообщение alexs » 03.11.2018 20:05:44

Может я не достаточно ясно изложил? Мне нужен компонент для хранения массива текстов, не строк. С обязательным удобным заполнением этого массива в дизайнере.
StrHolder - это массив строк.
Вообщем - уже почти сам сделал.
PS
В тереде на SQL.RU обычный флуд, с обязательной демонстрацией некоторых своего остроумия. Нормальная ситуация.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Посоветуйте компонент для хранения текстов.

Сообщение Alex2013 » 04.11.2018 03:21:50

alexs писал(а):Мне нужен компонент для хранения массива текстов, не строк. С обязательным удобным заполнением этого массива в дизайнере.

Ну извини тут помочь действительно не могу...
(и если честно не представляю зачем подобная конструкция может понадобится )
Для подобных вещей я обычно пишу простые утилиты вроде этой .
Изображение
:arrow: viewtopic.php?f=44&t=10608
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: Посоветуйте компонент для хранения текстов.

Сообщение alexs » 04.11.2018 08:55:02

Примерна такой интерфейс ввода и делаю.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Посоветуйте компонент для хранения текстов.

Сообщение iskander » 04.11.2018 11:16:45

Стало любопытно, как по-минимому реализовать то что описал alexs.
В первом приближении в 150 строк уложился:
Код: Выделить всё
unit TextSnippets;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;

type
  TSnippetCollection = class;
  TSnippet = class;

  TTextSnippets = class(TComponent)
  private
    FSnippets: TSnippetCollection;
    procedure SetSnippets(aSnippets: TSnippetCollection);
  public
    constructor Create(aOwner: TComponent); override;
    destructor  Destroy; override;
    function IndexOf(const aTitle: string): Integer;
  published
    property Items: TSnippetCollection read FSnippets write SetSnippets;
  end;

  TSnippetCollection = class(TCollection)
  private
    procedure SetItem(aIndex: Integer; aValue: TSnippet);
    function  GetItem(aIndex: Integer): TSnippet;
  public
    constructor Create;
    property Items[aIndex: Integer]: TSnippet read GetItem write SetItem; default;
  end;

  TSnippet = class(TCollectionItem)
  private
    FList: TStrings;
    FTitle: string;
    procedure SetLines(aValue: TStrings);
  protected
    function  GetDisplayName: string; override;
  public
    constructor Create(aCollection: TCollection); override;
    destructor Destroy; override;
    procedure Assign(aSource: TPersistent); override;
  published
    property  Title: string read FTitle write FTitle;
    property  Lines: TStrings read FList write SetLines;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Misc', [TTextSnippets]);
end;

{ TTextSnippets }

procedure TTextSnippets.SetSnippets(aSnippets: TSnippetCollection);
begin
  FSnippets.Assign(aSnippets);
end;

constructor TTextSnippets.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  FSnippets := TSnippetCollection.Create;
end;

destructor TTextSnippets.Destroy;
begin
  FSnippets.Free;
  inherited;
end;

function TTextSnippets.IndexOf(const aTitle: string): Integer;
var
  I: Integer;
begin
  for I := 0 to Pred(FSnippets.Count) do
    if CompareText(aTitle, FSnippets.Items[I].Title) = 0 then
     exit(I);
  Result := -1;
end;

{ TSnippetCollection }

procedure TSnippetCollection.SetItem(aIndex: Integer; aValue: TSnippet);
begin
  inherited Items[aIndex] := aValue;
end;

function TSnippetCollection.GetItem(aIndex: Integer): TSnippet;
begin
  Result := TSnippet(inherited Items[aIndex]);
end;

constructor TSnippetCollection.Create;
begin
  inherited Create(TSnippet);
end;

{ TSnippet }

procedure TSnippet.SetLines(aValue: TStrings);
begin
  if FList = aValue then
   exit;
  FList.Assign(aValue);
end;

function TSnippet.GetDisplayName: string;
begin
  Result := FTitle;
end;

constructor TSnippet.Create(aCollection: TCollection);
begin
  inherited Create(aCollection);
  FList := TStringList.Create;
  FTitle := 'Untitled';
end;

destructor TSnippet.Destroy;
begin
  FList.Free;
  inherited;
end;

procedure TSnippet.Assign(aSource: TPersistent);
begin
  if aSource is TSnippet then
    begin
      FList.Assign(TSnippet(aSource).FList);
      Title := TSnippet(aSource).Title;
    end
  else
    AssignTo(aSource);
end;

end.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Посоветуйте компонент для хранения текстов.

Сообщение alexs » 04.11.2018 14:45:31

Вот - вот. Именно оно
Только я класс по другому назвал :-)
Тут главное - форму ввода в редакторе добавить.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Посоветуйте компонент для хранения текстов.

Сообщение iskander » 04.11.2018 15:57:47

TTextSnippets эксплуатирует встроенные редакторы.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Посоветуйте компонент для хранения текстов.

Сообщение alexs » 06.11.2018 00:53:40

Готово - можно критиковать :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Посоветуйте компонент для хранения текстов.

Сообщение zoltanleo » 08.11.2018 01:50:55

Посмотрел:
1. TStrHolder
- нет префикса Rx
- по двойному клику создает эвент OnStrHolderChange
- нельзя присвоить значение итема по имени, только через Macros.Items[].Value

2. TRxTextHolder
- с даблкликом не сопоставлен ни эвент, ни редактор

зы. Алексей, чего-то с недавних пор компоненты, кроме компиляции rxtools, еще требуют установки rx-пакета из твоего набора. Однако Лазарь при помощи OPM устанавливает rx-пакет из своего встроенного комплекта. В результате путаница.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

Re: Посоветуйте компонент для хранения текстов.

Сообщение alexs » 08.11.2018 10:46:44

1. Этот компонент ранее был в составе самого лазаря. Совсем недавно его отдали в состав RxFPC. Поэтому я боюсь менять имя - сломается совместимость. Я сам его в своих проектах активно использую - много перепроверять прийдётся.
Соответсвенно - к нему нет никаких дополнительных правок пока.
Будет время - допишем. Хотелки принимаются. Код - тем более.

2. Чтобы подключить редактор - надо пакет установить dcl_rxTools
Я не занимаюсь сейчас сопровождением через OPM. У меня туда на те сервера доступа нет. Да и некогда.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru