Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-3493
CCCatch
2002-08-21 12:03
2002.09.02
КАК округлить число??


1-3420
Vlad2
2002-08-22 06:53
2002.09.02
Использование типа record


14-3583
data
2002-08-05 17:39
2002.09.02
Кто-нибудь смотрел конкурс


7-3635
programmerts
2002-06-20 19:11
2002.09.02
Каким образом можно безболезненно удалить файлы, которые не удаля


1-3422
MikeZ
2002-08-22 16:52
2002.09.02
Как получить список запущеных exe-шников? Не окон, а файлов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский