Никто еще не смог ответить мне на этот вопрос !!!!
От: Irina_D6  
Дата: 13.03.02 20:53
Оценка:
Не удается распечатать все дерево TreeView или
печатается да не так.

Данная штука не так работает :
Printer.BeginDoc;
TreeView1.PainTo(Printer.Canvas.Habdle,10,10);
Printer.EndDoc;

Задавал этот вопрос во всех возможных форумах и дискусиях умных программеров ,
И НИКТО НЕ СМОГ МНЕ НА ЭТО ОТВЕТИТЬ !!!!!!!
Неужели никто не знает !!!!!!!!!!
Re: Никто еще не смог ответить мне на этот вопрос !!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.03.02 22:35
Оценка:
Здравствуйте 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. Печатается рамочка, и дерево показывается не полностью.
Решение: сделать его невидимым, и поставить размеры достаточными для вывода всех элементов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Никто еще не смог ответить мне на этот вопрос !!!!
От: Аноним  
Дата: 14.03.02 08:10
Оценка:
Здравствуйте 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;
Re[3]: Никто еще не смог ответить мне на этот вопрос !!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.03.02 06:46
Оценка:
Здравствуйте Аноним, Вы писали:

А>Здравствуйте 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
Кстати, у вас код-то заработал? Или вы теоретически спрашиваете?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.