![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить созданные в 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'а.
Тогда все вопросы снимаются сами собой.