Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
15-1175169498
Kolan
2007-03-29 15:58
2007.04.29
Опрос для пользователей DMClient.


3-1171286284
bafy
2007-02-12 16:18
2007.04.29
Ошибка при вызове метода OpenDatabase


2-1175699319
Ezorcist
2007-04-04 19:08
2007.04.29
Как дать своей программа приоритет выполнения?


15-1175180463
Руслан
2007-03-29 19:01
2007.04.29
Нормативный документ по ТБ


1-1172823834
Mikhail83
2007-03-02 11:23
2007.04.29
Пролистывание в TChart





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский