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

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

Как напечатать форму, не открывая её полностью? [D7, XP]


Страницы:   1 2

allucard ©   (2007-04-26 15:17:00) 

Доброго всем дня.

Использую метод Form2.Print, но он выводит на печать только видимую часть формы.
Форма большая (А4) и на экран не влазит по вертикали.
Как напечатать форму целиком, не открывая её на весь экран?

Спасибо.


allucard   (2007-04-27 15:59:00) [1]


> {RASkov} ©   (27.04.07 15:45) [27]

Спасиб.
Я понял, по частям, а начало дорисовки задавать в PaintTo через x, y.

А форма обязательно должна быть видимой?


{RASkov}   (2007-04-27 15:45:00) [2]

> [26] allucard   (27.04.07 15:35)
> Вообще есть.

Ну так вот ни PaintTo ни GetFormImage не орисуют ту часть, что невходит в видимую область контрола...
Рисуй ручками... вот намек:
var B: TBitMap;
...........
X:=0; Y:=0;
B.Width:=HorzScrollBar.Range; B.Height:=VertScr....
начало какого-нить цикла begin
HorzScrollBar.Position:=X; VertSc...
PaintTo(B.Canvas, X, Y);
X:=X+.... ; Y:=Y+  // Вообщем здесь расчитывай новые координаты
end; //конец цикла
И в B: TBitMap у тебя форма целиком...
Сорри... убегаю, если не придумаешь то позже ченить решим. Но лучше сам.


allucard   (2007-04-27 15:35:00) [3]


> {RASkov} ©   (27.04.07 15:29) [25]

Вообще есть.

Если их убрать форма обрежет всё, что попадёт ниже Height.


{RASkov}   (2007-04-27 15:29:00) [4]

> [24] allucard   (27.04.07 15:23)

У тебя скролы у формы есть? ScrollBars


allucard   (2007-04-27 15:23:00) [5]


> clickmaker ©   (27.04.07 15:16) [23]


> заданных габаритов

мне о нужны заданные габариты


clickmaker   (2007-04-27 15:16:00) [6]


> где здесь задаётся высота и ширина?

а почему она именно здесь должна задаваться?
Здесь просто рисуется содержимое контрОла заданных габаритов


allucard   (2007-04-27 15:11:00) [7]

Вот эта функция рисует:

procedure TWinControl.PaintTo(DC: HDC; X, Y: Integer);
var
 I, EdgeFlags, BorderFlags, SaveIndex: Integer;
 R: TRect;
begin
 Include(FControlState, csPaintCopy);
 SaveIndex := SaveDC(DC);
 MoveWindowOrg(DC, X, Y);
 IntersectClipRect(DC, 0, 0, Width, Height);
 BorderFlags := 0;
 EdgeFlags := 0;
 if GetWindowLong(Handle, GWL_EXSTYLE) and WS_EX_CLIENTEDGE <> 0 then
 begin
   EdgeFlags := EDGE_SUNKEN;
   BorderFlags := BF_RECT or BF_ADJUST
 end else
 if GetWindowLong(Handle, GWL_STYLE) and WS_BORDER <> 0 then
 begin
   EdgeFlags := BDR_OUTER;
   BorderFlags := BF_RECT or BF_ADJUST or BF_MONO;
 end;
 if BorderFlags <> 0 then
 begin
   SetRect(R, 0, 0, Width, Height);
   DrawEdge(DC, R, EdgeFlags, BorderFlags);
   MoveWindowOrg(DC, R.Left, R.Top);
   IntersectClipRect(DC, 0, 0, R.Right - R.Left, R.Bottom - R.Top);
 end;
 Perform(WM_ERASEBKGND, DC, 0);
 Perform(WM_PAINT, DC, 0);
 if FWinControls <> nil then
   for I := 0 to FWinControls.Count - 1 do
     with TWinControl(FWinControls[I]) do
       if Visible then PaintTo(DC, Left, Top);
 RestoreDC(DC, SaveIndex);
 Exclude(FControlState, csPaintCopy);
end;


здесь для меня много непонятного, кто может увидит, где здесь задаётся высота и ширина?


Asail   (2007-04-27 13:59:00) [8]

А зачем все это? Не лучше-ли воспользоваться отчетами? Хоть QuickReport, хоть FastReports... А то завтра, глядишь, захочешь "A0" печатать...


allucard   (2007-04-27 13:34:00) [9]

по частям что-ли?


allucard   (2007-04-27 13:17:00) [10]

как сделать снимок невидимой части формы?


allucard   (2007-04-27 13:15:00) [11]

По логике:

из-за того что я не могу установить Height на 780 у меня и не печатается.
Т.к. метод GetFormImage использует значения Height, которые неизвестно как вычисляются.

   property Height: Integer read GetHeight write SetHeight;

запутался короче.

Неужели нельзя вывести форму, пусть она и не влазит на экран?


ЮЮ   (2007-04-27 13:02:00) [12]


> Почему Height устанавливается не более чем на 780?

мониторчик возьми получше и пикселей в высоту выставь по-больше.
Форму на экране ты, между прочим, скроллируешь, а не перемещаешь, чтобы работать со совоим "A4 ".


allucard   (2007-04-27 12:35:00) [13]

Почему Height устанавливается не более чем на 780?


allucard   (2007-04-27 12:25:00) [14]


> stakan ©   (27.04.07 10:19) [14]

я о Dynamic.


stakan   (2007-04-27 10:19:00) [15]


> Перекрыть Static method?

Зачем override?


allucard   (2007-04-27 10:07:00) [16]

Что если при переписывании метода не указать override?


allucard   (2007-04-27 08:21:00) [17]

Не печатает ту часть изображения, которая не влазит на экран.
Даже если изменить ClientWidth и ClientHeight.

Что делать?


Loginov Dmitry   (2007-04-26 23:42:00) [18]

> как откомпилировать Forms.pas?


Скопировать данный модуль в каталог со своей прогой, в файле проекта удалить ссылку на данный модуль, далее выполнить команду Project/Add To Project, выбрав свою версию модуля. Далее можешь делать с этим модулем все, что хошь.


allucard   (2007-04-26 20:02:00) [19]


> clickmaker ©   (26.04.07 16:50) [9]

Спасиб.
Буду думать.


clickmaker   (2007-04-26 16:50:00) [20]


> как откомпилировать Forms.pas?

если у тебя не "build with runtime packages" с vcl, то можно forms.pas положить в lib, а forms.dcu убрать
Но, ИМХО, не лучший способ. разве что в познавательных целях


Страницы:   1 2

Наверх

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