Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

расширить функции TCanvas   Найти похожие ветки 

 
zorik ©   (2006-10-09 17:15) [0]

Заранее извиняюсь за глупый вопрос. Можно ли расширить функции Tcanvas, т.е. написать наследника, и потом использовать эти функции в стандартных визуальных компонентах (TImage, TPaintBox и вывод на печать)?


 
Ketmar ©   (2006-10-09 17:24) [1]

давай скажем, что нет. более того -- зачем?


 
Джо ©   (2006-10-09 17:28) [2]

TCanvas вообще расширять смысла особого нет. У TCanvas Handle:HDC не привязан ни к какому device context"у, так что и рисовать-то на нем нельзя.


 
Джо ©   (2006-10-09 17:29) [3]

Хотя, это еще, конечно, выяснить нужно, что имеется в виду под "расширением".


 
zorik ©   (2006-10-09 17:29) [4]

для построения карт - сплайнов, различных типов линий, и т.д.
Было б удобно если б:
with Image.Canvas do
begin
 Pen.Width := 5;
 Pen.Style := psSyperStyle;
 MoVeTo(0, 0);
 SplineTo(10, 10);
 ...
end;

Но как-то запросто было-б :-(


 
guav ©   (2006-10-09 17:31) [5]

Можно сделать что-то вроде:
type
 TCustomizedCanvas = class(TControlCanvas)
   ...
 end
;

C := TCustomizedCanvas.Create;
C.Control := PaintBox;


Хотя действительно зачем ? Да, TCanvas реализует немонгие возможности GDI, но почему бы для остальных не использовать сами функции GDI с Canvas.Handle в качестве параметра.


 
guav ©   (2006-10-09 17:33) [6]

> У TCanvas Handle:HDC не привязан ни к какому device context"у,
> так что и рисовать-то на нем нельзя.

Сколько рисовал используя TCanvas.Handle , а тут оказывается нельзя... С чего бы это ?


 
Джо ©   (2006-10-09 17:36) [7]

> [6] guav ©   (09.10.06 17:33)
> > У TCanvas Handle:HDC не привязан ни к какому device context"у,
>
> > так что и рисовать-то на нем нельзя.
>
> Сколько рисовал используя TCanvas.Handle , а тут оказывается
> нельзя... С чего бы это ?

С того, что рисовал, вероятно, на наследниках TCanvas, например TBitmapCanvas и TControlCanvas, в которых перекрыт CreateHandle.


 
Джо ©   (2006-10-09 17:41) [8]

> [7] Джо ©   (09.10.06 17:36)

Хм. А Handle-то, оказывается, вовсе не read-only. Тогда я в калоше, выходит :)


 
guav ©   (2006-10-09 17:47) [9]

> [7] Джо ©   (09.10.06 17:36)

Действительно, не обращал внимания, что экземпляры самого TCanvas обычно не создаются.
Однако, у TMetafileCanvas CreateHandle не перекрыт, но рисовать там вполне можно...


 
Ketmar ©   (2006-10-09 18:07) [10]

>[8] Джо(c) 9-Oct-2006, 17:41
>я в калоше, выходит :)
в маленькой. %-)


 
icWasya ©   (2006-10-09 18:10) [11]

Ну по простому можно так

 type
   TSuperCanvas=class(TCanvas)
   constructor Create(Canva:TCanvas);
   destructor Destroy;override;
  procedure DrawSuperPuperLine;
 end;
...

constructor TSuperCanvas.Create(Canva:TCanvas);
begin
 inherited;
 self.Handle:=Canva:Handle;
end;

destructor TSuperCanvas.Destroy;
begin
 Handle:=0;
 inherited;
end;

procedure TSuperCanvas.DrawSuperPuperLine;
begin
Pen.Width := 5;
MoVeTo(0, 0);
LineTo(10, 10);
LineTo(10, 0);
LineTo(10, 20);
...
end;

...

with TSuperCanvas.Create(Image.Canvas) do
try
 DrawSuperPuperLine;
finally
 free;
end;


 
Kolan ©   (2006-10-09 23:21) [12]


> Можно ли расширить функции Tcanvas

Класс помошник?


 
Ketmar ©   (2006-10-09 23:32) [13]

>[12] Kolan(c) 9-Oct-2006, 23:21
>Класс помошник?
типа того. %-)


 
Джо ©   (2006-10-09 23:35) [14]

> [12] Kolan ©   (09.10.06 23:21)
> Класс помошник?

Это ж только в 2-х последних версиях Делфи появилось.


 
Kolan ©   (2006-10-09 23:36) [15]


> Это ж только в 2-х последних версиях Делфи появилось.

Ну дык появилось же :)


 
Zeqfreed ©   (2006-10-09 23:39) [16]

> [14] Джо ©   (09.10.06 23:35)


> Это ж только в 2-х последних версиях Делфи появилось.

Ой а что надо набрать в хелпе чтобы почитать об этом?
P.S. Уже иду набирать Helper class :)


 
Zeqfreed ©   (2006-10-09 23:41) [17]

М-м, нашел Class helpers. Но тогда это получаются помошники классов, а не классы-помошники. :)


 
Kolan ©   (2006-10-09 23:44) [18]


> помошники классов, а не классы-помошники.

Ну они то тоже классы. Значит классы помошники классов выходит.

PS
 Кстати как я понял JavaScript на этом принципе построен?


 
Ketmar ©   (2006-10-10 00:19) [19]

>[18] Kolan(c) 9-Oct-2006, 23:44
> Кстати как я понял JavaScript на этом принципе построен?
могу ошибиться от недосыпу, но, по-моему, у тебя терминологическая путаница.


 
Kolan ©   (2006-10-10 00:27) [20]


> у тебя терминологическая путаница

Вроде не замечал, хотя...в чем она заключается?


 
Ketmar ©   (2006-10-10 00:32) [21]

я же сказал -- могу ошибиться. меня гложат смутные сомнения, но обосновать их я не могу. %-)


 
Kolan ©   (2006-10-10 00:48) [22]

Да Class Helpers не класс, а ТИП так говорится в начале справки.

А в примере, получается что все же класс:
TMyClass = class
     procedure MyProc;
     function  MyFunc: Integer;
  end;
...

type
  TMyClassHelper = class helper for TMyClass
    procedure HelloWorld;
    function MyFunc: Integer;
  end;



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
6-1149207572
Валерий
2006-06-02 04:19
2006.10.29
Ошибка до перехвата исключения


3-1157366093
tytus
2006-09-04 14:34
2006.10.29
помогите с подключением


2-1160559680
Alex_C
2006-10-11 13:41
2006.10.29
Как отловить событие WM_PAINT для компонента формы?


15-1160295530
ArtemESC
2006-10-08 12:18
2006.10.29
C C++


15-1160460352
k2
2006-10-10 10:05
2006.10.29
Хорошая вакансия