Тема: Печать Panel
Показать сообщение отдельно
  #8  
Старый 19.10.2012, 13:29
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от 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...
Ответить с цитированием