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

Вниз

Продвинутый PaintTo   Найти похожие ветки 

 
DelphiLexx ©   (2006-08-21 12:27) [0]

У каждого контрола в частности и у формы есть метод PaintTo который позволяет рисовать его содержимое на контекст устройства (Сanvas.handle).
Помогите реализовать метод PaintToEx, которой умел бы реализовывать все функции PaintTo, но с возможностью рисовать всё содержимое контрола даже если часть компонентов на нем размещенные уходят за грань этого контрола (что приводит к появлению ScrollBaro"ов в частности у формы при AutoScroll = true).


 
Ega23 ©   (2006-08-21 12:31) [1]


> У каждого контрола в частности и у формы есть метод PaintTo
> который позволяет рисовать его содержимое на контекст устройства
> (Сanvas.handle).


Врёшь. У TButton - нет.


 
DelphiLexx ©   (2006-08-21 12:35) [2]


> Врёшь. У TButton - нет.

Не столь это важно.
Просьба ко всем не цепляться к мелочам.
Проблема все таже необходим PaintToEx.


 
Ega23 ©   (2006-08-21 12:41) [3]

А что там реализовывать-то? for, Controls, ControlCount, Width, Height, Top, Left.
По-идее этого достаточно.


 
DelphiLexx ©   (2006-08-21 12:50) [4]


> А что там реализовывать-то? for, Controls, ControlCount,
>  Width, Height, Top, Left.
> По-идее этого достаточно.

Привожу пример. Возьмем в качестве контрола TForm у которой свойство AutoScroll = true. Динамически создаем различные контролы и размещаем их на форме. При чем размещаем так, что некоторые из них заходят за грань формы, это приведёт к появлению ScrollBar"ов. Теперь если мы скопируем содержимое формы на Canvas через PaintTo, то контролы которые находятся за границей формы отображены на Canvas не будут. А я бы хотел, чтобы PaintToEx мог это реализовывать.


 
Мефисто   (2006-08-21 12:59) [5]

PaintTo доступен долько начиная с TWinControl усли память не изменяект.
Следовательно все контролы отрисовать не удастя Т.е. для TControl и TGraphicControl подобных. Будешь VCL библиотеку перелапачивать?


 
DelphiLexx ©   (2006-08-21 13:06) [6]


> PaintTo доступен долько начиная с TWinControl усли память
> не изменяект.
> Следовательно все контролы отрисовать не удастя Т.е. для
> TControl и TGraphicControl подобных. Будешь VCL библиотеку
> перелапачивать?

Хорошо я понял. Тогда помогите реализовать PaintToEx хотя бы для формы.


 
Пусик ©   (2006-08-21 13:16) [7]


> DelphiLexx ©   (21.08.06 13:06) [6]


procedure TForm1.FormPaint(Sender: TObject);
begin
 Form2.PaintTo(GetDC(Form1.Handle),0,0);
end;


 
DelphiLexx ©   (2006-08-21 13:17) [8]


> procedure TForm1.FormPaint(Sender: TObject);
> begin
>  Form2.PaintTo(GetDC(Form1.Handle),0,0);
> end;

Твой ответ не помагает от (прочитай [4])


 
Пусик ©   (2006-08-21 13:55) [9]


> DelphiLexx ©   (21.08.06 13:17) [8]
> > procedure TForm1.FormPaint(Sender: TObject);> begin>  Form2.
> PaintTo(GetDC(Form1.Handle),0,0);> end;Твой ответ не помагает
> от (прочитай [4])


Все работает.
Отрисовка идет полностью на видимой части формы только при необходимости.
Тебе что, нужно видеть за краями формы рисунок? Тогда подскажи, как ты ВООБЩЕ там его можешь увидеть?


 
DelphiLexx ©   (2006-08-21 15:22) [10]


> Тебе что, нужно видеть за краями формы рисунок? Тогда подскажи,
>  как ты ВООБЩЕ там его можешь увидеть?

Да нужно! Я сделаю так:
Т.к. PaintToEx будет позвалять скидывать все на Canvas, то скинув все и даже то, что не видно за гранью формы, я затем сохраню Canvas (в качестве Canvas"a буду использовать TMetaFileCanvas) в файл. Размеры картинки должны быть таковы, что все на ней будет видно.


 
Ketmar ©   (2006-08-21 21:22) [11]

> [10] DelphiLexx ©   (21.08.06 15:22)
иеняй размеры формы перед отрисовкой. Винда -- она тупая, она считает, что за границей формы ничего видно быть не может. не обучали её метафизике.


 
Джо ©   (2006-08-21 21:43) [12]

procedure PaintFormToCanvas (AForm: TForm; Canvas: TCanvas);
var
I: Integer;
begin
Canvas.Lock;
try
  AForm.Perform(WM_PAINT,Canvas.Handle,0);

  for I := 0 to AForm.ControlCount-1 do
    if AForm.Controls[I] is TWinControl then
    begin
      with TWinControl(AForm.Controls[I]) do
        if Visible then
          PaintTo(Canvas.Handle,Left,Top);
    end;
finally
  Canvas.Unlock;
end;
end;


Только еще нужно цветом фона залить (рисунок за видимой областью). Дорабатывай :)


 
DelphiLexx ©   (2006-08-22 09:15) [13]


> Только еще нужно цветом фона залить (рисунок за видимой
> областью). Дорабатывай :)

Плюс ко всему у меня мои объекты соединяются линией которую  отрисовываю сам.


 
Ketmar ©   (2006-08-22 10:04) [14]

> [13] DelphiLexx ©   (22.08.06 09:15)
ну так и отрисовывай на здоровье. какая тебе разница, где её рисовать?


 
DelphiLexx ©   (2006-08-22 10:18) [15]


> ну так и отрисовывай на здоровье. какая тебе разница, где
> её рисовать?

Твой код не позволяет этого делать.


 
DprYg ©   (2006-08-22 10:20) [16]


> Ketmar ©    

А где твой код? :)


 
Ketmar ©   (2006-08-22 10:22) [17]

> [15] DelphiLexx ©   (22.08.06 10:18)
логично. в основном потому, что моего кода здесь не было. %-)

[16] DprYg ©   (22.08.06 10:20)
там же, где плата за него. %-)


 
Джо ©   (2006-08-22 11:32) [18]

> [13] DelphiLexx ©   (22.08.06 09:15)
> Плюс ко всему у меня мои объекты соединяются линией которую
> отрисовываю сам.

Разве мой код в [12] мешает отрисовывать линии?



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

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

Наверх




Память: 0.51 MB
Время: 0.04 c
8-1142090760
Endor
2006-03-11 18:26
2006.10.01
OGG, WMA


2-1158044547
nstur
2006-09-12 11:02
2006.10.01
Как убрать программу с панели задач


1-1156256825
Sergio77
2006-08-22 18:27
2006.10.01
из TWebbrowser в Memo


15-1157556687
Евгений Р.
2006-09-06 19:31
2006.10.01
Abstract процедура


3-1154357051
Anton22
2006-07-31 18:44
2006.10.01
mdb доступная в сети