Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сохранить созданные в ScrollBoxe компоненты в виде рисунка? [D7, WinXP]


Мастер Ломастер ©   (2005-11-29 03:33:00) 

Здравствуйте, уважаемые мастера!

Подскажите пожалуйста как сделать:
1. Я в ScrollBox создаю компоненты (что-то типа структурной схемы, каждый компонент это блок).
2. ScrollBox дописал и теперь у него есть Canvas.
3. Блоки соединяются линиями, которые отрисовываются Canvas (сам понимаю что это извращение, но до другого я пока не додумался, кстати если будет идейка как это можно сделать не используя канву, буду примного благодарен).
4. Есть необходимость сохранять эту структурную схему в виде рисунка. Так вот основной вопрос как это сделать.

Спасибо.


Васяня   (2005-11-30 04:30:00) [1]

Мастер Ломастер, а тут делать так как говорит Джо :))


Джо   (2005-11-29 14:23:00) [2]


>  [7] Васяня   (29.11.05 10:18)
> Джо, а если допустим надо сделать скрин компонента у которого
> нет PaintTo, тогда остается лупить?

Кого лупить?


Мастер Ломастер   (2005-11-29 12:36:00) [3]

Только вот столкнулся с такой бедой, теперь все что находится над ScrollBoxом сохраняется как рисунок, т.е. к примеру у меня Winamp залез на границу ScrollBoxа и сразу же сохранился в файл рисунка, как тут быть?


Мастер Ломастер   (2005-11-29 12:00:00) [4]

>> Васяня

Большое спасибо, все работает!


Васяня   (2005-11-29 10:18:00) [5]

Джо, а если допустим надо сделать скрин компонента у которого нет PaintTo, тогда остается лупить?


Джо   (2005-11-29 05:31:00) [6]


var
 Bmp: TBitmap;
begin
 Bmp := TBitmap.Create;
 try
   Bmp.Width := ScrollBox1.ClientWidth;
   Bmp.Height := ScrollBox1.ClientHeight;
   ScrollBox1.PaintTo(Bmp.Canvas,0,0);
   Bmp.SaveToFile('d:\sample.bmp');
 finally
   Bmp.Free;
 end;
end;


Васяня   (2005-11-29 05:07:00) [7]


> 4. Есть необходимость сохранять эту структурную схему в
> виде рисунка. Так вот основной вопрос как это сделать.


procedure TForm1.GrabScreen;
var
 DeskTopDC: HDc;
 DeskTopCanvas: TCanvas;
 DeskTopRect: TRect;
begin
 DeskTopDC := GetWindowDC(ScrollBox1.Handle);
 DeskTopCanvas := TCanvas.Create;
 DeskTopCanvas.Handle := DeskTopDC;
 DeskTopRect := Rect(0, 0, ScrollBox1.Width, ScrollBox1.Height);
 Form1.Canvas.CopyRect(DeskTopRect, DeskTopCanvas, DeskTopRect);
 ReleaseDC(GetDeskTopWindow, DeskTopDC);
end;


Мастер Ломастер   (2005-11-29 04:33:00) [8]

>> ЮЮ ©

Если не трудно, не могли бы выслать Ваш примерчик.

kalashnikovartem@mail.ru


Мастер Ломастер   (2005-11-29 04:31:00) [9]

>> ЮЮ ©

Понятно дело что стрелки линии соединения я могу отрисовать в том же самом TBitmape, но как быть с компонентами...

Что касается отрисовки линий без использования канвы, то я имел ввиду линии ну по типу как в Matlabe (если кто работал), ну или тот же самый Visio.


ЮЮ   (2005-11-29 04:22:00) [10]

>как это можно сделать не используя канву

рмсовать бех холста? Для того он и предназначен :). Разве только чтобы не делать этого даже когда нет изменений можно нарисовать один раз на Canavas-е с "запоминанием" (TBitmap.Canvas), а в Paint-е копировать с одного Canavas на другой

> Есть необходимость сохранять эту структурную схему в виде рисунка.

Добавить параметр Canvas: TCanavas в параметры процедуры рисования. Теперь можешь рисовать тоже самое где угодно, например на TBitmap.Canvas

Мог бы выслать один проектик для наглядности, если бы не анонимность автора


stef   (2005-11-29 04:02:00) [11]

Не знаю поможет или нет, но я в свое время решал похожую задачу так:
поместил на панель имейдж, по formcreate раздвинул границы последнего и с помощью вертикального и горизонтального scrollbar осуществлял позиционирование имейджа на панели отслеживая событие onchange для scrollbar.
Что-то типа этого
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
 form1.Image1.Left:=-form1.ScrollBar1.Position;
end;

естественно нельзя забывать о свойстве max scrollbar'а.
Тогда все вопросы снимаются сами собой.


Наверх

Титульная страница Поиск, карта сайта Написать письмо