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

Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И

еще уточнение: finalization юнита наступает раньше или позже OnDestroy?

48 ответов

89 просмотров

И такая есть? Весело у вас там в лазаре... А зачем она нужна? Была бы это multi-event, подписка, я бы понял. А так...

Ed-Doc Автор вопроса
Arioch The
И такая есть? Весело у вас там в лазаре... А заче...

При чём здесь Лазарь? Я пока на дельфях сижу 😊 Не так что насчёт моего вопроса?

До Inherited можно делать что желаешь, если вопрос был про класс

Ed-Doc Автор вопроса
Arioch The
Проперти юнита не так

А финализейшн? Читал когда-то, но подзабылось...

Ed Doc
А финализейшн? Читал когда-то, но подзабылось...

Ещё раз, в Дельфи НЕТ пропертей у юнитов и твой вопрос просто не имеет смысла

Деструктор виртуален

finalization юнита происходит после уничтожения Application

Hemul GM
finalization юнита происходит после уничтожения Ap...

Ого, это мощный хрустальный шар! Точнее, после "end." :)

Arioch The
Ого, это мощный хрустальный шар! Точнее, после "e...

У девушки взял попользоваться, она ТЗ пишет со слов клиентов

как ты сделаешь так и будет наступать. это напрямую не связанные действия

Ed-Doc Автор вопроса
zamtmn
как ты сделаешь так и будет наступать. это напряму...

у меня в голове немного каша: по букварю, синглтон - объект, который создается в единственном экземпляре (у меня при показе главного окна приложения), и остальные окна (у меня модальные) юзают именно этот экземпляр, пока не умрет главное окно. Вот этот экземпляр автоматически пишет файл с настройками в одном месте (которое было указано при создании этого экземпляра). И проводить какие-либо манипуляции с физическим файлом на диске я не могу, пока экземпляр объекта существует. Поэтому я предположил, что логично дождаться уничтожения этого экземпляра, чтобы переместить файл с настройками в другое место (например). Потому я задался вопросом, где бы это сделать корректно, чтобы можно было проанализировать текущую и желаемую локализацию файла с настройками? Я где-то ошибаюсь?

Ed-Doc Автор вопроса
Alexander Sv
Там где этот синглтон уничтожается.

т.е. в ондейстрой между фри и инхерайтед?

Ed Doc
т.е. в ондейстрой между фри и инхерайтед?

Можно тут. А можно там где вызывается Settings.Free

Ed-Doc Автор вопроса

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

Ed-Doc Автор вопроса
Alexander Sv
Можно тут. А можно там где вызывается Settings.Fre...

вот Петер мне так и ответил https://t.me/Delphi_Lazarus/323666

Ed-Doc Автор вопроса

Оккама против :)

Ed-Doc Автор вопроса

это лишние и ненужные телодвижения, плодить сущности без необходимости. Вся логика сводится к сохранению файла с настройками на время работы программы в одном месте. Даже если я перемещу файл в другое место, то экземпляр TMemIniFile будет писать текущий файл с настройками туда, где он был указан при создании оного экземпляра. Все остальное, имхо, это воскресное словоблудие :)

Ed-Doc Автор вопроса

🤐

Ed-Doc Автор вопроса

вот эту возможность я и преследую, спрашивая то, в чем я не уверен :)

Ed Doc
вот эту возможность я и преследую, спрашивая то, в...

нет, ты ждешь удаления объекта. Я говорю -= не жди, делай в живом объекте. Мы разные 😊

Ed-Doc Автор вопроса
Arioch The
нет, ты ждешь удаления объекта. Я говорю -= не жди...

каг? Пересоздать объект с новыми путями и перезалить туда содержимое текущего?

Ed Doc
каг? Пересоздать объект с новыми путями и перезали...

повторяю: "добавить в синглетон метод "перемести свой файл в другое место" - и пусть твой объект САМ поправит все свои внутренние пути

Ed-Doc Автор вопроса
Arioch The
повторяю: "добавить в синглетон метод "перемести с...

покажи примером, как? тело метода. Хотя бы схематично

Ed Doc
покажи примером, как? тело метода. Хотя бы схемати...

type TMyMemIniFile = class(TMemIniFile) public procedure Rename(const newFileName: TFileName); reintroduce; end; { TMyMemIniFile } procedure TMyMemIniFile.Rename(const newFileName: TFileName); var oldFile: TFileName; begin if AnsiSameText( ExpandFileName(Self.FileName), ExpandFileName(newFileName)) then Exit; // raise error??? oldFile := Self.FileName; try inherited Rename(newFileName, False); UpdateFile; except inherited Rename(oldFile, False); raise; end; SysUtils.DeleteFile(oldFile); end;

