Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
ВнизКак напечатать форму, не открывая её полностью? Найти похожие ветки
← →
allucard (2007-04-26 15:17) [0]Доброго всем дня.
Использую метод Form2.Print, но он выводит на печать только видимую часть формы.
Форма большая (А4) и на экран не влазит по вертикали.
Как напечатать форму целиком, не открывая её на весь экран?
Спасибо.
← →
allucard (2007-04-26 15:49) [1]Добрался до function TCustomForm.GetFormImage: TBitmap;
изменил
Result.Width := ClientWidth;
Result.Height := ClientHeight;
на
Result.Width := Width;
Result.Height := Height;
не помогло.
Может файл Forms.pas нужно откомпилировать?
Если да, то как?
← →
Сергей М. © (2007-04-26 15:55) [2]
> allucard (26.04.07 15:49) [1]
> Добрался
> изменил
>
> Может файл Forms.pas нужно откомпилировать?
Самоделкин, блин)
← →
clickmaker © (2007-04-26 15:56) [3]
> [1] allucard (26.04.07 15:49)
зачем генофонд-то трогать? А если в следующий раз понадобится именно ClientWidth?
Возьми лучше код функции, подправь и используй отдельно. Или наследника от TForm напиши с перекрытой
← →
allucard (2007-04-26 16:06) [4]
> зачем генофонд-то трогать?
ради интереса и познания непознаваемого)
> Возьми лучше код функции, подправь и используй отдельно.
ты думаешь там одна функция за печать отвечает?)
> Или наследника от TForm напиши с перекрытой
функцией GetFormImage?
← →
allucard (2007-04-26 16:08) [5]
> Самоделкин, блин)
от вас пока ответа дождёшься, так проще и велосипед придумать,
хоть и с квадратными колёсами, но велосипед)
← →
allucard (2007-04-26 16:17) [6]
> clickmaker © (26.04.07 15:56) [3]
> Или наследника от TForm напиши с перекрытой
Перекрыть Static method?
А как?
← →
clickmaker © (2007-04-26 16:25) [7]
> [6] allucard (26.04.07 16:17)
ну не помню я, какие там методы виртуальные, какие нет...
код, значит, возьми оттуда
← →
allucard (2007-04-26 16:29) [8]
> код, значит, возьми оттуда
там не одна функция.
> clickmaker © (26.04.07 16:25) [7]
а всётаки, как откомпилировать Forms.pas?
← →
clickmaker © (2007-04-26 16:50) [9]
> как откомпилировать Forms.pas?
если у тебя не "build with runtime packages" с vcl, то можно forms.pas положить в lib, а forms.dcu убрать
Но, ИМХО, не лучший способ. разве что в познавательных целях
← →
allucard (2007-04-26 20:02) [10]
> clickmaker © (26.04.07 16:50) [9]
Спасиб.
Буду думать.
← →
Loginov Dmitry © (2007-04-26 23:42) [11]> как откомпилировать Forms.pas?
Скопировать данный модуль в каталог со своей прогой, в файле проекта удалить ссылку на данный модуль, далее выполнить команду Project/Add To Project, выбрав свою версию модуля. Далее можешь делать с этим модулем все, что хошь.
← →
allucard (2007-04-27 08:21) [12]Не печатает ту часть изображения, которая не влазит на экран.
Даже если изменить ClientWidth и ClientHeight.
Что делать?
← →
allucard (2007-04-27 10:07) [13]Что если при переписывании метода не указать override?
← →
stakan © (2007-04-27 10:19) [14]
> Перекрыть Static method?
Зачем override?
← →
allucard (2007-04-27 12:25) [15]
> stakan © (27.04.07 10:19) [14]
я о Dynamic.
← →
allucard (2007-04-27 12:35) [16]Почему Height устанавливается не более чем на 780?
← →
ЮЮ © (2007-04-27 13:02) [17]
> Почему Height устанавливается не более чем на 780?
мониторчик возьми получше и пикселей в высоту выставь по-больше.
Форму на экране ты, между прочим, скроллируешь, а не перемещаешь, чтобы работать со совоим "A4 ".
← →
allucard (2007-04-27 13:15) [18]По логике:
из-за того что я не могу установить Height на 780 у меня и не печатается.
Т.к. метод GetFormImage использует значения Height, которые неизвестно как вычисляются.
property Height: Integer read GetHeight write SetHeight;
запутался короче.
Неужели нельзя вывести форму, пусть она и не влазит на экран?
← →
allucard (2007-04-27 13:17) [19]как сделать снимок невидимой части формы?
← →
allucard (2007-04-27 13:34) [20]по частям что-ли?
← →
Asail (2007-04-27 13:59) [21]А зачем все это? Не лучше-ли воспользоваться отчетами? Хоть QuickReport, хоть FastReports... А то завтра, глядишь, захочешь "A0" печатать...
← →
allucard (2007-04-27 15:11) [22]Вот эта функция рисует:
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;
здесь для меня много непонятного, кто может увидит, где здесь задаётся высота и ширина?
← →
clickmaker © (2007-04-27 15:16) [23]
> где здесь задаётся высота и ширина?
а почему она именно здесь должна задаваться?
Здесь просто рисуется содержимое контрОла заданных габаритов
← →
allucard (2007-04-27 15:23) [24]
> clickmaker © (27.04.07 15:16) [23]
> заданных габаритов
мне о нужны заданные габариты
← →
{RASkov} © (2007-04-27 15:29) [25]> [24] allucard (27.04.07 15:23)
У тебя скролы у формы есть? ScrollBars
← →
allucard (2007-04-27 15:35) [26]
> {RASkov} © (27.04.07 15:29) [25]
Вообще есть.
Если их убрать форма обрежет всё, что попадёт ниже Height.
← →
{RASkov} © (2007-04-27 15:45) [27]> [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:59) [28]
> {RASkov} © (27.04.07 15:45) [27]
Спасиб.
Я понял, по частям, а начало дорисовки задавать в PaintTo через x, y.
А форма обязательно должна быть видимой?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.045 c