Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 13:42   #1
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию Вывести на печать ScrollBox в delphi

Вообще это реально вывести на печать ScrollBox??? если да, то как это сделать???
BuT@JL вне форума Ответить с цитированием
Старый 26.04.2009, 15:55   #2
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

Т.е. как в Access?
Думаю через HDC.
[Process.....]
Упс весь экран вывел Уже почти...
[Process.....]
Готово:

var
ScreenDC:hdc;
Canvas:TCanvas;
begin
ScreenDC := GetDC(ScrollBar1.Handle);

Canvas:=TCanvas.Create();
Canvas.Handle:=ScreenDC;
Image1.Canvas.Copyrect(Rect(0,0,Scr ollBar1.Width,ScrollBar1.Height),
Canvas, Rect(0,0,ScrollBar1.Width,ScrollBar 1.Height));
ReleaseDC(0,ScreenDC);
Canvas.Free;

end;
Don't worry be happy

Последний раз редактировалось Izhic; 26.04.2009 в 16:03.
Izhic вне форума Ответить с цитированием
Старый 26.04.2009, 18:23   #3
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию

Izhic спасибо... но это немного не подходит, у меня ScrollBox длинный и непомещается на всей форме, а тут получается рисунок с отображением того что сейчас видно на форме. Мне нужно чтобы весь он распечатывался... как это сделать я не знаю ((
BuT@JL вне форума Ответить с цитированием
Старый 10.05.2016, 12:03   #4
Delphi_Koder
Новичок
Джуниор
 
Регистрация: 10.05.2016
Сообщений: 2
Хорошо Доработка вывода на печать ScrollBox в delphi

Доработка вышеприведенного примера по выводу содержимого ScrollBox в картинку.(Учитывается то, что компоненты расположенные на ScrollBox могут не вмещаться на нём, как следствие того появляются полосы прокрутки со всеми вытекающими)
___________________________________ ________________________
Код:
procedure Tmain.Button1Click(Sender: TObject);
var
ScreenDC:hdc;
Canvas:TCanvas;
x,y:integer;
dx,dy:integer;
IMG:TImage;
begin
      ScrollBox1.VertScrollBar.Position:=0;
      ScrollBox1.HorzScrollBar.Position:=0;
          ScrollBox1.Repaint;
		  
      if save_pic_dlg.execute then
      begin
      IMG:=TImage.Create(Self);
      x:=0;
      IMG.Width:=ScrollBox1.HorzScrollBar.Range;
      IMG.Height:=ScrollBox1.VertScrollBar.Range;

          while ScrollBox1.HorzScrollBar.Position<ScrollBox1.HorzScrollBar.Range do
          begin
          y:=0;
          ScrollBox1.VertScrollBar.Position:=0;
          ScrollBox1.Repaint;

          //Отступы для обрезки полос прокрутки
              if ScrollBox1.VertScrollBar.IsScrollBarVisible=true then dx:=21 else dx:=0;
              if ScrollBox1.HorzScrollBar.IsScrollBarVisible=true then dy:=21 else dy:=0;

          ScreenDC := GetDC(ScrollBox1.Handle);

          Canvas:=TCanvas.Create();
          Canvas.Handle:=ScreenDC;
          IMG.Canvas.Copyrect(Rect(x,0,x+ScrollBox1.Width-dx,ScrollBox1.Height-dy),Canvas, Rect(0,0,ScrollBox1.Width-dx,ScrollBox1.Height-dy));
    //По y-ку            
             while ScrollBox1.VertScrollBar.Position<ScrollBox1.VertScrollBar.Range do
             begin
                Canvas.Free;
                Canvas:=TCanvas.Create();
                Canvas.Handle:=ScreenDC;
              ScrollBox1.VertScrollBar.Position:=ScrollBox1.VertScrollBar.Position+ScrollBox1.Height-dy;
              ScrollBox1.Repaint;
              Application.ProcessMessages;

              if y=ScrollBox1.VertScrollBar.Position then break;
              y:=ScrollBox1.VertScrollBar.Position;
              IMG.Canvas.Copyrect(Rect(x,y,x+ScrollBox1.Width-dx,y+ScrollBox1.Height-dy),Canvas, Rect(0,0,ScrollBox1.Width-dx,ScrollBox1.Height-dy));
             end;
    //По y-ку    

          ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Position+ScrollBox1.Width-dx;
          ScrollBox1.Repaint;
          if x=ScrollBox1.HorzScrollBar.Position then break;

          x:=ScrollBox1.HorzScrollBar.Position;

          ReleaseDC(0,ScreenDC);
          Canvas.Free;
          Application.ProcessMessages;
          dx:=0;
          end;

       IMG.Picture.SaveToFile(save_pic_dlg.filename);
       IMG.Free;
       IMG:=nil;
       Application.MessageBox('Готово!','Внимание',mb_ok+MB_ICONINFORMATION);
      end;
end;
___________________________________ ________________________

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Delphi_Koder; 10.05.2016 в 14:46.
Delphi_Koder вне форума Ответить с цитированием
Старый 10.05.2016, 13:05   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
у меня ScrollBox длинный и непомещается на всей форме
А чо у него там внутри?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.05.2016, 14:40   #6
Delphi_Koder
Новичок
Джуниор
 
Регистрация: 10.05.2016
Сообщений: 2
По умолчанию

Просто мне недавно потребовалось сотворить такую функцию в своём приложении, и если кому-то тоже когда нибудь такое потребуется, то возможно кому-то как и мне посчастливится найти в поисковике ссылочку на нужную ветку форума (и неважно какого года там будет запись).

По поводу вопроса "А чо у него там внутри?":
У меня например строится некая сетка из компонентов, которая на один экран не вмещается, а чтобы например эту сетку распечатать пришлось бы например скрином экрана долго вырезать,вставлять и склеивать всё в единую картинку.
Delphi_Koder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рассортировать по возрастанию и вывести на печать список студентов. Sergeo_89 Фриланс 6 09.12.2008 13:51
image в scrollbox Черничный Общие вопросы Delphi 3 14.08.2008 16:35
Печать в Delphi Coda89 Помощь студентам 5 21.05.2008 17:32
Как вывести таблицу StringGrid на печать? graphoman Компоненты Delphi 1 07.01.2008 22:19
ScrollBox Mickle Помощь студентам 1 31.03.2007 14:10