::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-07-26 15:48:46, Hit : 4350, Vote : 965
 http://www.howto.pe.kr
 TTrewView, TListView 를 이미지로 저장하기

// Button1, Button3 을 먼저 눌러 예제 데리터를 생성한 후 Button2, Button4 를 누르면 bmp 파일이 생성됩니다

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ImgList;

type
  TForm1 = class(TForm)
    Button1: TButton;
    TreeView1: TTreeView;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    ListView1: TListView;
    ImageList1: TImageList;
    procedure Button1Click(Sender: TObject);
    procedure TreeView1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Tool_Controls = 120;
  File_Controls = 124;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure GetServerList(TV:TTreeView; Node:TTreeNode);
var
  a: Integer;
  ErrCode: Integer;
  NetRes: array[0..1023] of TNetResource;
  EnumHandle: THandle;
  EnumEntries: DWord;
  BufferSize: DWord;
  s: string;
  itm: TTreeNode;
begin
  if not Node.HasChildren then
    try
      Screen.Cursor := crHourglass;
      with NetRes[0] do
      begin
        dwScope := RESOURCE_GLOBALNET;
        dwType  := RESOURCETYPE_ANY;
        dwDisplayType := RESOURCEDISPLAYTYPE_generic;
        dwUsage := RESOURCEUSAGE_CONTAINER;
        lpLocalName := NIL;
        lpRemoteName := pChar(Tv.Selected.Text);
        lpComment  := NIL;
        lpProvider := NIL;
      end;

      ErrCode := WNetOpenEnum(
        RESOURCE_GLOBALNET,
        RESOURCETYPE_ANY,
        RESOURCEUSAGE_CONTAINER,
        @NetRes[0],
        EnumHandle
      );
      if ErrCode = NO_ERROR then
      begin
        EnumEntries := 1023;
        BufferSize := SizeOf(NetRes);
        ErrCode := WNetEnumResource(
          EnumHandle,
          EnumEntries,
          @NetRes[0],
          BufferSize
        );
        if ErrCode = No_Error then
          with TV do
            try
              a:=0;
              Items.BeginUpdate;
              while a < enumEntries do
                with NetRes[a] do
                begin
                  s:=lowercase(lpRemoteName);
                  Delete(s,1,2);
                  itm := Items.AddChild(node,s);
                  itm.selectedIndex := 2;
                  itm.imageindex := 2;
                  inc(a);
                end;
            finally
              Node.expand(false);
              Items.EndUpdate;
            end;
      end;
    finally
      Screen.Cursor := crDefault;
      WNetCloseEnum(EnumHandle);
    end;
end;

procedure GetDomainList(TV: TTreeView);
var
  a: Integer;
  ErrCode: Integer;
  NetRes: array[0..1023] of TNetResource;
  EnumHandle: THandle;
  EnumEntries: DWord;
  BufferSize: DWord;
  s: string;
  itm: TTreeNode;
