Текущий архив: 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.47 MB
Время: 0.043 c