Событие TJvAppXMLFileStorage OnGetFileName никогда не выполнялось

В Delphi 10 Seattle с JVCL 3.48 после реализации обработчика событий TJvAppXMLFileStorage OnGetFileName он никогда не выполняется:

procedure TForm1.JvAppXMLFileStorage1GetFileName(Sender:
    TJvCustomAppStorage; var FileName: TFileName);
begin
  // never gets executed!
  CodeSite.Send('JvAppXMLFileStorage1GetFileName', FileName.ToString);
end;

Мне нужно это событие, чтобы установить свойство JvAppXMLFileStorage1.Location с параметром var FileName в зависимости от других настроек.

Итак, как я могу выполнить это событие?


person user1580348    schedule 30.11.2015    source источник
comment
Из того, что я вижу в JvAppStorage.pas, OnGetFileName отправляется только в том случае, если Location установлено в flCustom (см. procedure TJvCustomAppMemoryFileStorage.RecalculateFullFileName;).   -  person Ken White    schedule 02.12.2015
comment
Извините (телефонный звонок) - редактирование приостановлено. RecalculateFullFileName звонит только DoGetFileName в отделение case Location of для flCustom.   -  person Ken White    schedule 02.12.2015
comment
У JEDI нет реальной документации, поэтому вам нужно прочитать исходный код.   -  person David Heffernan    schedule 02.12.2015
comment
@KenWhite Большое спасибо, пожалуйста, создайте ответ, чтобы я мог его принять.   -  person user1580348    schedule 02.12.2015
comment
@DavidHeffernan Это действительно грустно, поскольку JEDI — отличная библиотека с огромным потенциалом. Интересно, почему Embarcadero не поддерживает его (конечно, сохраняя его с открытым исходным кодом). В долгосрочной перспективе это будет прибыль для Embarcadero.   -  person user1580348    schedule 02.12.2015
comment
Почему это было бы выгодно для Emba? Им нужно будет платить больше разработчикам и авторам документов. Увеличат ли они доход? очень сомневаюсь.   -  person David Heffernan    schedule 02.12.2015
comment
@DavidHeffernan В долгосрочной перспективе они увеличат доход. Странно, что сегодня все думают краткосрочно - не знаю почему...   -  person user1580348    schedule 02.12.2015
comment
Зачем им увеличивать доход? Я не понимаю, почему это произойдет. И они должны увеличить его больше, чем стоимость. И люди-джедаи должны согласиться. Возможно, они бы этого не сделали. Скупка большого количества сторонних библиотек, как недавно сделала Emba, и взимание с них более высокой платы, чем раньше, обычно расстраивает сообщество.   -  person David Heffernan    schedule 02.12.2015
comment
@DavidHeffernan Студент видит Delphi с огромной библиотекой JEDI, которая очень хорошо поддерживается и очень хорошо документирована. Вот он и думает: Вау, это круто! Давайте придерживаться этой среды разработки! Позже он покупает Delphi Enterprise, а Embarcadero продает много лицензий Delphi.   -  person user1580348    schedule 02.12.2015
comment
Может быть. Возможно, нет. Я лично не согласен в случае с этой библиотекой, но принцип достаточно здравый. Я не уверен, что JEDI — такая уж замечательная библиотека. Он очень большой и имеет гораздо больше взаимозависимостей, чем желательно. Имейте в виду, что Emba только что купила компоненты Raize, библиотеку, качество и широта которой известна.   -  person David Heffernan    schedule 02.12.2015
comment
Компоненты Raize стоят очень дорого. Студент думает: надо купить еды, нет денег на компоненты Raize. Затем он выбирает другую среду разработки. Затем Embarcadero не продает лицензии студенту, который впоследствии стал успешным разработчиком.   -  person user1580348    schedule 02.12.2015


Ответы (1)


Беглый взгляд на JvAppStorage.pas показывает, что единственное место, где вызывается DoGetFileName (где запускается OnGetFileName, если оно назначено), находится в TJvCustomAppMemoryFileStorage.RecalculateFullFileName. Глядя на этот метод, DoGetFileName вызывается только из ветки case Location of для flCustom.

Похоже, это указывает на то, что событие запускается только в том случае, если оно назначено и Location равно flCustom.

person Ken White    schedule 02.12.2015