Здравствуйте Irina_D6, Вы писали:
ID>Не удается распечатать все дерево TreeView или
ID>печатается да не так.
ID>Данная штука не так работает :
ID>Printer.BeginDoc;
ID>TreeView1.PainTo(Printer.Canvas.Habdle,10,10);
ID>Printer.EndDoc;
ID>Задавал этот вопрос во всех возможных форумах и дискусиях умных программеров ,
ID>И НИКТО НЕ СМОГ МНЕ НА ЭТО ОТВЕТИТЬ !!!!!!!
ID>Неужели никто не знает !!!!!!!!!!
А что именно "не так"?
Я вижу две возможных проблемы:
1. Размер при печати на лазерном принтере весьма миниатюрен.
Решение: задать масштабирование перед выводом на принтер:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
xform: TXForm;
Ratio: Extended;
begin
xform.eM12:=0;
xform.eM21:=0;
xform.eDx:=0;
xform.eDy:=0;
Printer.BeginDoc; // This ensures that device capabilities are known
Ratio:= GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY)/Screen.PixelsPerInch;
xform.eM11:=Ratio;
xform.eM22:=Ratio;
if (SetGraphicsMode(Printer.Canvas.Handle, GM_ADVANCED)<>0)
then SpeedButton1.Caption:=SpeedButton1.Caption+'SGM :) ';
if SetWorldTransform(Printer.Canvas.Handle, xform)
then SpeedButton1.Caption:=SpeedButton1.Caption+'SWT :)';
TreeView1.PaintTo(Printer.Canvas.Handle,10,10);
Printer.EndDoc;
end;
В данном примере все работает только на WinNT и Win2k. Для Win95/98 надо пользоваться ScaleViewportExtEx, щас нет времени сделать пример.
2. Печатается рамочка, и дерево показывается не полностью.
Решение: сделать его невидимым, и поставить размеры достаточными для вывода всех элементов.
Здравствуйте Sinclair, Вы писали:
А что такое TXForm ?
Дерево и в правду выдается либо маленьким , либо не все печатается.
Вы первый человек , который хоть что-то сообщил бедной замученной данным
вопросом девушке.
S>S>procedure TForm1.SpeedButton1Click(Sender: TObject);
S>var
S> xform: TXForm;
S> Ratio: Extended;
S>begin
S> xform.eM12:=0;
S> xform.eM21:=0;
S> xform.eDx:=0;
S> xform.eDy:=0;
S> Printer.BeginDoc; // This ensures that device capabilities are known
S> Ratio:= GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY)/Screen.PixelsPerInch;
S> xform.eM11:=Ratio;
S> xform.eM22:=Ratio;
S> if (SetGraphicsMode(Printer.Canvas.Handle, GM_ADVANCED)<>0)
S> then SpeedButton1.Caption:=SpeedButton1.Caption+'SGM :) ';
S> if SetWorldTransform(Printer.Canvas.Handle, xform)
S> then SpeedButton1.Caption:=SpeedButton1.Caption+'SWT :)';
S> TreeView1.PaintTo(Printer.Canvas.Handle,10,10);
S> Printer.EndDoc;
S>end;
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Sinclair, Вы писали:
А>А что такое TXForm ?
А>Дерево и в правду выдается либо маленьким , либо не все печатается.
А>Вы первый человек , который хоть что-то сообщил бедной замученной данным
А>вопросом девушке.
А вы какую версию Дельфи пользуете? Если выше 4й,то просто нажимаете кнопку Ctrl и кликаете идентификатор, который вам непонятен. Дельфи приведет вас вот к этому:
unit Windows;
//Skipped
type
PXForm = ^TXForm;
{$EXTERNALSYM tagXFORM}
tagXFORM = packed record
eM11: Single;
eM12: Single;
eM21: Single;
eM22: Single;
eDx: Single;
eDy: Single;
end;
TXForm = tagXFORM;
{$EXTERNALSYM XFORM}
XFORM = tagXFORM;
//skipped
Теперь, увидев, что тип определен в модуле Windows, можно смело лезть в MSDN. Ясно, что буква T добавлена для соблюдения именования (ясно это по наличию tagXFORM, XFORM, и PXorm). Ищем
XFORM. Первый же топик в списке все нам расскажет. Заодно можно глянуть там же функцию
SetWorldTransform
Кстати, у вас код-то заработал? Или вы теоретически спрашиваете?