Конференция "KOL" » Генерация имен для Action [Delphi, Windows]
 
  • Vga © (30.01.17 18:19) [0]
    Создаем форму, GenerateCtlNames <- true, на нее TKolActionList, создаем экшны... Обращаемся к SomeAction.Name и вылетаем с 216-й ошибкой.
    WTF?
    Изучаем сгенерированный код и видим такую прелесть:
       Result.ActionNew := Result.ActionList.Add( '&New', 'New file', Result.ActionNewExecute );
    //---->
       Result.ActionList.SetName( Result.Form, 'ActionNew' );
    //<----
       Result.ActionNew.LinkMenuItem( Result.MainMenu, 1 );
       Result.ActionNew.LinkToolbarButton( Result.Toolbar, 0 );
       Result.ActionNew.Accelerator := MakeAccelerator(FVIRTKEY or FCONTROL, $4E);

       Result.ActionOpen := Result.ActionList.Add( '&Open...', 'Open file', Result.ActionOpenExecute );
    //---->
       Result.ActionList.SetName( Result.Form, 'ActionOpen' );
    //<----
       Result.ActionOpen.LinkMenuItem( Result.MainMenu, 2 );
       Result.ActionOpen.LinkToolbarButton( Result.Toolbar, 1 );
       Result.ActionOpen.Accelerator := MakeAccelerator(FVIRTKEY or FCONTROL, $4F);


    Явный баг кодогенерации. Версия - 3.23.
    И еще, стоило бы при создании объекта и включенном USE_NAMES в конструкторе базового класса (TObj, вроде) присваивать имени пустую строку или еще какую-нибудь заглушку.
  • PrnZ (12.04.17 04:45) [1]
    Известное дело. Изучаем mck (не помню какой конкретно файл.
    Кажется гдето в SetupLast) - там и имя KOLAction неправильно генерируется (при USE_NAMES) - пишет имя KOLActionList для каждой из KOLAction. Лечится элементарно. Я сам никогда не пользовался  KOLActionList, до недавнего времени, тоже недавно столкнулся. Я обычно юзаю SetName для явного указания, ну и удалил нафиг из mck генерацию имени. Можно также и mck подправить.
  • Vga © (10.06.17 11:20) [2]
    На самом деле, в потрохах MCK я уже покопался и генерацию имен пофиксил. Это по большей части баг-репорт для автора.
 
Конференция "KOL" » Генерация имен для Action [Delphi, Windows]
Есть новые Нет новых   [118243   +30][b:0][p:0.001]