Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Название "Canvas"
Старый 28.02.2009, 11:33   #1
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
Восклицание Как рисовать на Canvas объектов

Привет. Буду краток.
Образно говоря, допустим, есть у меня два модуля unit1 и unit2. В Первом объявлена переменная Form1 типа TForm1=class(TForm), во втором же — некоторый объект A типа TA=class(TObject). У TA есть метод TA.DrawSomething(). На TForm1 есть два рисунка Image1 и Image2 типа TImage.
Теперь вопрос дня: как мне организовать тип TA таким образом, чтоб метод DrawSomething() рисовал на Canvas определенного объекта (который задается, судя по всему, в аргументах метода), будь то форма или изображение?
В чем проблема: как нечто конкретное могу такое рассмотреть:
Код:
procedure TA.DrawSomething(C:TCanvas);
begin
  C.MoveTo(10,10);
  C.LineTo(30,10);
  C.TextOut(50,50,'s');
end;
Это было бы решением, но:
Полотно не может быть передано в качестве аргумента, потому что оно и у TForm (соответственно, TForm1), и у TImage является ReadOnly-Property.

Что посоветуете?

Не следует слишком буквально понимать поговорку "Краткость - сестра таланта".
Ваше название темы ("Canvas") нарушает правила раздела.
На первый раз я его подправил. В следующий раз - просто удалю такую тему.
Рекомендую почитать правила.
Silence is of great value...

Последний раз редактировалось mihali4; 28.02.2009 в 11:46.
Jean-Esther вне форума Ответить с цитированием
Старый 28.02.2009, 12:41   #2
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Не знаю, может я чего-то не понимаю, но у меня проблем не возникло:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TA = class
    procedure DrawSomething(C: TCanvas);
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TA }

procedure TA.DrawSomething(C: TCanvas);
begin
  C.MoveTo(10, 10);
  C.LineTo(20, 20);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  A: TA;
begin
  A := Ta.Create;
  A.DrawSomething(Image1.Canvas);
  A.Free;
end;

end.
Все откомпилировалось и работет.

Вот вариант с двумя модулями. Тоже все работает.
Вложения
Тип файла: rar test 9.rar (209.4 Кб, 16 просмотров)
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось rpy3uH; 28.02.2009 в 12:50.
VVM вне форума Ответить с цитированием
Старый 02.03.2009, 02:57   #3
roach1967
Пользователь
 
Регистрация: 21.02.2009
Сообщений: 28
По умолчанию

Может не в тему, но -
Цитата:
Полотно не может быть передано в качестве аргумента, потому что оно и у TForm (соответственно, TForm1), и у TImage является ReadOnly-Property.
Я сталкивался во многих местах с тем-же, и нарыл, применимо к данному случаю, что если полотно и READONLY, это не значит, что его свойства/методы то-же READONLY, чем постоянно пользуюсь.
В споре рождается истина.
roach1967 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как рисовать текст на чужом окне Crazyman Win Api 5 23.01.2009 00:23
Выделение объектов в Canvas... Roof Общие вопросы Delphi 4 10.08.2008 13:31