![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Продвинутый PaintTo
DelphiLexx © (2006-08-21 12:27:00)У каждого контрола в частности и у формы есть метод PaintTo который позволяет рисовать его содержимое на контекст устройства (Сanvas.handle).
Помогите реализовать метод PaintToEx, которой умел бы реализовывать все функции PaintTo, но с возможностью рисовать всё содержимое контрола даже если часть компонентов на нем размещенные уходят за грань этого контрола (что приводит к появлению ScrollBaro'ов в частности у формы при AutoScroll = true).
Джо (2006-08-22 11:32:00) [1]> [13] DelphiLexx © (22.08.06 09:15)
> Плюс ко всему у меня мои объекты соединяются линией которую
> отрисовываю сам.
Разве мой код в [12] мешает отрисовывать линии?
Ketmar (2006-08-22 10:22:00) [2]> [15] DelphiLexx © (22.08.06 10:18)
логично. в основном потому, что моего кода здесь не было. %-)
[16] DprYg © (22.08.06 10:20)
там же, где плата за него. %-)
DprYg (2006-08-22 10:20:00) [3]
> Ketmar ©
А где твой код? :)
DelphiLexx (2006-08-22 10:18:00) [4]
> ну так и отрисовывай на здоровье. какая тебе разница, где
> её рисовать?
Твой код не позволяет этого делать.
Ketmar (2006-08-22 10:04:00) [5]> [13] DelphiLexx © (22.08.06 09:15)
ну так и отрисовывай на здоровье. какая тебе разница, где её рисовать?
DelphiLexx (2006-08-22 09:15:00) [6]
> Только еще нужно цветом фона залить (рисунок за видимой
> областью). Дорабатывай :)
Плюс ко всему у меня мои объекты соединяются линией которую отрисовываю сам.
Джо (2006-08-21 21:43:00) [7]
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;
Только еще нужно цветом фона залить (рисунок за видимой областью). Дорабатывай :)
Ketmar (2006-08-21 21:22:00) [8]> [10] DelphiLexx © (21.08.06 15:22)
иеняй размеры формы перед отрисовкой. Винда -- она тупая, она считает, что за границей формы ничего видно быть не может. не обучали её метафизике.
DelphiLexx (2006-08-21 15:22:00) [9]
> Тебе что, нужно видеть за краями формы рисунок? Тогда подскажи,
> как ты ВООБЩЕ там его можешь увидеть?
Да нужно! Я сделаю так:
Т.к. PaintToEx будет позвалять скидывать все на Canvas, то скинув все и даже то, что не видно за гранью формы, я затем сохраню Canvas (в качестве Canvas'a буду использовать TMetaFileCanvas) в файл. Размеры картинки должны быть таковы, что все на ней будет видно.
Пусик (2006-08-21 13:55:00) [10]
> 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 13:17:00) [11]
> procedure TForm1.FormPaint(Sender: TObject);
> begin
> Form2.PaintTo(GetDC(Form1.Handle),0,0);
> end;
Твой ответ не помагает от (прочитай [4])
Пусик (2006-08-21 13:16:00) [12]
> 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:06:00) [13]
> PaintTo доступен долько начиная с TWinControl усли память
> не изменяект.
> Следовательно все контролы отрисовать не удастя Т.е. для
> TControl и TGraphicControl подобных. Будешь VCL библиотеку
> перелапачивать?
Хорошо я понял. Тогда помогите реализовать PaintToEx хотя бы для формы.
Мефисто (2006-08-21 12:59:00) [14]PaintTo доступен долько начиная с TWinControl усли память не изменяект.
Следовательно все контролы отрисовать не удастя Т.е. для TControl и TGraphicControl подобных. Будешь VCL библиотеку перелапачивать?
DelphiLexx (2006-08-21 12:50:00) [15]
> А что там реализовывать-то? for, Controls, ControlCount,
> Width, Height, Top, Left.
> По-идее этого достаточно.
Привожу пример. Возьмем в качестве контрола TForm у которой свойство AutoScroll = true. Динамически создаем различные контролы и размещаем их на форме. При чем размещаем так, что некоторые из них заходят за грань формы, это приведёт к появлению ScrollBar'ов. Теперь если мы скопируем содержимое формы на Canvas через PaintTo, то контролы которые находятся за границей формы отображены на Canvas не будут. А я бы хотел, чтобы PaintToEx мог это реализовывать.
Ega23 (2006-08-21 12:41:00) [16]А что там реализовывать-то? for, Controls, ControlCount, Width, Height, Top, Left.
По-идее этого достаточно.
DelphiLexx (2006-08-21 12:35:00) [17]
> Врёшь. У TButton - нет.
Не столь это важно.
Просьба ко всем не цепляться к мелочам.
Проблема все таже необходим PaintToEx.
Ega23 (2006-08-21 12:31:00) [18]
> У каждого контрола в частности и у формы есть метод PaintTo
> который позволяет рисовать его содержимое на контекст устройства
> (Сanvas.handle).
Врёшь. У TButton - нет.