Q&A

  • 화면캡쳐와PRINT
한수 부탁합니다.

델에서 폼을 캡쳐해서 프린터하는 방법좀 가르쳐주세요.

내공이 부족해서 제가 생각한데로 잘 되지가 않습니다.

많이 많이 부탁합니다.

2  COMMENTS
  • Profile
    조복기 2000.03.08 20:53
    델사랑 wrote:

    > 한수 부탁합니다.

    > 델에서 폼을 캡쳐해서 프린터하는 방법좀 가르쳐주세요.

    > 내공이 부족해서 제가 생각한데로 잘 되지가 않습니다.

    > 많이 많이 부탁합니다.



    안녕하세요..

    제가 가지고있는 팁중에 화면을 bmp로 저장하는 방법과

    bmp를 출력하는 방법을 적어놓을께요..

    참고로 김영대님이 예전에 답변했던 내용이군요..

    좋은하루되세요..







    1. [고급] 화면캡처하기





    > 델파이 3.0에서

    > 현재의 화면을 캡처하여 DB에 저장하려고 하는데

    > 방법을 모르겠내요



    안녕하세요 김영대입니다.

    화면(DeskTop의 full screen)을 Capture하는 예제를 올립니다.

    Capture하여 bmp 파일로 저장하는 예제입니다.

    그리고 DB저장은 BLOB 필드를 다루는 내용이 많이 공개되어 있으니

    생략합니다

    그럼 좋은 결과 있기를 바랍니다.

    (아래의 BitmapRect의 영역좌표를 바꾸면 DeskTop의 특정 영역만

    Capture할 수 있습니다, full screen의 bmp 크기는 대략 938KB 입니다)





    unit Unit1;



    interface



    uses

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

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    SaveDialog1: TSaveDialog;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    DeskTopDC: HDc;

    DeskTopCanvas: TCanvas;

    BitmapRect: TRect;

    Bitmap: TBitmap;

    begin

    try

    Bitmap := TBitmap.Create; {BMP를 저장할 bitmap 생성}

    BitMap.Width := Screen.Width;

    BitMap.Height := Screen.Height;

    BitmapRect := Rect(0, 0, Screen.Width, Screen.Height); {full screen 영역}



    {전체 window의 device context(DC) 을 얻는다}

    DeskTopDC := GetWindowDC(GetDeskTopWindow);

    DeskTopCanvas := TCanvas.Create;

    DeskTopCanvas.Handle := DeskTopDC; {전체 window의 canvas를 얻습니다}



    // BitmapRect영역의 DeskTopCanvas에서 BitmapRect영역의 Bitmap.Canvas로

    // 복사받습니다

    Bitmap.Canvas.CopyRect(BitmapRect, DeskTopCanvas, BitmapRect);



    if SaveDialog1.Execute then

    Bitmap.SaveToFile(SaveDialog1.FileName);

    finally

    ReleaseDC(GetDeskTopWindow, DeskTopDC);

    DeskTopCanvas.Free;

    Bitmap.Free;

    end;

    end;



    end.









    2. bitmap 인쇄하기









    // uses절에 Printers 를 포함하세요



    procedure TForm1.Button1Click(Sender: TObject);

    var

    ScaleX, ScaleY: Integer;

    R: TRect;

    begin

    Printer.BeginDoc;

    with Printer do

    try

    ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;

    ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;

    R := Rect(0, 0, Image1.Picture.Width * ScaleX, Image1.Picture.Height * ScaleY);

    Canvas.StretchDraw(R, Image1.Picture.Graphic);

    finally

    EndDoc;

    end;

    end;



  • Profile
    델사랑 2000.03.09 01:43
    조복기 wrote:

    > 델사랑 wrote:

    > > 한수 부탁합니다.

    > > 델에서 폼을 캡쳐해서 프린터하는 방법좀 가르쳐주세요.

    > > 내공이 부족해서 제가 생각한데로 잘 되지가 않습니다.

    > > 많이 많이 부탁합니다.

    >

    > 안녕하세요..

    > 제가 가지고있는 팁중에 화면을 bmp로 저장하는 방법과

    > bmp를 출력하는 방법을 적어놓을께요..

    > 참고로 김영대님이 예전에 답변했던 내용이군요..

    > 좋은하루되세요..

    >

    >

    >

    > 1. [고급] 화면캡처하기

    >

    >

    > > 델파이 3.0에서

    > > 현재의 화면을 캡처하여 DB에 저장하려고 하는데

    > > 방법을 모르겠내요

    >

    > 안녕하세요 김영대입니다.

    > 화면(DeskTop의 full screen)을 Capture하는 예제를 올립니다.

    > Capture하여 bmp 파일로 저장하는 예제입니다.

    > 그리고 DB저장은 BLOB 필드를 다루는 내용이 많이 공개되어 있으니

    > 생략합니다

    > 그럼 좋은 결과 있기를 바랍니다.

    > (아래의 BitmapRect의 영역좌표를 바꾸면 DeskTop의 특정 영역만

    > Capture할 수 있습니다, full screen의 bmp 크기는 대략 938KB 입니다)

    >

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

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

    > StdCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > SaveDialog1: TSaveDialog;

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > DeskTopDC: HDc;

    > DeskTopCanvas: TCanvas;

    > BitmapRect: TRect;

    > Bitmap: TBitmap;

    > begin

    > try

    > Bitmap := TBitmap.Create; {BMP를 저장할 bitmap 생성}

    > BitMap.Width := Screen.Width;

    > BitMap.Height := Screen.Height;

    > BitmapRect := Rect(0, 0, Screen.Width, Screen.Height); {full screen 영역}

    >

    > {전체 window의 device context(DC) 을 얻는다}

    > DeskTopDC := GetWindowDC(GetDeskTopWindow);

    > DeskTopCanvas := TCanvas.Create;

    > DeskTopCanvas.Handle := DeskTopDC; {전체 window의 canvas를 얻습니다}

    >

    > // BitmapRect영역의 DeskTopCanvas에서 BitmapRect영역의 Bitmap.Canvas로

    > // 복사받습니다

    > Bitmap.Canvas.CopyRect(BitmapRect, DeskTopCanvas, BitmapRect);

    >

    > if SaveDialog1.Execute then

    > Bitmap.SaveToFile(SaveDialog1.FileName);

    > finally

    > ReleaseDC(GetDeskTopWindow, DeskTopDC);

    > DeskTopCanvas.Free;

    > Bitmap.Free;

    > end;

    > end;

    >

    > end.

    >

    >

    >

    >

    > 2. bitmap 인쇄하기

    >

    >

    >

    >

    > // uses절에 Printers 를 포함하세요

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > ScaleX, ScaleY: Integer;

    > R: TRect;

    > begin

    > Printer.BeginDoc;

    > with Printer do

    > try

    > ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;

    > ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;

    > R := Rect(0, 0, Image1.Picture.Width * ScaleX, Image1.Picture.Height * ScaleY);

    > Canvas.StretchDraw(R, Image1.Picture.Graphic);

    > finally

    > EndDoc;

    > end;

    > end;

    >







    우선 이렇게 내공을 불어 넣어주셨어 감사합니다.

    그런데 제가 이와 비슷한 방법으로 해 보았는데 인쇄 할때 모니터 크기에

    따라 폼의 크기가 달라지는듯 합니다.

    그리고 프린트도 해상도도 영~~~

    그래서 다시 내공을 부탁합니다.

    혹시 다른 방법이 없나요?

    • 문영봉
    • 2000.03.08 23:52
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 문영봉
      2000.03.09 19:13
      문영봉 wrote: > 제가 ms-sql을 db로 사용하고요... Tdatasource를 써서 직접 연결을 하여 사용하고 > 있...
    • 문영봉
      2000.03.09 19:12
      문영봉 wrote: > 제가 ms-sql을 db로 사용하고요... Tdatasource를 써서 직접 연결을 하여 사용하고 > 있...
    • 문영봉
      2000.03.09 19:12
      문영봉 wrote: > 제가 ms-sql을 db로 사용하고요... Tdatasource를 써서 직접 연결을 하여 사용하고 > 있...
    • topsman
    • 2000.03.08 23:18
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 모양
    • 2000.03.08 22:52
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.08 22:53
      얼마든지 낮은 버전에서 높은 버전의 폼을 열수 있습니다. 같은 버전에서도 안 열리 는 폼들이 있죠... ...
    • 모양
      2000.03.09 00:54
      최용일 wrote: > 얼마든지 낮은 버전에서 높은 버전의 폼을 열수 있습니다. 같은 버전에서도 안 열리 > ...
    • 최용일
      2000.03.09 02:45
      델파이 Bin디렉토리에 보시면 아마도 Convert.exe프로그램이 있습니다. 이걸 이용하시면 버전에 맞게 바꾸...
    • 류동균
      2000.03.09 08:00
      김하나 wrote: > with AiriForm.AiriSQL do begin > try > Close; > SQL.Clear; ...
    • 김하나
      2000.03.10 23:22
      류동균 wrote: > 김하나 wrote: > > with AiriForm.AiriSQL do begin > > try > > Clos...
    • 차은숙
    • 2000.03.08 21:49
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 좋은날
      2000.03.08 23:36
      차은숙 wrote: > 델파이 초보거든요. > DB에서 Select를 하는데, > 저희 Convention에 의해 > sql문에 ...
    • 혀노
      2000.03.08 23:31
      > Query1.Sql.Add('Where UserId = :UserID'); > > ParamByName('MUserID').AsString := MUserID.Te...
    • 진짜초보
      2000.03.08 21:53
      혹시나 해서 써보는건데요.. ParamByName('MUserID').AsString := MUserID.Text; 를 Params.ParamBy...
    • 차은숙
      2000.03.08 23:17
      아니요... ParamByName('MUserID').AsString := MUserID.Text; 라고 썼는데요. Params.ParamBy...
    • 진짜초보
      2000.03.09 16:15
      차은숙 wrote: > 아니요... > ParamByName('MUserID').AsString := MUserID.Text; > 라고 썼는데...
    • 진짜초보
      2000.03.09 16:15
      차은숙 wrote: > 아니요... > ParamByName('MUserID').AsString := MUserID.Text; > 라고 썼는데...
    • 철이
    • 2000.03.08 21:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.08 22:44
      procedure Form1.Button1Click(Sender: TObject); begin Button2.OnClick; MenuItem1.OnClick; ....
    • cho
    • 2000.03.10 03:52
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김남일
      2000.03.15 21:43
      안녕하세요. 음. 혹시 Record위치를 조정하지 않았나요? Action에서 Table를 Scan 후(eof 까지) Table ...
    • 화랑
      2000.03.10 18:35
      안녕하세요.. 저도 델파이로 웹 프로그래밍을 다 하고 있는데요.. 저는 그런 에러가 전혀 없었거든요? ...
    • 황선희
    • 2000.03.08 20:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이복만
      2010.02.05 04:16
      저의 경우 변수를 중복 사용하여 발생했었습니다 예를 들어 SpeedButton 3개가 있는데 각각의 버튼 이...
    • 델사랑
    • 2000.03.08 20:42
    • 2 COMMENTS
    • /
    • 1 LIKES
    • 조복기
      2000.03.08 20:53
      델사랑 wrote: > 한수 부탁합니다. > 델에서 폼을 캡쳐해서 프린터하는 방법좀 가르쳐주세요. > 내공이 ...
    • 델사랑
      2000.03.09 01:43
      조복기 wrote: > 델사랑 wrote: > > 한수 부탁합니다. > > 델에서 폼을 캡쳐해서 프린터하는 방법좀 가...
    • 델초
    • 2000.03.08 19:23
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김지희
      2000.03.08 22:08
      dictionary정보를 참조하시면 되겠네여. USER_CONSTRAINTS와 USER_CONS_COLUMNS 를 보시면... 델초...
    • 델초
      2000.03.08 22:52
      감사합니다만 Select문에서 어떻게 사용해야 할 지 몰라서요..
    • 김지희
      2000.03.08 23:50
      select C.table_name, C.constraint_name, C.constraint_type, CC.column_name ...원하는 필드명...
    • 이태호
    • 2000.03.08 19:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.08 20:01
      아래와 같이 버퍼를 열린배열로 하고 SetLength를 이용하여 크기를 설정하여주시면 됩니다. procedure Ca...
    • 이태호
      2000.03.10 07:17
      최용일 wrote: > 아래와 같이 버퍼를 열린배열로 하고 SetLength를 이용하여 크기를 > 설정하여주시면 됩...