Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Как распечатать содержимое фрейма ?   Найти похожие ветки 

 
jeen ©   (2007-04-11 11:08) [0]

HI, многоуважаемые ALL!
В общем, на форме есть фрейм, необходимо вывести содержимое фрейма на печать, по аналогии с методом PRINT у TFORM. То есть всё, что есть в фрейме, кнопки, лэйблы итд...а саму форму не выводить!

Думал, что прокатит вот так:

Var  FramePrint : TForm;
    DC : HDC;
begin
DC := GetDC(Frame21.Handle);
FramePrint := TForm.Create;
FramePrint.Handle := DC;
FramePrint.Print;
end;


не прокатило...ругается на FramePrint := TForm.Create; :(
я начинающий, поэтому мне это сложновато ещё..

зы. СНимок содержимого фрейма и дальнейшую его распечатку не предлагать, ибо фрейм очень большой, и его полностью на экране отобразить не удастся..


 
Плохиш ©   (2007-04-11 11:16) [1]


> не прокатило...ругается на FramePrint := TForm.Create;

Афигеть, я даже знаю как ругается :-)) Ну нет у TForm конструктора без параметров, о чём тебе и говорят. Неужели так трудно на рынке чуток мозгов прикупить?


 
Elen ©   (2007-04-11 11:38) [2]


> jeen ©   (11.04.07 11:08)

Так в чем проблем? Хелп еще не отменили :


procedure TForm1.Button1Click(Sender: TObject);
var tp:TPrinter;
begin
PrintDialog1.Execute;
tp:=TPrinter.Create;
tp.BeginDoc;
Frame21.PaintTo(tp.Canvas,0,0);
tp.EndDoc;
end;


Разве что тебе придется порыться в хелпе на предмет подгонки на страницу


 
jeen ©   (2007-04-12 03:53) [3]

2 Elen : спасибо большое за совет !

2 Плохиш: ну добавил я Owner"а  (Form1)...толку то.. теперь ругается на строчку ниже.. может лучше показать наглядно, как решить эту проблему именно через Tform.Print , чем разбрасываться здесь оскорблениями ?


 
clickmaker ©   (2007-04-12 09:37) [4]


> теперь ругается на строчку ниже

FramePrint.Handle := DC; ?
Я бы тоже ругался. Ибо Handle - дескриптор окна, а DC - контекста. Мануал кури, в общем


 
jeen ©   (2007-04-12 10:48) [5]

Однако такая конструкция :

 Var  ScrBox : TCanvas;
      DC : HDC;
begin
DC := GetDC(ScrollBox1.Handle);
ScrBox := TCanvas.Create;
ScrBox.Handle := DC;
ScrBox.TextOut(X,Y,"Test");
end;

прекрасно работает :)
мне нужен именно метод PRINT, который есть только у TForm. Так намного удобнее в моей программе.
Неужели так сложно указать конкретно ? Что вокруг да около ходить ?
Проще всего отослать курить мануал...здесь, насколько я понял, помогают новичкам...или я не так понял ?


 
clickmaker ©   (2007-04-12 10:56) [6]


> прекрасно работает :)

ну правильно. Потому что ScrBox - это Canvas, а не TForm
И почему бы не заглянуть в исходники метода Print? И заточить, как удобно


 
Плохиш ©   (2007-04-12 11:02) [7]


> jeen ©   (12.04.07 10:48) [5]


Var  FramePrint : TForm;
     oldParent: TForm;
begin
 FramePrint := TForm.Create;
 try
   oldParent := Frame21.Parent;
   // Здесь сохранить размеры и расположение фрейма
   try
     FramePrint.BorderStyle := bsNone;
     Frame21.Parent := FramePrint;
     Frame21.Align := alClient;
     FramePrint.Print;
   finally
     // Здесь востановить расположение и размеры фрейма
     Frame21.Parent := oldParent;
   end;
 finally
   FramePrint.Release;
 end;
end;

Вот, как-то так, "начинающий"...


 
jeen ©   (2007-04-13 04:28) [8]

мда...

1. ругнулся на FramePrint := TForm.Create;
добавил хозяина - Form1 - прошло дальше
2. ругается на oldParent := Frame21.Parent;  "Incompatible Types : TForm and TWinControl

может кто-нибудь более квалифицированный и осведомлённый в этом вопросе может помочь ? если это такая тривиальная, простейшая задача, что же тогда никто толком не может точно написать процедуру ? Только носом тыкать и умеете в мануалы и прочее...


 
jeen ©   (2007-04-13 04:34) [9]

и даже если заменить в объявлении : oldParent: TForm;  на oldParent: TWin Control;
то процедура работает следующим образом...
всё содержимое фрейма она переписывает в главную форму...печатает её, и после не восстанавливается (хотя я прописал сохранение всех основных параметров width, height, left, top и последубщее восстановление)
и к тому же мне нужно чтобы во время печати фрейма, основная форма была доступна...


 
Elen ©   (2007-04-13 07:46) [10]


> jeen ©   (13.04.07 04:34) [9]

А что [2] не катит?


 
{RASkov}   (2007-04-13 08:11) [11]

var Bmp: TBitmap;
begin
 BMP:=TBitMap.Create;
 try
 BMP.Width:=Frame21.Width;
 BMP.Height:=Frame21.Height;
 Frame21.PaintTo(BMP.Handle, 0, 0);
 with Printer do begin
  BeginDoc;
  Canvas.StretchDraw(Canvas.ClipRect, BMP);
  EndDoc;
 end;
 finally BMP.Free; end;
end;


 
jeen ©   (2007-04-13 11:05) [12]

Спасибо огромное за этот эквивалент...но к сожаленью он почему то выводит чистый белый лист (странно)... хотя тот же Form1.Print выводит и саму форму и фрейм(который лежит в правой части этой формы) со всем его содержимым...видимо придётся рыться в реализации метода PRINT :( что мне как новичку придётся наверное полгода делать...


 
Плохиш ©   (2007-04-13 11:12) [13]


> jeen ©   (13.04.07 04:34) [9]

Ну, хорошо, ошибку в 17й строке ты исправил, теперь осталось исправить ошибку в 20й строке...



Страницы: 1 вся ветка

Текущий архив: 2007.04.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
6-1162540138
sfn
2006-11-03 10:48
2007.04.29
ICS — TWSocket


2-1176025824
vitv
2007-04-08 13:50
2007.04.29
DBGrid+DrawText


15-1175518945
Kerk
2007-04-02 17:02
2007.04.29
Вопрос линуксоидам


15-1175616972
И. Павел
2007-04-03 20:16
2007.04.29
Документация и бета тестирование


2-1176358330
vitv
2007-04-12 10:12
2007.04.29
Прорисовка CheckBox в DbGrid