Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
bmp file 출력하기
화면전체를 capture 해서 detktop에 연결되어있는
프린터로 출력을 하려고 하는데
아시는분 답변 부탁 드립니다.
1
COMMENTS
나나
•
2000.04.24 20:24
정형모 wrote:
> 화면전체를 capture 해서 detktop에 연결되어있는
> 프린터로 출력을 하려고 하는데
> 아시는분 답변 부탁 드립니다.
제가 internet에서 찾아서 쓰고 있는데
자세한 내용은 저도 잘 모릅니다.
procedure TfrmHMCU010A.bbt_printClick(Sender: TObject);
var
dc: HDC;
isDcPalDevice : BOOL;
MemDc :hdc;
MemBitmap : hBitmap;
OldMemBitmap : hBitmap;
hDibHeader : Thandle;
pDibHeader : pointer;
hBits : Thandle;
pBits : pointer;
ScaleX : Double;
ScaleY : Double;
ppal : PLOGPALETTE;
pal : hPalette;
Oldpal : hPalette;
i : integer;
begin
Screen.Cursor := crHourGlass;
{Get the screen dc}
dc := GetDc(0);
{Create a compatible dc}
MemDc := CreateCompatibleDc(dc);
{create a bitmap}
MemBitmap := CreateCompatibleBitmap(Dc,
Application.MainForm.width,
Application.MainForm.height);
{select the bitmap into the dc}
OldMemBitmap := SelectObject(MemDc, MemBitmap);
{Lets prepare to try a fixup for broken video drivers}
isDcPalDevice := false;
if GetDeviceCaps(dc, RASTERCAPS) and
RC_PALETTE = RC_PALETTE then begin
GetMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
FillChar(pPal^, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)), #0);
pPal^.palVersion := $300;
pPal^.palNumEntries :=
GetSystemPaletteEntries(dc,
0,
256,
pPal^.palPalEntry);
if pPal^.PalNumEntries <> 0 then begin
pal := CreatePalette(pPal^);
oldPal := SelectPalette(MemDc, Pal, false);
isDcPalDevice := true
end else
FreeMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
end;
{copy from the screen to the memdc/bitmap}
BitBlt(MemDc,
0, 0,
Application.MainForm.width, Application.MainForm.height,
Dc,
Application.MainForm.left, Application.MainForm.top,
SrcCopy);
if isDcPalDevice = true then begin
SelectPalette(MemDc, OldPal, false);
DeleteObject(Pal);
end;
{unselect the bitmap}
SelectObject(MemDc, OldMemBitmap);
{delete the memory dc}
DeleteDc(MemDc);
{Allocate memory for a DIB structure}
hDibHeader := GlobalAlloc(GHND,
sizeof(TBITMAPINFO) +
(sizeof(TRGBQUAD) * 256));
{get a pointer to the alloced memory}
pDibHeader := GlobalLock(hDibHeader);
{fill in the dib structure with info on the way we want the DIB}
FillChar(pDibHeader^,
sizeof(TBITMAPINFO) + (sizeof(TRGBQUAD) * 256),
#0);
PBITMAPINFOHEADER(pDibHeader)^.biSize :=
sizeof(TBITMAPINFOHEADER);
PBITMAPINFOHEADER(pDibHeader)^.biPlanes := 1;
PBITMAPINFOHEADER(pDibHeader)^.biBitCount := 8;
PBITMAPINFOHEADER(pDibHeader)^.biWidth := Application.MainForm.width;
PBITMAPINFOHEADER(pDibHeader)^.biHeight := Application.MainForm.height;
PBITMAPINFOHEADER(pDibHeader)^.biCompression := BI_RGB;
{find out how much memory for the bits}
GetDIBits(dc,
MemBitmap,
0,
Application.MainForm.height,
nil,
TBitmapInfo(pDibHeader^),
DIB_RGB_COLORS);
{Alloc memory for the bits}
hBits := GlobalAlloc(GHND,
PBitmapInfoHeader(pDibHeader)^.BiSizeImage);
{Get a pointer to the bits}
pBits := GlobalLock(hBits);
{Call fn again, but this time give us the bits!}
GetDIBits(dc,
MemBitmap,
0,
Application.MainForm.height,
pBits,
PBitmapInfo(pDibHeader)^,
DIB_RGB_COLORS);
{Lets try a fixup for broken video drivers}
if isDcPalDevice = true then begin
for i := 0 to (pPal^.PalNumEntries - 1) do begin
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbRed :=
pPal^.palPalEntry[i].peRed;
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbGreen :=
pPal^.palPalEntry[i].peGreen;
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbBlue :=
pPal^.palPalEntry[i].peBlue;
end;
FreeMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
end;
{Release the screen dc}
ReleaseDc(0, dc);
{Delete the bitmap}
DeleteObject(MemBitmap);
{Start print job}
Printer.BeginDoc;
{Scale print size}
if Printer.PageWidth < Printer.PageHeight then begin
ScaleX := Printer.PageWidth;
ScaleY := Application.MainForm.Height * (Printer.PageWidth / Application.MainForm.Width);
end else begin
ScaleX := Application.MainForm.Width * (Printer.PageHeight / Application.MainForm.Height);
ScaleY := Printer.PageHeight;
end;
{Just incase the printer drver is a palette device}
isDcPalDevice := false;
if GetDeviceCaps(Printer.Canvas.Handle, RASTERCAPS) and
RC_PALETTE = RC_PALETTE then begin
{Create palette from dib}
GetMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
FillChar(pPal^, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)), #0);
pPal^.palVersion := $300;
pPal^.palNumEntries := 256;
for i := 0 to (pPal^.PalNumEntries - 1) do begin
pPal^.palPalEntry[i].peRed :=
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbRed;
pPal^.palPalEntry[i].peGreen :=
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbGreen;
pPal^.palPalEntry[i].peBlue :=
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbBlue;
end;
pal := CreatePalette(pPal^);
FreeMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
oldPal := SelectPalette(Printer.Canvas.Handle, Pal, false);
isDcPalDevice := true
end;
{send the bits to the printer}
StretchDiBits(Printer.Canvas.Handle,
0, 0,
Round(scaleX), Round(scaleY),
0, 0,
Application.MainForm.Width, Application.MainForm.Height,
pBits,
PBitmapInfo(pDibHeader)^,
DIB_RGB_COLORS,
SRCCOPY);
{Just incase you printer drver is a palette device}
if isDcPalDevice = true then begin
SelectPalette(Printer.Canvas.Handle, oldPal, false);
DeleteObject(Pal);
end;
{Clean up allocated memory}
GlobalUnlock(hBits);
GlobalFree(hBits);
GlobalUnlock(hDibHeader);
GlobalFree(hDibHeader);
{End the print job}
Printer.EndDoc;
Screen.Cursor := crDefault;
end;
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
선성우
2000.04.24 21:44
0
COMMENTS
/
0
LIKES
Interbase가 깨졌어요!!
이수정
•
2000.04.24 21:24
2
COMMENTS
/
0
LIKES
richedit 에 이미지를 넣을 수 있습니까??
netquest
•
2000.04.25 04:10
이수정 wrote: > 안녕하세요.. > > richedit 에 gif나 bmp jpg 등.. 아무 이미지나.. add 할 수 있는 ...
netquest
•
2000.04.25 04:10
이수정 wrote: > 안녕하세요.. > > richedit 에 gif나 bmp jpg 등.. 아무 이미지나.. add 할 수 있는 ...
괴로운 넘
•
2000.04.24 20:27
1
COMMENTS
/
0
LIKES
제발 좀 부탁드립니다..ㅠ.ㅠ(Stringgrid...)
이기현
•
2000.04.25 03:14
괴로운 넘 wrote: > Stirnggrid를 이용해서 간단한 데이타를 출력해야 하는데 > 생성되는 데이타를 저장...
정형모
•
2000.04.24 20:06
1
COMMENTS
/
0
LIKES
bmp file 출력하기
화면전체를 capture 해서 detktop에 연결되어있는 프린터로 출력을 하려고 하는데 아시는분 답변 부탁 드립니다.
나나
•
2000.04.24 20:24
정형모 wrote: > 화면전체를 capture 해서 detktop에 연결되어있는 > 프린터로 출력을 하려고 하는데 ...
손상택
2000.04.24 20:04
0
COMMENTS
/
0
LIKES
엑셀 데이터 ---> 스트링그리드로.....?
고정환
•
2000.04.24 19:57
3
COMMENTS
/
0
LIKES
#193의 의미는???
최용일
•
2000.04.25 06:58
안녕하세요. 최용일입니다. #193은 아스키코드 193번 문자를 뜻하지 별의미는 없네요. 한글이나 한자를 ...
어린왕자
•
2000.04.24 22:53
고정환 wrote: > 샬롬!!! > > Keypress Event에서 #193이 무엇을 뜻하는 Key값인지 아세요. > > 거 ...
어린왕자
•
2000.04.24 23:07
어린왕자 wrote: > 고정환 wrote: > > 샬롬!!! > > > > Keypress Event에서 #193이 무엇을 뜻하는 Key...
병규
2000.04.24 19:46
0
COMMENTS
/
0
LIKES
한번생각해봅시다.
박성태
2000.04.24 19:40
0
COMMENTS
/
0
LIKES
DBGrid에서의 Function
이수정
•
2000.04.24 19:27
4
COMMENTS
/
0
LIKES
OnDrawCell 이벤트는 언제,어떻게 발생되는건가요??
이기현
•
2000.04.25 00:25
procedure TForm1.BitBtn1Click(Sender: TObject); begin StringGrid1.Cells[2, 2] := ' '; StringG...
최용일
•
2000.04.24 19:41
안녕하세요. 최용일입니다. OnDrawCell이벤트는 그리드의 셀이 다시 그려질 필요가 있을때(셀이 선택된...
이수정
•
2000.04.24 22:02
최용일 wrote: > 안녕하세요. 최용일입니다. > > OnDrawCell이벤트는 그리드의 셀이 다시 그려질 필요...
최용일
•
2000.04.25 07:02
헐~ 벌써 답을 아셨네요... 답변이 늦었군요. 죄송...
조민연
2000.04.24 19:00
0
COMMENTS
/
0
LIKES
QRPreview 사용시 에러!!
NetAngel
2000.04.24 19:11
0
COMMENTS
/
0
LIKES
꼭좀알려주세요.. dll에서 quick report 호출하는 방법....
바보
•
2000.04.24 15:51
2
COMMENTS
/
0
LIKES
CD-RW를 제어할려고 합니다. 방법좀 가르쳐주십시요!
최용일
•
2000.04.24 20:47
안녕하세요. 최용일입니다. CD-RW, ZIP, JAZZ등은 특별히 제어하실 필요는 없을 것 같은데요. 우리가 항...
바보
•
2000.04.25 00:26
그냥 copy를 하면 데이타가 들어간다구요?? 그럼 초기화는 어떻게 합니까?? 최용일 wrote: > 안녕하세...
crystal
2000.04.24 15:28
0
COMMENTS
/
0
LIKES
꼭 보시기 바랍니다.
초보
2000.04.24 14:28
0
COMMENTS
/
0
LIKES
edit에서 일본어를 보게 할 수 없을까요?(윈2000)
이용현
•
2000.04.24 13:29
1
COMMENTS
/
0
LIKES
프로그램이 죽어도 그기에서 호출한 프로그램은 안죽게 할수 없나가요
최용일
•
2000.04.24 19:24
안녕하세요. 최용일입니다. 다른 프로그램을 어떻게 호출하였나요? 보통은 두개의 프로그램이 따로 노는...
김대일
•
2000.04.24 12:06
1
COMMENTS
/
0
LIKES
Ddraw.dll 을 로드하는...
최용일
•
2000.04.24 20:18
안녕하세요. 최용일입니다. 혹시 DirectX가 설치되지 않은건 아닌지... 물론 이런 경우는 100% 없겠지만...
임형호
•
2000.04.24 10:40
1
COMMENTS
/
0
LIKES
RX 설치후 에러...
임형호
•
2000.04.25 02:32
임형호 wrote: > 음... 전부터 늘 델파이에 RX를 설치하고 사용했는데.. > 며칠전에 컴을 모두 밀었습니...
맹주형
2000.04.24 08:46
0
COMMENTS
/
0
LIKES
전각문자를 반각문자로 변환
톰과 제리
2000.04.24 07:55
0
COMMENTS
/
0
LIKES
도스로 재부팅하는 방법과 시스템 대기모드 넣기?
[델파이]
2000.04.24 07:52
0
COMMENTS
/
0
LIKES
서버 프로그램이..메일
정형모
2000/04/24 20:06
Views
208
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 화면전체를 capture 해서 detktop에 연결되어있는
> 프린터로 출력을 하려고 하는데
> 아시는분 답변 부탁 드립니다.
제가 internet에서 찾아서 쓰고 있는데
자세한 내용은 저도 잘 모릅니다.
procedure TfrmHMCU010A.bbt_printClick(Sender: TObject);
var
dc: HDC;
isDcPalDevice : BOOL;
MemDc :hdc;
MemBitmap : hBitmap;
OldMemBitmap : hBitmap;
hDibHeader : Thandle;
pDibHeader : pointer;
hBits : Thandle;
pBits : pointer;
ScaleX : Double;
ScaleY : Double;
ppal : PLOGPALETTE;
pal : hPalette;
Oldpal : hPalette;
i : integer;
begin
Screen.Cursor := crHourGlass;
{Get the screen dc}
dc := GetDc(0);
{Create a compatible dc}
MemDc := CreateCompatibleDc(dc);
{create a bitmap}
MemBitmap := CreateCompatibleBitmap(Dc,
Application.MainForm.width,
Application.MainForm.height);
{select the bitmap into the dc}
OldMemBitmap := SelectObject(MemDc, MemBitmap);
{Lets prepare to try a fixup for broken video drivers}
isDcPalDevice := false;
if GetDeviceCaps(dc, RASTERCAPS) and
RC_PALETTE = RC_PALETTE then begin
GetMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
FillChar(pPal^, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)), #0);
pPal^.palVersion := $300;
pPal^.palNumEntries :=
GetSystemPaletteEntries(dc,
0,
256,
pPal^.palPalEntry);
if pPal^.PalNumEntries <> 0 then begin
pal := CreatePalette(pPal^);
oldPal := SelectPalette(MemDc, Pal, false);
isDcPalDevice := true
end else
FreeMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
end;
{copy from the screen to the memdc/bitmap}
BitBlt(MemDc,
0, 0,
Application.MainForm.width, Application.MainForm.height,
Dc,
Application.MainForm.left, Application.MainForm.top,
SrcCopy);
if isDcPalDevice = true then begin
SelectPalette(MemDc, OldPal, false);
DeleteObject(Pal);
end;
{unselect the bitmap}
SelectObject(MemDc, OldMemBitmap);
{delete the memory dc}
DeleteDc(MemDc);
{Allocate memory for a DIB structure}
hDibHeader := GlobalAlloc(GHND,
sizeof(TBITMAPINFO) +
(sizeof(TRGBQUAD) * 256));
{get a pointer to the alloced memory}
pDibHeader := GlobalLock(hDibHeader);
{fill in the dib structure with info on the way we want the DIB}
FillChar(pDibHeader^,
sizeof(TBITMAPINFO) + (sizeof(TRGBQUAD) * 256),
#0);
PBITMAPINFOHEADER(pDibHeader)^.biSize :=
sizeof(TBITMAPINFOHEADER);
PBITMAPINFOHEADER(pDibHeader)^.biPlanes := 1;
PBITMAPINFOHEADER(pDibHeader)^.biBitCount := 8;
PBITMAPINFOHEADER(pDibHeader)^.biWidth := Application.MainForm.width;
PBITMAPINFOHEADER(pDibHeader)^.biHeight := Application.MainForm.height;
PBITMAPINFOHEADER(pDibHeader)^.biCompression := BI_RGB;
{find out how much memory for the bits}
GetDIBits(dc,
MemBitmap,
0,
Application.MainForm.height,
nil,
TBitmapInfo(pDibHeader^),
DIB_RGB_COLORS);
{Alloc memory for the bits}
hBits := GlobalAlloc(GHND,
PBitmapInfoHeader(pDibHeader)^.BiSizeImage);
{Get a pointer to the bits}
pBits := GlobalLock(hBits);
{Call fn again, but this time give us the bits!}
GetDIBits(dc,
MemBitmap,
0,
Application.MainForm.height,
pBits,
PBitmapInfo(pDibHeader)^,
DIB_RGB_COLORS);
{Lets try a fixup for broken video drivers}
if isDcPalDevice = true then begin
for i := 0 to (pPal^.PalNumEntries - 1) do begin
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbRed :=
pPal^.palPalEntry[i].peRed;
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbGreen :=
pPal^.palPalEntry[i].peGreen;
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbBlue :=
pPal^.palPalEntry[i].peBlue;
end;
FreeMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
end;
{Release the screen dc}
ReleaseDc(0, dc);
{Delete the bitmap}
DeleteObject(MemBitmap);
{Start print job}
Printer.BeginDoc;
{Scale print size}
if Printer.PageWidth < Printer.PageHeight then begin
ScaleX := Printer.PageWidth;
ScaleY := Application.MainForm.Height * (Printer.PageWidth / Application.MainForm.Width);
end else begin
ScaleX := Application.MainForm.Width * (Printer.PageHeight / Application.MainForm.Height);
ScaleY := Printer.PageHeight;
end;
{Just incase the printer drver is a palette device}
isDcPalDevice := false;
if GetDeviceCaps(Printer.Canvas.Handle, RASTERCAPS) and
RC_PALETTE = RC_PALETTE then begin
{Create palette from dib}
GetMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
FillChar(pPal^, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)), #0);
pPal^.palVersion := $300;
pPal^.palNumEntries := 256;
for i := 0 to (pPal^.PalNumEntries - 1) do begin
pPal^.palPalEntry[i].peRed :=
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbRed;
pPal^.palPalEntry[i].peGreen :=
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbGreen;
pPal^.palPalEntry[i].peBlue :=
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbBlue;
end;
pal := CreatePalette(pPal^);
FreeMem(pPal, sizeof(TLOGPALETTE) +
(255 * sizeof(TPALETTEENTRY)));
oldPal := SelectPalette(Printer.Canvas.Handle, Pal, false);
isDcPalDevice := true
end;
{send the bits to the printer}
StretchDiBits(Printer.Canvas.Handle,
0, 0,
Round(scaleX), Round(scaleY),
0, 0,
Application.MainForm.Width, Application.MainForm.Height,
pBits,
PBitmapInfo(pDibHeader)^,
DIB_RGB_COLORS,
SRCCOPY);
{Just incase you printer drver is a palette device}
if isDcPalDevice = true then begin
SelectPalette(Printer.Canvas.Handle, oldPal, false);
DeleteObject(Pal);
end;
{Clean up allocated memory}
GlobalUnlock(hBits);
GlobalFree(hBits);
GlobalUnlock(hDibHeader);
GlobalFree(hDibHeader);
{End the print job}
Printer.EndDoc;
Screen.Cursor := crDefault;
end;