Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Как сохранить созданные в ScrollBoxe компоненты в виде рисунка?   Найти похожие ветки 

 
Мастер Ломастер   (2005-11-29 03:33) [0]

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

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

Спасибо.


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

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

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


 
ЮЮ ©   (2005-11-29 04:22) [2]

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

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

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

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

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


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

>> ЮЮ ©

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

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


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

>> ЮЮ ©

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

kalashnikovartem@mail.ru


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


> 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 05:31) [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 10:18) [7]

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


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

>> Васяня

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


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

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


 
Джо ©   (2005-11-29 14:23) [10]


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

Кого лупить?


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

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
14-1133505317
ZeroDivide
2005-12-02 09:35
2005.12.25
Развод или нет?


1-1133421860
Zhekson
2005-12-01 10:24
2005.12.25
CheckBox в MessageDlg


1-1133393990
Мастер Ломастер
2005-12-01 02:39
2005.12.25
Равномерное обрезание картинки по краям?


14-1133536787
Хинт
2005-12-02 18:19
2005.12.25
Screenshot в Dos е под WinXP


5-1118839875
Чайник
2005-06-15 16:51
2005.12.25
Удаление свойства-компонента.