Главная страница
    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.014 c
6-1146906019
SerGH
2006-05-06 13:00
2006.10.01
КАК принять данные из DLL ?


1-1156176876
zip0
2006-08-21 20:14
2006.10.01
Как узнать handle окна explorer a?


2-1158076753
Василий
2006-09-12 19:59
2006.10.01
DBGide


2-1157716372
Galiaf
2006-09-08 15:52
2006.10.01
присвоение данных из ф-ции


1-1155908506
Strip
2006-08-18 17:41
2006.10.01
Open with menu





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