![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
расширить функции TCanvas
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]Хотя, это еще, конечно, выяснить нужно, что имеется в виду под "расширением".