169 похожих чатов

Комрады, грызу паттерны, в частности, синглтон, на основе которого сделал

класс-сохраняльщик настроек. Все бы ничего, но смущает необходимость сохранять передаваемые свойства форм в промежуточных пропертях. Есть возможность реализовать это как-то более изящно без ненужных зависимостей (в виде добавления в uses implementation) заинтересованных форм?
public
property SaveFolder: String read FSaveFolder;
property SettingsFile: TCustomIniFile read FSettingsFile;
property SenderObject: TSenderObject read FSenderObject write FSenderObject;
property RadioItemsIndex: Integer read FRadioItemsIndex write FRadioItemsIndex;
property ChkBx1_checked: Boolean read FChkBx1_checked write FChkBx1_checked;

procedure Save(Sender: TObject);
procedure Load(Sender: TObject);
end;

procedure TSettings.Load(Sender: TObject);
begin
if not TObject(Sender).InheritsFrom(TCustomForm) then Exit;

if not Assigned(SettingsFile) then Exit;

with TCustomForm(Sender) do
begin
Top := SettingsFile.ReadInteger(Name, 'Top', Top );
<skiped>
FChkBx1_checked:= SettingsFile.ReadBool(Name, 'ChkBx1_checked', ChkBx1_checked);//Form2
FRadioItemsIndex:= SettingsFile.ReadInteger(Name, 'RadioItemsIndex', RadioItemsIndex);//Form3

case SettingsFile.ReadBool(Name, 'InitMax', WindowState = wsMaximized) of
true : WindowState := wsMaximized;
false: WindowState := wsNormal;
end;
end;
end;

46 ответов

97 просмотров

RTTI/аттрибуты, или интерфейс типа ISetting рассматривал?

Ed-Doc Автор вопроса
Alexey Gavrilov
RTTI/аттрибуты, или интерфейс типа ISetting рассма...

через rrti это как будет выглядеть? типа if TObject(Sender).Equal(Form1) then ... ?

Ты хочешь сделать аналог лазарусовского TIniPropStorage? По хорошему, да, через rtti делать надо

Ed-Doc Автор вопроса
Renat Suleymanov
Ты хочешь сделать аналог лазарусовского TIniPropSt...

лесенки писать не хочется. хотелось по-быстрому :)

Ed Doc
лесенки писать не хочется. хотелось по-быстрому :)

Я, кстати, для быстрого сохранения класс конфига использую готовую функцию JSON стриминг в текст. Если свойства формы, то готовый TIniPropStorage или TJSONPropStorage

Ed Doc
через rrti это как будет выглядеть? типа if TObjec...

Не не не, любой потомок TPersistent для RTTI или вообще любой для интерфейсов.

Ed-Doc Автор вопроса
Renat Suleymanov
Я, кстати, для быстрого сохранения класс конфига и...

в качестве альтернативы можно создавать экземпляр TMemIniFile со своими Lоad/Save на каждой форме, но чо-та как-то совсем не комильфо. Да и утомительно. Понятно, когда компонентом - бросил на форму, заполни и забыл

Ed-Doc Автор вопроса
Alexey Gavrilov
Не не не, любой потомок TPersistent для RTTI или в...

Леш, можешь намекнуть, как это выглядить вживую?

Ed Doc
в качестве альтернативы можно создавать экземпляр ...

СЛушай. А почему не TIniPropStorage тогда? Что за задача?

Ed Doc
Дельфи 😓

Ай, забыл, сорри

Ed Doc
через rrti это как будет выглядеть? типа if TObjec...

Новый RTTI/аттрибуты позволяют фильтровать список свойств и переименовывать ключи, под какими сохраняешь. Со старым RTTI будет похоже на dfm, все подряд.

Ed-Doc Автор вопроса
Alexey Gavrilov
Новый RTTI/аттрибуты позволяют фильтровать список ...

имя, сестра, имя © Показывай код, я - тупой :))))

Ed Doc
Дельфи 😓

Можно подсмотреть в rx, vg, jcl. По старому. Буду у компа, пришлю.

Alexey Gavrilov
Можно подсмотреть в rx, vg, jcl. По старому. Буду ...

https://stackoverflow.com/questions/15702778/how-can-i-set-get-property-value-through-rtti-for-complex-things-like-tstringgri https://delphi-kb.blogspot.com/2008/12/application-settings-article-1.html?m=1 http://digital-flame.ru/2018/01/26/rtti-atributes/

Alexey Gavrilov
https://stackoverflow.com/questions/15702778/how-c...

Это ещё не всё, это тоже с телефона.

Док, не поняла какие свойства форм хочешь сохранять. Можешь подробней?

Ed-Doc Автор вопроса
Катерина Свиридова
Док, не поняла какие свойства форм хочешь сохранят...

Всякие. Состояние чекбоксов, радиокнопок, списков и т.д и т.п.

Ed Doc
Всякие. Состояние чекбоксов, радиокнопок, списков ...

Повторю. Джедаевские компоненты не подходят?

Ed-Doc Автор вопроса
Руслан
Повторю. Джедаевские компоненты не подходят?

Ты представляешь, сколько г@вна надо поставить вместе с пакетами джедаев из-за одного компонента? Имхо, джедаи хороши для поиска идей

Ed Doc
Ты представляешь, сколько г@вна надо поставить вме...

Я думаю будет быстрее чем свое универсальное клепать. А нажать две кнопочки в гетит это не сложно :)

Руслан
Я думаю будет быстрее чем свое универсальное клепа...

Или посмотреть как там сделано и какие модули нужны

А
Или посмотреть как там сделано и какие модули нужн...

В джедах забей... Там столько зависимостей, что проще использовать что есть чем что-то достать...

А
Идею, алгоритм?

Таких компонентов вагон: роси, джедаи, ехлибы. Хочется тратить время на ниочем - вперёд :)

Руслан
Таких компонентов вагон: роси, джедаи, ехлибы. Хоч...

Он сейчас тратит время, чтобы написать алгоритм. Будет ещё один. Джедай. Домашний.

Ed-Doc Автор вопроса
А
Он сейчас тратит время, чтобы написать алгоритм. Б...

Ты пробовал ставить 100500 компонентов на новую среду только для того, чтобы у тебя легаси проект скопировался? Я из десятка сторонних оставил только эхлибы, фибы и ФР. Остальное выпилил безжалостно. В том числе и джедаев

Ed Doc
Ты пробовал ставить 100500 компонентов на новую ср...

Это ты старые проекты ещё со времён д7 тащишь?

А
Зачем ставить?

Аа, в этом смысле) Спасибо, Кэп)

Руслан
Это ты старые проекты ещё со времён д7 тащишь?

Можно я выматерюсь про женщин низкой ответственности?)

Ed Doc
Ты пробовал ставить 100500 компонентов на новую ср...

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

А
Скачать исходники нельзя?

Обычно понимают, что это кэп очевидность. Не хотела обидеть)

Ed Doc
Дим, и ты туда же 🙈

а чо нет, на жедаях наши проекты были с первых версий )

Катерина Свиридова
Обычно понимают, что это кэп очевидность. Не хотел...

Он не хочет тянуть, ставить Руслан предлагает. А подсмотреть и найти вопросы и какой ещё путь Джедая ждёт.. Ну пусть. Свое то лучше..

А
Он не хочет тянуть, ставить Руслан предлагает. А п...

как раз вот компоненты сохранения в жедаях всегда отлично работали. понятно, что своё можно, но зачем если и так всего хватает выше крыши

Ed Doc
Дим, и ты туда же 🙈

Так пока непонятно из за чего не хочешь... Своё напишешь оптимальнее? Или за килобайты борьба?

А
Он не хочет тянуть, ставить Руслан предлагает. А п...

Я перетаскиваю с 7 на 11 и знаю, как легко напороться на непереносимость. Уже плешь всем этим проела))

Ed-Doc Автор вопроса
LONG
Так пока непонятно из за чего не хочешь... Своё на...

Из-за двух функций ставить весь пакет - явный оверхед. Ты же не покупаешь машину, чтобы ездить в булочную за хлебом?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта