Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

расширить функции TCanvas


Страницы:   1 2

zorik ©   (2006-10-09 17:15:00) 

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


Kolan   (2006-10-10 00:48:00) [1]

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

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

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


Ketmar   (2006-10-10 00:32:00) [2]

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


Kolan   (2006-10-10 00:27:00) [3]


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

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


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

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


Kolan   (2006-10-09 23:44:00) [5]


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

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

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


Zeqfreed   (2006-10-09 23:41:00) [6]

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


Zeqfreed   (2006-10-09 23:39:00) [7]

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


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

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


Kolan   (2006-10-09 23:36:00) [8]


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

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


Джо   (2006-10-09 23:35:00) [9]

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

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


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

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


Kolan   (2006-10-09 23:21:00) [11]


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

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


icWasya   (2006-10-09 18:10:00) [12]

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

 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;


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

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


guav   (2006-10-09 17:47:00) [14]

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

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


Джо   (2006-10-09 17:41:00) [15]

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

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


Джо   (2006-10-09 17:36:00) [16]

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

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


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

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

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


guav   (2006-10-09 17:31:00) [18]

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

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


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


zorik   (2006-10-09 17:29:00) [19]

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

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


Джо   (2006-10-09 17:29:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо