AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: wisone on July 20, 2020, 17:56:55

Title: IAIMPEmbeddedVisualization
Post by: wisone on July 20, 2020, 17:56:55
Как правильно работать с DC в методе Draw.
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 20, 2020, 20:47:49
https://docs.microsoft.com/en-us/windows/win32/gdi/device-contexts
Title: Re: IAIMPEmbeddedVisualization
Post by: wisone on July 21, 2020, 15:30:11
Могу рисовать визуал по ДК. Я создал Canvas и менял его Handle на DC. При этом я получил возможность рисовать визуал но если изменить цвет в Pen.Color то в визуале этого не видно
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 21, 2020, 22:08:22
Могу рисовать визуал по ДК. Я создал Canvas и менял его Handle на DC. При этом я получил возможность рисовать визуал но если изменить цвет в Pen.Color то в визуале этого не видно

Покажите ваш код
Title: Re: IAIMPEmbeddedVisualization
Post by: wisone on July 23, 2020, 17:03:07
var Width, Height: Integer;

procedure Draw(DC: HDC; Data: PAIMPVisualData);
var Canvas: TCanvas;
begin
      Canvas := TCnvas.Create;
      Canvas.Handle := DC;
      SetDCPenColor(DC, $00FF00); // не работает
      Canvas.Pen.Color := $00FF00; // не работает
      Canvas.Width := 2; // не работает
      Canvas.Rectangle(0, 0, Width, Height); // работает
      Canvas.TextOut(5, 5, 'Text'); // у меня работает
      Canvas.Free;
end;

// Width = IAIMPEmbeddedVisualization.Initialize.Width
// примерно так и у меня. Пробую изменить цвет в Pen.Color но не работает и рисует только с параметрами по умолчанию
Title: Re: IAIMPEmbeddedVisualization
Post by: Black_AVP on July 23, 2020, 19:13:04
А CreatePen() и SelectObject() разве не надо?
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 23, 2020, 21:38:15
var Width, Height: Integer;

procedure Draw(DC: HDC; Data: PAIMPVisualData);
var Canvas: TCanvas;
begin
      Canvas := TCnvas.Create;
      Canvas.Handle := DC;
      SetDCPenColor(DC, $00FF00); // не работает
      Canvas.Pen.Color := $00FF00; // не работает
      Canvas.Width := 2; // не работает
      Canvas.Rectangle(0, 0, Width, Height); // работает
      Canvas.TextOut(5, 5, 'Text'); // у меня работает
      Canvas.Free;
end;

// Width = IAIMPEmbeddedVisualization.Initialize.Width
// примерно так и у меня. Пробую изменить цвет в Pen.Color но не работает и рисует только с параметрами по умолчанию

Учите матчасть. Назначение цвета Pen / Brush ничего рисует
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 23, 2020, 21:38:30
А CreatePen() и SelectObject() разве не надо?

Это делается само внутри класса TPen
Title: Re: IAIMPEmbeddedVisualization
Post by: wisone on July 24, 2020, 16:15:41
То есть создание TCanvas правильно и надо создать TPen отдельно?
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 24, 2020, 16:34:15
То есть создание TCanvas правильно и надо создать TPen отдельно?

Нет. Пожалуйста, прочитайте какой-нибудь самоучитель по классам дельфи или по работе с графикой в win32 api
Title: Re: IAIMPEmbeddedVisualization
Post by: wisone on July 24, 2020, 18:12:54
А CreatePen() и SelectObject() разве не надо?
Вот это мне помогло. Ну и все равно повторно буду изучать классов win32. Спасибо вам.
Title: Re: IAIMPEmbeddedVisualization
Post by: Black_AVP on July 24, 2020, 21:47:12
Это делается само внутри класса TPen
А разве при работе с DC (не с TCanvas) по-другому можно изменить параметры пера, кисти, шрифта?
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 25, 2020, 11:49:49
А разве при работе с DC (не с TCanvas) по-другому можно изменить параметры пера, кисти, шрифта?

Конечно нет, но автор изначально говорил про TCanvas. Миксовать win32 api и дельфевские классы лучше не стоит - запросто может возникнуть рассинхронизация состояний.
Title: Re: IAIMPEmbeddedVisualization
Post by: wisone on July 27, 2020, 17:39:05
У меня ещё один вопрос возникло не в теме.
Крч как работает метод CreateObject(IID: TGUID; out Obj).
Метод как возвращает объект в Obj. Он же Untyped. Я в своем проекте хочу пользоваться этим методом но не получается. Я новичок в использовании Интерфейсов.
Title: Re: IAIMPEmbeddedVisualization
Post by: Artem on July 27, 2020, 18:24:57
Code: [Select]
var
  ObjectList: IAIMPObjectList;

if Succeded(<Core>.CreateObject(IAIMPObjectList, ObjectList)) then
 ..