Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1157997353
Nic
2006-09-11 21:55
2006.10.01
Visual Studio


2-1158136961
Gem
2006-09-13 12:42
2006.10.01
Ошибка: Недопустимый флаг преобразования


1-1156140355
5serg
2006-08-21 10:05
2006.10.01
Как зарегистрировать сервис в реестре Windows


15-1158126179
Dima L
2006-09-13 09:42
2006.10.01
delphi 10 lite


1-1155736066
bvn123
2006-08-16 17:47
2006.10.01
Событие/сообщение в DLL, автоматически обрабатываемое в main





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