Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизГрафичиские процедуры в отдельном модуле Найти похожие ветки
← →
$Hic0 (2002-08-21 17:53) [0]Добрый день!
Возникла необходимость сделать так что-бы графические процедуры реализованные с помощью класса TCanvas находились в отдельном модуле... например предполагается сделать модуль Domik
в котором будет находиться класс TDom, примерно такой
Type TDom=class(TObject)//(TCanvas)?
private
Procedure Crug(Dot:TPoint,R:Integer,Col:TColor);
Procedure Triangle(Dot1,Dot2,Dot3:TDot,Col:TColor);
Public
Procedure PaintDom(Vizible:boolean);
end;
Писал от балды, так для примера... в общем побелема в том что необходимо обращаться к классу TDom модуля Domik из совершенно различных мест программы (модулей)... Вопрос, наверное глупый, но все-же... как устроить что-бы из вызывающего модуля обращение производилось по типу
var Dom: TDom;
Begin
PaintDom(true);
End;
Т.е. необходимо что-бы методы класса TDom рисовали на ТОЙ форме, из которой их вызывают
Наверное сумбурно объяснил, т.е. в методах не должно быть слов типа TForm.Canvas.LineTo (обратно-таки от балды) :)... воть... сумбурно, но очень надеюсь что кто-нить поможет.
С уважением, Shico
← →
Извращенец (2002-08-21 19:00) [1]организуй переменную integer, в каждом модуле ей присваивай определенное значение, и в модуле Домик в зависимости от значения переменной рисуешь там где надо.
← →
DiamondShark (2002-08-21 19:02) [2]А передавать Canvas как один из параметров уже не модно?
← →
$hiC0 (2002-08-21 20:40) [3]To Извращенец © >> А если у меня 50 холстов на которых надо разные домики нарисовать? :) Каково? :) А если не 50, а 1000? Должна быть универсальность :)
← →
$hiC0 (2002-08-21 20:42) [4]To DiamondShark © >>
Да? :) Т.е. передавать канву той формы на которой собираюсь рисовать во внутренние классы внешнего модуля? Это имелось ввиду? :) А сработает?
Мне кажется... надо что-то делать с TWinControl-ом... мне так кажется, но что именно не знаю... неужели никто не подскажет? :)
← →
$hiC0 (2002-08-22 11:54) [5]так что, никто не знает что-ли?????
← →
Alex4444444444 (2002-08-22 11:59) [6]Просто Canvas передать, и все. Он все про себя знает (в том числе и свою форму). Можно даже так сделать (так будет культурно, т.к. твой класс без канваса ничего не может):
type
TDom = class
private
FCanvas: TCanvas;
...
public
constructor Create(ACanvas: TCanvas);
....
end;
constructor TDom.Create(ACanvas: TCanvas);
begin
inherited;
FCanvas := TCanvas;
end;
← →
Skier (2002-08-22 12:00) [7]>$hiC0
Ну так и передавай канвас формы в PaintDom
PaintDom(Canvas, True); (в чём проблема-то ?)
← →
DiamondShark (2002-08-22 12:14) [8]Странный Вы человек!
"Мне что-то кажется, не знаю даже что".
А попробовать?
← →
$hiC0 (2002-08-22 12:40) [9]Пишу по совету Alex4444444444:
unit domik;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls;
type TDom=class
Private
FCanvas: TCanvas;
procedure Circle(Dot:TPOint;R:Integer);
public
constructor Create(ACanvas: TCanvas);
procedure DrawDom(n:integer);
end;
implementation
constructor TDom.Create(ACanvas: TCanvas);
begin
inherited Create;
FCanvas := TCanvas.Create;
end;
procedure TDom.Circle(Dot:TPOint;R:Integer);
Begin
FCanvas.Ellipse(Dot.x-R,Dot.y-R,Dot.x+R,Dot.y+R);
End;
Procedure TDom.DrawDom(n:integer);
Var i : integer;
Dot : TPoint;
Begin
For i:=1 to n do
Begin
Dot.x:=i;Dot.y:=i;
Circle(Dot,n);
End;
End;
end.
И вызывающий модуль:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, domik,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Dom : TDom;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Dom:=TDom.Create(Canvas);
Dom.DrawDom(4);
end;
end.
В ответ рантайм ошибка (после нажатия пимпы)... щас скажу какая... EInvalidOperation "Canvas does not allow drawing"
По зарез надо, подскажите плиз что у меня на так
← →
Игорь Шевченко (2002-08-22 12:47) [10]Очевидно, руки
← →
$hiC0 (2002-08-22 12:49) [11]Игорь Шевченко © >> ОЧень приятно было это услышать... так любой сказать может.. не спорю, руки у меня далеки от мастерских, но знаете-ли это по меньшей мере не красиво... вместо того что-бы помочь...
← →
Alex4444444444 (2002-08-22 12:51) [12]Интересно. Я, честно говоря, не пробовал, но может на форме и нельзя рисовать? Посмотри в исходниках, какой там у нее канвас.
Если нет, нужно на нее что нибудь положить (типа PaintBox"a) и передавать ЕГО канвас. В любом случае, ето должен быть канвас того контрола, на котором нужно рисовать. (Я обычно рисую на TPanel или TPaintBox.)
← →
Skier (2002-08-22 12:51) [13]>$hiC0
constructor TDom.Create(ACanvas: TCanvas);
begin
inherited Create;
FCanvas := ACanvas;
end;
← →
Извращенец (2002-08-22 12:54) [14]
> $hiC0
Я, как извращенец, могу предложить только извращенские идеи. и чем больше холстов, тем извращеннее способ, тем лучше оправдывается мой ник.
← →
$hiC0 (2002-08-22 12:56) [15]СПАСИБО!!!!!!!!!! Все заработало. Блин точно руки кривые. Алекс, Skier огромное спасибо. Глубокоуважаемый Игорь Шевченко, я от радости даже на Вас не в обиде :)
← →
Ekaterina (2002-08-22 12:56) [16]FCanvas.Ellipse(Dot.x-R,Dot.y-R,Dot.x+R,Dot.y+R); Ошибка здесь(отрицательные числа)
← →
Игорь Шевченко (2002-08-22 13:14) [17]$hiC0 © (22.08.02 12:56)
Вот и славно :-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c