Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > if (Delphi .net) then Canvas := false ???


Автор: Sanjok 5.5.2005, 11:34
Люди, ну неужели невозможно создать .net приложение, чтобы там можно было на форме порисовать?? И компонентов типа PaintBox-a как в VCL в этом дотнете нету, да и вообще чего-нибудь похожего на Canvas smile

Знающие люди, подскажите! Хелп!

Автор: drinkOut 5.5.2005, 20:41
Имхо здесь уже надо копать в сторону .NET'овских классов ибо старые-добрые приёмы с контекстами устройства здесь уже не пройдут... Хотя, может быть в System.ShellAPI ты найдёшь то что тебе надо... smile

Автор: Sanjok 6.5.2005, 03:51
А с System.ShellApi ты ничего не напутал? smile В документации дельфи2005 ничего не нашёл про shellapi, кроме того что в одной статье там ссылались на shellapi.pas, к тому же исходников его у меня нет, только .dcu - и что за функции там есть я не знаю smile

Вопрос остался открытым smile

Автор: SPrograMMer 6.5.2005, 13:20
Цитата(Sanjok @ 5.5.2005, 11:34)
Люди, ну неужели невозможно создать .net приложение, чтобы там можно было на форме порисовать?? И компонентов типа PaintBox-a как в VCL в этом дотнете нету, да и вообще чего-нибудь похожего на Canvas


В .Net канваса действительно нету, но есть GDI+ и событие OnPaint. Вот как например, моно нарисовать эллипс на форме:
Код

protected override void OnPaint(PaintEventArgs pea)
{
  base.OnPaint(pea);
  int x=15;
  int y=15;
  int width=ClientRectangle.Width-30;
  int height=ClientRectangle.Height-30;
  Pen pen=new Pen(ForeColor);
  Rectangle rect=new Rectangle(x,y,width,height);

  pea.Graphics.DrawEllipse(pen,rect);  // собсно рисование
}

Автор: sanjok 7.5.2005, 04:48
Товарищи программисты! Ура! Я разобрался в конце концов! smile

Есть прекрасный класс Graphics (System.Drawing.Graphics). И как написано в документации - Encapsulates a GDI+ drawing surface. А больше мне ничего и не надо smile .

Вот как примерно это работает:

Код

procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
var
  Gr: System.Drawing.Graphics;
  MyBrush: System.Drawing.SolidBrush;
  MyFont: System.Drawing.Font;
begin
  Gr := CreateGraphics;
  MyBrush := System.Drawing.SolidBrush.Create(Color.Black);
  MyFont := System.Drawing.Font.Create('Arial',10);

  Gr.DrawString('Hello, world',MyFont,MyBrush,1,1);
end;


Можно в приципе заменить эти длинные System.Drawing.Graphics - на TGraphics, System.Drawing.SolidBrush - на TBrush, System.Drawing.Font - на TFont ---- получится как говорится VCL-like.

В общем всем спасибо, тема исчерпана smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)