Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизПродвинутый 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.019 c