Цитата:
Сообщение от Heneken
Код:
tmpform:=Tform.Create(nil); //Создаем новую форму
//Копируем всю джигурду панели с которой будет таскать изображение
l:=panel1.Left; //Записали в l положение по Left
t:=panel1.Top; //Записали в t положение по Top
h:=panel1.Height; //Записали в h положение по Height
w:=panel1.Width; //Записали в w положение по Width
|
Здесь вместо этого проще сохранить panel1.BoundsRect;
Цитата:
Сообщение от Heneken
Код:
//И теперь Самое Гениальное!
windows.SetParent(panel1.Handle,tmpform.Handle); //Тупо перерисовываем нашу панель в новую форму
|
Это никакая не тупая перерисовка панели - это перемещение панели из одной формы в другую, да ещё и в обход VCL.
Цитата:
Сообщение от Heneken
Код:
//А как известно для формы есть свойсво Print да и ваще с формаой проще печататься
showmessage('Панель в печать!'); ///Вместо етого суйте че хотите..настройки отступы и т д..ну и спосна саму команду на печать
|
Если здесь подразумевается вызов tmpform.Print, то это не сработает - можешь проверить - печатает пустую форму.
Цитата:
Сообщение от Heneken
Код:
tmpform.visible:=false; //Делаем новую форму НЕвидимой
tmpform.Destroy;//Убиваем нашу новую форму
|
Нет смысла делать форму невидимой перед тем как её разрушить. Да и разрушать рекомендуется с помощью Free, а не Destroy.
После моих исправлений получился следующий код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
tmpform: TForm;
SavedRect, NewRect: TRect;
begin
if Print.Execute then
begin
SavedRect := Panel1.BoundsRect;
NewRect := SavedRect;
OffsetRect(NewRect, -NewRect.Left, -NewRect.Top);
tmpform := TForm.Create(nil);
try
tmpform.BorderStyle := bsNone;
tmpform.BoundsRect := NewRect;
Panel1.Parent := tmpform;
Panel1.BoundsRect := NewRect;
tmpform.Visible := True;
tmpform.Print;
Panel1.Parent := Self;
Panel1.BoundsRect := SavedRect;
finally
tmpform.Free;
end;
end;
end;
p.s. Кстати при печати методом TForm.Print у меня почему-то не распечатываются заголовки у TListView...