begin
  try
    with NetRes[0] do
    begin
      dwScope := RESOURCE_GLOBALNET;
      dwType  := RESOURCETYPE_ANY;
      dwDisplayType := RESOURCEDISPLAYTYPE_DOMAIN;
      dwUsage := RESOURCEUSAGE_CONTAINER;
      lpLocalName := NIL;
      lpRemoteName := NIL;
      lpComment := NIL;
      lpProvider := NIL;
    end;

    ErrCode := WNetOpenEnum(
      RESOURCE_GLOBALNET,
      RESOURCETYPE_ANY,
      RESOURCEUSAGE_CONTAINER,
      @NetRes[0],
      EnumHandle
    );
    if ErrCode = NO_ERROR then
    begin
      EnumEntries := 1;
      BufferSize := SizeOf(NetRes);
      ErrCode := WNetEnumResource(
        EnumHandle,
        EnumEntries,
        @NetRes[0],
        BufferSize
      );
      WNetCloseEnum(EnumHandle);
      ErrCode := WNetOpenEnum(
        RESOURCE_GLOBALNET,
        RESOURCETYPE_ANY,
        RESOURCEUSAGE_CONTAINER,
        @NetRes[0],
        EnumHandle
      );
      EnumEntries := 1024;
      BufferSize := SizeOf(NetRes);
      ErrCode := WNetEnumResource(
        EnumHandle,
        EnumEntries,
        @NetRes[0],
        BufferSize
      );
      if ErrCode = No_Error then
        with TV do
          try
            a := 0;
            Items.BeginUpDate;
            Items.Clear;
            Itm := Items.Add(TV.Selected, string(NetRes[0].lpProvider));
            Itm.ImageIndex := 0;
            Itm.SelectedIndex := 0;

            while a < enumEntries do
              with NetRes[a] do
              begin
                s := lpRemoteName;
                Itm := Items.AddChild(Items[0], S);
                Itm.ImageIndex := 1;
                Itm.SelectedIndex := 1;
                inc(a);
              end;
          finally
            Items.EndUpdate;
          end;
    end;
  finally
    WNetCloseEnum(EnumHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetDomainList(TreeView1);
end;

procedure TForm1.TreeView1Click(Sender: TObject);
begin
  if TreeView1.Selected <> nil then
    if TreeView1.Selected.level = 1 then
      GetServerList(TreeView1, TreeView1.Selected);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Width := TreeView1.Width;
    bmp.Height := TreeView1.Height;
    bmp.Canvas.Lock;
    try
      TreeView1.Perform(WM_PRINT, bmp.Canvas.Handle, PRF_CHILDREN or PRF_CLIENT or PRF_NONCLIENT);
    finally
      bmp.Canvas.UnLock;
      bmp.SaveToFile('c:\zzz\tree.bmp')
    end;
  finally
    bmp.Free
  end;
end;


function LoadSystemGlyphs(ImageList: TImageList; Style:Integer):Boolean;
var
  hins: HINST;
  hndl: THandle;
  TmpBmp: TBitmap;
begin
  TmpBmp := TBitmap.Create;
  hins := LoadLibrary('C:\WINNT\system32\COMCTL32.DLL');
  hndl := LoadBitmap(hins, MakeIntResource(Style));
  if hndl <> 0 then
  begin
    TmpBmp.Handle := hndl;
    ImageList.AddMasked(TmpBmp, TmpBmp.Canvas.Pixels[0,0]);
    Result := True;
  end
  else
    Result := False;
  TmpBmp.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer;
  ListItem: TListItem;
begin
  ListView1.LargeImages := ImageList1;
  ListView1.SmallImages := ImageList1;
  ListView1.ViewStyle := vsIcon;

  LoadSystemGlyphs(ImageList1, Tool_Controls);
  LoadSystemGlyphs(ImageList1, File_Controls);

  for i := 0 to ImageList1.Count - 1 do
  begin
    ListItem := ListView1.Items.Add;
    ListItem.ImageIndex := i;
    ListItem.Caption := 'Icon '+IntToStr(i);
  end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Width := ListView1.Width;
    bmp.Height := ListView1.Height;
    bmp.Canvas.Lock;
    try
      ListView1.Perform(WM_PRINT, bmp.Canvas.Handle, PRF_CHILDREN or PRF_CLIENT);
    finally
      bmp.Canvas.UnLock;
      bmp.SaveToFile('c:\zzz\listview.bmp')
    end;
  finally
    bmp.Free
  end;
end;

end.





211   [윈도우즈 API] 콤포넌트의 Hint 에 그림(Bitmap) 넣기  김영대 2003/04/11 5201 1358
210   [일반/컴포넌트] 키보드의 Shift+Tab 이 눌린것처럼 처리하기  김영대 2003/04/14 4743 1312
209   [윈도우즈 API] 폼이 Minimized 되었을때 깜박이게 하기 2  김영대 2003/04/14 5983 1320
208   [COM/OLE] 그리드 자료 엑셀로 좀더 빠르게 보내기  공성환 2003/04/16 5536 972
207   [일반/컴포넌트] C에서 한글자르기  공성환 2003/04/16 4855 968
206   [COM/OLE] 기존 Excel 문서 불러와서 편집후 저장하기  김영대 2003/04/18 5460 1289
205   [일반/컴포넌트] thread-safe Queue 구현  김영대 2003/08/18 6144 1354
204   [알고리즘] 숫자를 KB, MB, GB 단위로 환산하기  김영대 2003/11/13 5072 1160
203   [일반/컴포넌트] StrToFloatDef  김영대 2003/11/13 4978 1258
202   [알고리즘] 구분자(delimiter)를 사용한 문자열 파싱(parsing)  김영대 2003/11/13 5180 1147
201   [일반/컴포넌트] thread-safe Queue를 이용한 TLogThread  김영대 2003/11/18 4815 1138
200   [네트웍/인터넷] IOCP(I/O Completion Port) class  김영대 2003/11/18 11052 879
199   [네트웍/인터넷] Winsock WriteFile and Overlapped IO  김영대 2003/11/18 5441 1231
198   [시스템] 윈도우즈 서비스 목록 구하기  김영대 2004/07/22 4574 1225
197   [시스템] 윈도우즈 서비스 상태 구하기  김영대 2004/07/22 5009 1275
196   [시스템] 윈도우즈 서비스 시작/중지 하기  김영대 2004/07/22 6108 1549
195   [시스템] 윈도우즈 시스템의 스크롤바 두께 바꾸기  김영대 2004/07/24 5632 1378
194   [시스템] 마우스 아래의 윈도우 핸들 구하기  김영대 2004/07/24 9119 1661
193   [시스템] 내 프로그램의 실행 우선순의 바꾸기  김영대 2004/07/24 5140 1399
192   [윈도우즈 API] 내 프로그램의 화면을 가리는 프로그램 리스트  김영대 2004/07/24 4577 1209
191   [윈도우즈 API] Taskbar 의 특정 위치에 popup 메뉴 띄우기  김영대 2004/07/24 4615 1206
190   [윈도우즈 API] Taskbar 의 위치 추적하기  김영대 2004/07/24 4009 1072
189   [일반/컴포넌트] 윈도우즈"시작" 버튼위에 글씨 쓰기  김영대 2004/07/24 4201 1153
188   [시스템] 제어판의 모든 applet 정보 구하기  김영대 2004/07/24 4431 1141
187   [윈도우즈 API] 바로 직전에 active 되었던 윈도우와 콘트롤 구하기  김영대 2004/07/24 4646 1168
186   [윈도우즈 API] 지원하는 키보드 입력 언어 구하고 변경하기  김영대 2004/07/24 4751 1269
185   [윈도우즈 API] 현재 키보드 입력 언어 구하기  김영대 2004/07/24 4992 1354
184   [COM/OLE] 윈도우즈 "작업 표시줄 및 시작 메뉴 등록 정보" 화면  김영대 2004/07/25 6082 1634
183   [COM/OLE] 윈도우즈 "인터넷 등록 정보" 화면  김영대 2004/07/25 4262 1325
182   [COM/OLE] 윈도우즈 "날짜/시간 등록 정보" 화면  김영대 2004/07/25 6412 1653
181   [COM/OLE] 윈도우즈 "검색: 파일 또는 폴더" 화면  김영대 2004/07/25 4988 1397
180   [COM/OLE] 윈도우즈 "시스템 종료" 화면  김영대 2004/07/25 4611 1312
179   [COM/OLE] 윈도우즈 "모든 창을 최소화"  김영대 2004/07/25 6246 1710
178   [일반/컴포넌트] TList 를 이용한 stack 구조 구현  김영대 2004/07/25 4370 1135
177   [윈도우즈 API] 폼에 애니메이션 효과 주기  김영대 2004/07/25 4655 1235
176   [일반/컴포넌트] 모서리가 둥근(rounded ends) TMemo 만들기  김영대 2004/07/25 4584 1189
175   [시스템] 로컬 가상 드라이버(substitution device) 만들고 제거하기  김영대 2004/07/25 5977 1326
174   [네트웍/인터넷] 네트워크 드라이브 연결 화면 띄우기  김영대 2004/07/26 5966 1601
173   [일반/컴포넌트] TProgressbar 의 색상 바꾸기  김영대 2004/07/26 4633 1237
  [일반/컴포넌트] TTrewView, TListView 를 이미지로 저장하기  김영대 2004/07/26 4350 965

[이전 10개] [1]..[11][12][13][14][15][16][17][18][19] 20 ..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero