Q&A

  • [급질문] Treeview 그대로 인쇄하는 방법???
안녕하세요?



저는 델파이 초보입니다.



TreeView를 인쇄하는 방법을 알고 싶습니다.

노드가 많아 화면을 캡쳐해서 인쇄할 수도 없고 막막합니다.



고수님의 조언을 부탁드립니다.



감사합니다.







2  COMMENTS
  • Profile
    구창민 2000.02.24 00:42
    최영호 wrote:

    > 안녕하세요?

    >

    > 저는 델파이 초보입니다.

    >

    > TreeView를 인쇄하는 방법을 알고 싶습니다.

    > 노드가 많아 화면을 캡쳐해서 인쇄할 수도 없고 막막합니다.

    >

    > 고수님의 조언을 부탁드립니다.

    >

    > 감사합니다.

    >

    >

    >



    참고하세요



    아래는 트리뷰를 인쇄하는 예제입니다.



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    ComCtrls, StdCtrls, ExtCtrls,Printers;



    type

    TForm1 = class(TForm)

    Panel1: TPanel;

    TreeViewPrt: TButton;

    TreeView1: TTreeView;

    Panel2: TPanel;

    Panel3: TPanel;

    Panel4: TPanel;

    ListBox1: TListBox;

    Panel5: TPanel;

    Button2: TButton;

    Memo1: TMemo;

    Button3: TButton;

    Memo2: TMemo;

    RadioButton1: TRadioButton;

    Panel6: TPanel;

    Label1: TLabel;

    Label2: TLabel;

    procedure FormCreate(Sender: TObject);

    procedure TreeViewPrtClick(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    procedure AddAComponent( A : TComponent);

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}

    procedure TForm1.AddAComponent(A: TComponent);

    var

    b : Integer;

    begin

    for b := 0 to TreeView1.Items.Count-1 do

    if TreeView1.Items[b].Text = A.Name then exit;

    if A.HasParent then AddAComponent(A.GetParentComponent);

    for b := 0 to TreeView1.Items.Count-1 do

    if TreeView1.Items[b].Text = A.GetParentComponent.Name then

    TreeView1.Items.AddChild(TreeView1.Items[b],A.Name);



    end;



    procedure TForm1.FormCreate(Sender: TObject);

    var

    a : Integer;

    begin

    TreeView1.Items.Add(TreeView1.Selected,Name);

    For a := 0 to ComponentCount-1 do AddAComponent(Components[a]);

    { 추가된 부분이다 }

    TreeView1.FullExpand;

    end;



    { 위에 부분은 컴포넌트를 트리로 보여주기 에 나와 있는 }

    { 프로그램이다 }





    { 이부분이 TreeView 에 있는 내용을 출력하는 부분이다 }



    procedure TForm1.TreeViewPrtClick(Sender: TObject);

    begin

    Printer.BeginDoc;

    try

    printer.canvas.moveto(100,100);

    SetMapMode( printer.canvas.handle, MM_ANISOTROPIC );

    SetWindowExtEx(printer.canvas.handle,

    GetDeviceCaps(canvas.handle, LOGPIXELSX),

    GetDeviceCaps(canvas.handle, LOGPIXELSY),

    Nil);

    SetViewportExtEx(printer.canvas.handle,

    GetDeviceCaps(printer.canvas.handle, LOGPIXELSX),

    GetDeviceCaps(printer.canvas.handle, LOGPIXELSY),

    Nil);

    treeview1.PaintTo( printer.canvas.handle, 100, 100 );

    finally

    printer.enddoc;

    end;

    end;



    end.

  • Profile
    최영호 2000.02.24 01:41
    구창민님 감사합니다.

    그런데 제가 원하는 것은

    노드가 많아 (수백개) 화면 보이는데로 인쇄하는 것이

    아니라 트리뷰의 모든 노드를 인쇄하는 것입니다.

    바쁘신 줄 아시지만 다시 한번 부탁드리겠습니다.



    그럼 안녕히.....







    구창민 wrote:

    > 최영호 wrote:

    > > 안녕하세요?

    > >

    > > 저는 델파이 초보입니다.

    > >

    > > TreeView를 인쇄하는 방법을 알고 싶습니다.

    > > 노드가 많아 화면을 캡쳐해서 인쇄할 수도 없고 막막합니다.

    > >

    > > 고수님의 조언을 부탁드립니다.

    > >

    > > 감사합니다.

    > >

    > >

    > >

    >

    > 참고하세요

    >

    > 아래는 트리뷰를 인쇄하는 예제입니다.

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > ComCtrls, StdCtrls, ExtCtrls,Printers;

    >

    > type

    > TForm1 = class(TForm)

    > Panel1: TPanel;

    > TreeViewPrt: TButton;

    > TreeView1: TTreeView;

    > Panel2: TPanel;

    > Panel3: TPanel;

    > Panel4: TPanel;

    > ListBox1: TListBox;

    > Panel5: TPanel;

    > Button2: TButton;

    > Memo1: TMemo;

    > Button3: TButton;

    > Memo2: TMemo;

    > RadioButton1: TRadioButton;

    > Panel6: TPanel;

    > Label1: TLabel;

    > Label2: TLabel;

    > procedure FormCreate(Sender: TObject);

    > procedure TreeViewPrtClick(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > procedure AddAComponent( A : TComponent);

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    > procedure TForm1.AddAComponent(A: TComponent);

    > var

    > b : Integer;

    > begin

    > for b := 0 to TreeView1.Items.Count-1 do

    > if TreeView1.Items[b].Text = A.Name then exit;

    > if A.HasParent then AddAComponent(A.GetParentComponent);

    > for b := 0 to TreeView1.Items.Count-1 do

    > if TreeView1.Items[b].Text = A.GetParentComponent.Name then

    > TreeView1.Items.AddChild(TreeView1.Items[b],A.Name);

    >

    > end;

    >

    > procedure TForm1.FormCreate(Sender: TObject);

    > var

    > a : Integer;

    > begin

    > TreeView1.Items.Add(TreeView1.Selected,Name);

    > For a := 0 to ComponentCount-1 do AddAComponent(Components[a]);

    > { 추가된 부분이다 }

    > TreeView1.FullExpand;

    > end;

    >

    > { 위에 부분은 컴포넌트를 트리로 보여주기 에 나와 있는 }

    > { 프로그램이다 }

    >

    >

    > { 이부분이 TreeView 에 있는 내용을 출력하는 부분이다 }

    >

    > procedure TForm1.TreeViewPrtClick(Sender: TObject);

    > begin

    > Printer.BeginDoc;

    > try

    > printer.canvas.moveto(100,100);

    > SetMapMode( printer.canvas.handle, MM_ANISOTROPIC );

    > SetWindowExtEx(printer.canvas.handle,

    > GetDeviceCaps(canvas.handle, LOGPIXELSX),

    > GetDeviceCaps(canvas.handle, LOGPIXELSY),

    > Nil);

    > SetViewportExtEx(printer.canvas.handle,

    > GetDeviceCaps(printer.canvas.handle, LOGPIXELSX),

    > GetDeviceCaps(printer.canvas.handle, LOGPIXELSY),

    > Nil);

    > treeview1.PaintTo( printer.canvas.handle, 100, 100 );

    > finally

    > printer.enddoc;

    > end;

    > end;

    >

    > end.