Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

расширить функции 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.065 c
2-1160811211
Xtreme
2006-10-14 11:33
2006.10.29
Delphi begin 4


2-1160928707
ZiTrAX
2006-10-15 20:11
2006.10.29
Перехват нажатия клавиш


2-1160722864
проходил мимо решил заглянуть
2006-10-13 11:01
2006.10.29
скопировать файл


2-1160922531
9-11
2006-10-15 18:28
2006.10.29
Запрос


2-1160447676
zlodey
2006-10-10 06:34
2006.10.29
Помогите разобраться





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский