Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1177947590
Doom_2
2007-04-30 19:39
2007.05.20
TClientSocket и TServerSocket


15-1177074037
Сергей М.
2007-04-20 17:00
2007.05.20
Фокс-геморрой


15-1176820561
ANB
2007-04-17 18:36
2007.05.20
Чего с зарплатой будет ?


15-1177059201
LifeTime
2007-04-20 12:53
2007.05.20
Gambas


2-1178180459
lobach
2007-05-03 12:20
2007.05.20
Разделители





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский