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