Ed Doc
покажи примером, как? тело метода. Хотя бы схемати...

1. закрыть текущий файл и освободить объект MemIni 2. переместить файл в новое место 3. открыть перемещённый файл, создав новый MemIni 4. ??? 5. Profit!

Green
1. закрыть текущий файл и освободить объект MemIni...

не нужно ничего уничтожать, эти объекты не держат файл открытым! но с tinifile другие сложности, там не полный путь к файлу по особым правилам считается. Там вообще путь к файлу может быть пустой строкой

Ed-Doc Автор вопроса
Green
1. закрыть текущий файл и освободить объект MemIni...

Вот как раз я и спрашивал, в каком месте удобнее сделать п.п. 1 и 2 Щас Димин метод попробую

Ed Doc
Вот как раз я и спрашивал, в каком месте удобнее с...

ни в каком! открой исходники TMEmIniFile наконец, они крохотные. Вот я например их сейчас открывал особенно tmeminifile.loadvalues и tmeminifile.updatefile

Ed-Doc Автор вопроса
Arioch The
ни в каком! открой исходники TMEmIniFile наконец,...

Когда-нибудь я с этого буду начинать писать программы. А пока проще спросить здесь 😊

Ed Doc
у меня в голове немного каша: по букварю, синглтон...

У тебя класс сохранялка держит файл чтоли в локе? Впрочем пофиг, даже если держит, при переназначении пути говоришь сохранялке чтобы он отцепился от текущего и свалил все свои данные по новому пути, после чего старый файл просто грохай. Если она такого не умеет, тогда грохаешь сохранялку, создаешь с новым путем, сохраняешь чо надо, грохаешь старый. Все делается в сеттере.

Ed-Doc Автор вопроса
Александр (Rouse_) Багель
У тебя класс сохранялка держит файл чтоли в локе? ...

Не держит, сохранялке поменять путь надо. Дима показал, как.

Ed-Doc Автор вопроса
Arioch The
type TMyMemIniFile = class(TMemIniFile) public...

Блин, у TMemIniFile есть штатный метод Remane, а я наследовался от TCustomIniFile, где это еще не реализовано. Кабы раньше знать 😊

Ed-Doc Автор вопроса
Arioch The
Use the source, Luke

Да ну тебя :) Эту фразу можно всегда писать первой в любом ответе Я тупо взял примеры из справки дельфей, там зачем-то указан предок TMemIniFile

Ed Doc
Да ну тебя :) Эту фразу можно всегда писать первой...

Понятно зачем. Чтобы избежать tight coupling. Консьюмеру должно быть все равно, кого ему дали. Даже если treginifile

Ed Doc
Да ну тебя :) Эту фразу можно всегда писать первой...

Сколько времени ты протрахал на переписывание справки и переписывание с чатегом? Я на запуск дельфы, открытие inifiles и поиск процедур с названиями типа renamе, и потом написанием плюс-минус готового кода потратил 10 минут. Вот и думай, точно ли ты съэкономил время... Так что да, UTSL

Ed-Doc Автор вопроса
Arioch The
Сколько времени ты протрахал на переписывание спра...

Дим, есть вещи, которые для меня новые. Естессно, я всех нюансов не знаю. Я боюсь представить, сколько у тебя времени ушло на то, чтобы получить тот багаж знаний, который есть сейчас :)))

Ed Doc
Дим, есть вещи, которые для меня новые. Естессно, ...

Видишь ли, у меня знаний было ноль. Точнее было знание, что ты хочешь использовать tmeminifile. Всё! Остальное - опыт ковыряния в чужом коде, и быстрого поиска. В гугле, в стековерфлоу, в исходниках, в стандартах, иногда в доках. Дано, док хочет перетащить tmeminifile на другое место, с сохранением данных, и вероятно удалением старого файла. В доки можно не смотреть, хотелка экзотическая, там такого 95% не будет. Что надо? 1. Понять, как именно твой выбранный класс сохраняет данные. 2. Понять, как он вообще знает, куда сохранять. 2.1. ...А для этого понять как он созраняет. Ведь чтобы сохранять он должен узнать куда. 3. Проверить, а вдруг велосипед уже готовый есть Открываем твой избранный класс и идём по списку. Ого, есть готовый rename... ...а нет, он не готовый, он теряет свои данные. А нет, не обязательно теряет. Ок, запомнили в блокнотик, надо вызывать rename(..., false) Так, как же он пишет?... ...ладно,тут я заранее знал про updatefile, потлму что когда-то попадал на не совместимость win98 и winnt. Но если бы не знал - я в просто прочитал код деструктора и нашёл бы его, +1 минута. Всё, больше не нужно ни-чё-го. Садимся и пишем процедурку, которая это все делает

Ed-Doc Автор вопроса

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта