AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: Алексей Долматов on August 20, 2019, 00:51:06

Title: Ночной режим для настроек плагина
Post by: Алексей Долматов on August 20, 2019, 00:51:06
В справке SDK for AIMP v4.60, build 2144 последняя новость про билд 2130.
По дате файлов тоже не нашёл сведений по изменениям для билда 2142 и выше.

В связи с этим пару вопросов:
1. Будет ли предоставлен API-запрос для получения ответа (например, 0-авто, 1-ночной вкл, 2-выкл) состояния режима;
2. Будет ли какой-то цвет фона переопределяться, т.е. считаться "прозрачным" или нет, при отсутствии в плагине метки о совместимости с ночным режимом.
Title: Re: Ночной режим для настроек плагина
Post by: Artem on August 20, 2019, 07:12:02
AIMPUI_FORM_PROPID_STYLE

Если плагин построен на apiGUI - он заработает сам, режима совместимости нет.
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 08, 2019, 08:47:15
AIMPUI_FORM_PROPID_STYLE

Если плагин построен на apiGUI - он заработает сам, режима совместимости нет.

Через apiGui можно нарисовать форму для OptionsDialog?
Title: Re: Ночной режим для настроек плагина
Post by: Artem on September 08, 2019, 20:18:54
Через apiGui можно нарисовать форму для OptionsDialog?

Можно "нарисовать" любую форму.
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 08, 2019, 20:27:23
Можно "нарисовать" любую форму.

А можно пример? В демках sdk как всегда ничего интересного.
Title: Re: Ночной режим для настроек плагина
Post by: Artem on September 08, 2019, 20:57:57
А можно пример? В демках sdk как всегда ничего интересного.

Прям такого примера нет, но есть пример как делать диалог настроек: OptionFrameDemo. В нем, главное, нужно обратить внимание на метод:

Code: [Select]
function TAIMPDemoPluginOptionFrame.CreateFrame(ParentWnd: HWND): HWND;
var
  R: Trect;
begin
  FFrame := TfrmOptionFrameDemo.CreateParented(ParentWnd);
  FFrame.OnModified := HandlerModified;
  GetWindowRect(ParentWnd, R);
  OffsetRect(R, -R.Left, -R.Top);
  FFrame.BoundsRect := R;
  FFrame.Visible := True;
  Result := FFrame.Handle;
end;

Вот вместо TfrmOptionFrameDemo.CreateParented(ParentWnd); надо использовать IAIMPServiceUI.CreateForm с указанием OwnerWindow и флага AIMPUI_SERVICE_CREATEFORM_FLAGS_CHILD. Как бы и все.
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 08, 2019, 21:03:01
Вот вместо TfrmOptionFrameDemo.CreateParented(ParentWnd); надо использовать IAIMPServiceUI.CreateForm с указанием OwnerWindow и флага AIMPUI_SERVICE_CREATEFORM_FLAGS_CHILD. Как бы и все.
А handle какой возвращать?
Title: Re: Ночной режим для настроек плагина
Post by: Artem on September 08, 2019, 21:03:34
А handle какой возвращать?

Только что созданной через GUI API формы
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 08, 2019, 21:09:07
Только что созданной через GUI API формы
Ткните пальцем на этот метод, который возвращает handle окна. Нашел только у IAIMPUIWinControl, который создается с помощью <IAIMPServiceUI>.CreateControl.
Title: Re: Ночной режим для настроек плагина
Post by: Artem on September 08, 2019, 21:34:53
IAIMPUIForm наследуется как раз от IAIMPUIWinControl
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 10, 2019, 15:45:46
Artem, можете сказать как Вы цепляете кнопку авторизоваться в Last.fm, через ualClient?
У меня не получается вывести кнопку. Код примерно такой:
Code: [Select]
Форма(BORDERICONS = 0; BORDERSTYLE = NONE)
Категория(Владелец и родитель - Форма; Placement - ualClient(остальные поля 0))
Гроупбокс(В: Форма; Р: Категория; Placement - ualTop; Constraints - Height(min/max) - 110)
Кнопка(В: Форма; Р: Гроупбокс; Placement - ualRight; Constraints 25, 100, 25, 100)
Изображение(В: Форма Р: Гроупбокс; Placement - ualLeft; Constraints - 100, 100, 100, 100)
Изображение отображается нормально, но так и не понял как нормально сделать отступы если Alignment != ualNone ||  ualClient.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=63315.0;attach=58799)
Изображение вскоре скорее всего удалю, но хотелось бы попробовать обернуть в какую-нибудь рамку, чем-нибудь её можно обернуть? Хотел попробовать Bevel, но он не наследуется от WinControl.

И еще кое-что, что похожее на баг. IAIMPImage.LoadFromFile вызывает исключение если файл не найден, а должен же вернуть что-то отличное от S_OK?
Code: [Select]
Вызвано исключение по адресу 0x751D3442 (KernelBase.dll) в AIMP.exe: 0x0EEDFADE (параметры: 0x0118C0FE, 0x06272EA0, 0x00000000, 0x062D0118, 0x062D0118, 0x0019F794, 0x0019F76C).
Title: Re: Ночной режим для настроек плагина
Post by: Artem on September 10, 2019, 20:54:06
У меня не получается вывести кнопку. Код примерно такой:

У меня такой подход работает. Можете показать оригинальный код?

так и не понял как нормально сделать отступы если Alignment != ualNone ||  ualClient.

Через TAIMPUIControlPlacement.AlignmentMargins

Изображение вскоре скорее всего удалю, но хотелось бы попробовать обернуть в какую-нибудь рамку, чем-нибудь её можно обернуть? Хотел попробовать Bevel, но он не наследуется от WinControl.

Можно тем же GroupBox-ом.

И еще кое-что, что похожее на баг. IAIMPImage.LoadFromFile вызывает исключение если файл не найден, а должен же вернуть что-то отличное от S_OK?

Да, возникает исключение EFileNotFound вместо E_FAIL. Поправил.
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 11, 2019, 07:33:47
У меня такой подход работает. Можете показать оригинальный код?
https://gist.github.com/Appendme/75ac81bfaf82a4ee4c86e5c255d63903

Upd. Возможно проблема в bounds.
Если что при таком вызове m_userBox->SetPlacement({ ualTop }); передается пустой объект TAIMPUIControlPlacement с инициализированным полем Alignment, а все остальные поля 0.

https://gist.github.com/Appendme/9ba0fa4f978cca772f4ab9feaf1ead98
Можете объяснить почему при такой разметке кнопка выглядит так:
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=63315.0;attach=58816)
Я же явно указал максимальный и минимальный размер кнопки. Ко всему этому контолы в GBox берут отступы сверху от текста или от полосы?

И если не сложно напишите как её правильно разместить по центру и в правом углу(если слева будет какой-нибудь еще контрол, например Image).
Title: Re: Ночной режим для настроек плагина
Post by: Append on September 14, 2019, 18:29:34
Контолы в GBox берут отступы сверху от текста или от полосы?
Интересует только этот вопрос. И кстати благодарю Вас за отсутствие конструкторов TAIMPUIControlPlacement (https://gist.github.com/Appendme/7500f1bf52e34bf82a49e52e2e15f755), которые есть в апи для делфи.
Title: Re: Ночной режим для настроек плагина
Post by: Artem on September 14, 2019, 22:17:19
Интересует только этот вопрос. И кстати благодарю Вас за отсутствие конструкторов TAIMPUIControlPlacement (https://gist.github.com/Appendme/7500f1bf52e34bf82a49e52e2e15f755), которые есть в апи для делфи.

От текста