System.Windows.Forms + рисование графики.


#1

Если создал проект в использованием модуля System.Windows.Forms , можно ли что-то нарисовать в нём как в GraphWPF - круг, квадрат или что-то такое? Совместно System.Windows.Forms и GraphWPF не “дружат”. Сanvas , как в дельфи тоже нет. Какие есть варианты?


#2
{$reference System.Windows.Forms.dll}
{$reference System.Drawing.dll}
{$apptype windows}

uses System.Windows.Forms;
uses System.Drawing;

begin
  var MainForm := new Form;
  
  MainForm.Paint += (o,e)->
  begin
    var gr := e.Graphics;
    var brush := new SolidBrush(Color.Red);
    gr.FillEllipse(brush, 10,10,50,50);
  end;
  
  Application.Run(MainForm);
end.

Создавать объект типа Graphics можно и без ивента .Paint, но это, обычно, не правильно. Потому что wf это не для игры, с перерисовкой по 60 раз в секунду минимум. А для вывода меню, с текстовыми полями и кнопочками, которое перерисовывается только когда надо.

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


#3

Большое спасибо за ответ!