Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
화면모드를 알아내는 방법
안녕하세요.
현재 화면 모드를 알아 내는 방법이 어떻게 되나요.
1
COMMENTS
김영대
•
1999.05.17 20:54
이호선 wrote:
> 안녕하세요.
> 현재 화면 모드를 알아 내는 방법이 어떻게 되나요.
안녕하세요 김영대입니다
아래 소스는 화면 모드를 읽고 변경하는 예제입니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Spin, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PdmArray = ^TDmArray;
TDmArray = array[0..0] of TDeviceMode;
var
Form1: TForm1;
lpDmArray: PDmArray;
NumModes: integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
MyPC_DC: THandle; // Display context
MyPC_Bits: Integer; // Bits per pixel
MyPC_HRes: Integer; // Horizontal resolution
MyPC_VRes: Integer; // Vertical resolution
i: integer;
dm : TDeviceMode;
begin
MyPC_DC := Canvas.Handle;
MyPC_Bits := GetDeviceCaps(MyPC_DC, BITSPIXEL); // 각 pixel당 칼러의 비트수
MyPC_HRes := GetDeviceCaps(MyPC_DC, HORZRES); // 화면의 폭(Width)의 비트수
MyPC_VRes := GetDeviceCaps(MyPC_DC, VERTRES); // 화면의 높이(Height)의 비트수
// 내 PC의 video mode 정보
Label1.Caption := Format('%d bits, %d x %d',[MyPC_Bits, MyPC_HRes, MyPC_VRes]);
// 현재 내 PC가 지원할 수 있는 video mode 를 구한다
Memo1.Lines.Clear;
NumModes := 0; // 첫번째 video mode의 번호(0번부터 시작)
while True do
begin
// nil 이면 현재 표시장치(display device)를 나타냅니다
if not EnumDisplaySettings(nil, NumModes, dm) then // False이면 더이상 없다
Break;
Memo1.Lines.Add('Mode ' +
IntToStr(NumModes) + ': ' +
IntToStr(dm.dmBitsPerPel) + ' Bits Per Pixel ' +
IntToStr(dm.dmPelsWidth) + ' x ' +
IntToStr(dm.dmPelsHeight));
Inc(NumModes); // 다음번 video mode의 번호를 나타냅니다
end;
// 선택 가능한 mode의 최소값
SpinEdit1.MinValue := 0;
// NumModes에는 마지막 mode번호보다 1이 큰 mode의 갯수가 들어있음
SpinEdit1.MaxValue := NumModes - 1;
// TDeviceMode 를 배열요소로 NumModes 크기의 동적배열을 만든다
// 위 type 선언문 "TDmArray = array[0..0] of TDeviceMode" 이 동작배열을
// 만들기 위한 선언이며 아래와 같이 실제 메모리를 할당받는다
// DELPHI 4.0 에서는 이런 일련의 동작을 하나로 통합한 동적배열을
// 직접 지원하고 있음
GetMem(lpDmArray, sizeof(TDeviceMode) * NumModes); // 배열의 메모리 할당
FillChar(lpDmArray^, sizeof(TDeviceMode) * NumModes, #0); // 배열의 초기화
// 동적배열에 mode정보를 저장(위의것은 화면에 보여주기 위해 읽은것임)
for i := 0 to (NumModes - 1) do
begin
EnumDisplaySettings(nil, i, lpDmArray[i]);
if (lpDmArray[i].dmBitsPerPel = MyPC_Bits) and
(lpDmArray[i].dmPelsWidth = MyPC_HRes) and
(lpDmArray[i].dmPelsHeight = MyPC_VRes)
then
SpinEdit1.Value := i;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ReturnVal : LongInt;
begin
// 선택한 모드로 화면 변경
ReturnVal := ChangeDisplaySettings(lpDmArray[SpinEdit1.Value],
CDS_UPDATEREGISTRY);
with Memo1.Lines do
begin
case ReturnVal of
DISP_CHANGE_SUCCESSFUL: Add('DISP_CHANGE_SUCCESSFUL');
DISP_CHANGE_RESTART : Add('DISP_CHANGE_RESTART');
DISP_CHANGE_BADFLAGS : Add('DISP_CHANGE_BADFLAGS');
DISP_CHANGE_FAILED : Add('DISP_CHANGE_FAILED');
DISP_CHANGE_BADMODE : Add('DISP_CHANGE_BADMODE');
DISP_CHANGE_NOTUPDATED: Add('DISP_CHANGE_NOTUPDATED');
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// 동적배열의 메모리 해제
FreeMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
영이...
•
1999.05.18 03:12
1
COMMENTS
/
0
LIKES
DBgrid에서 추출한 특정 columns의 합...
한
•
1999.05.18 03:27
영이... wrote: > DBgrid에서 추출한 특정 columns의 합을 구하는 방법..?? > 단.Column의 값들은 sql의 ...
조진희
•
1999.05.18 01:31
1
COMMENTS
/
0
LIKES
우편번호가 바뀌면...
황준동
•
1999.05.18 01:53
조진희 wrote: > 현재 저희가 고객관리 프로그램을 짜고 있는데요.. > 우편번호가 바뀌면 기존 프로그램...
한희영
•
1999.05.18 00:05
1
COMMENTS
/
0
LIKES
Del4의 Decision Cube와 OLAP의 기능차이를....
황준동
•
1999.05.18 01:28
한희영 wrote: > Decision Cube의 기능설명(자세히)과 OLAP에서 제공하는 비정형화된 데이터를 추출하고자...
조창범
•
1999.05.17 23:57
1
COMMENTS
/
0
LIKES
쿼리로 수정후에 ...
황준동
•
1999.05.18 01:26
조창범 wrote: > 안녕하세요. > 본론으로 들어가서 쿼리를 사용 하여 수정을 한후에 다시 검색을 하여도 ...
고승용
1999.05.17 23:37
0
COMMENTS
/
0
LIKES
DLL의MDI Child를 Call하고나면 버튼이 사라지네요??
황준동
•
1999.05.17 23:23
1
COMMENTS
/
0
LIKES
[질문급]어플리케이션서버에서 그림전송
황준동
•
1999.05.18 03:15
황준동 wrote: > 클라이언트에서 어플리케이션 서버의 함수의 파라메터로 그림을 넘겨서, > > 그 그림...
djha
•
1999.05.17 22:17
2
COMMENTS
/
0
LIKES
텍스트에디터에 라인넘버 or 마크?
황준동
•
1999.05.18 01:47
djha wrote: > > 안녕하십니까? 입문한지 얼마 안된 초보입니다. > > 텍스트 에디터를 만들고자 하는...
djha
•
1999.05.18 02:44
초보라서 질문이 엉성했습니다.다시 질문을 드리겠습니다. 텍스트에디트를 만들고자합니다. 그런데 이...
왕초보
1999.05.17 22:16
0
COMMENTS
/
0
LIKES
컴포넌트 깜빡임 제거방법??
이호선
•
1999.05.17 20:38
1
COMMENTS
/
0
LIKES
화면모드를 알아내는 방법
안녕하세요. 현재 화면 모드를 알아 내는 방법이 어떻게 되나요.
김영대
•
1999.05.17 20:54
이호선 wrote: > 안녕하세요. > 현재 화면 모드를 알아 내는 방법이 어떻게 되나요. 안녕하세요 김영...
saint09
•
1999.05.17 20:11
1
COMMENTS
/
0
LIKES
paradox에서의 변수 타입?
황준동
•
1999.05.18 01:56
saint09 wrote: > 안녕하세요 델파이로 db를 작성하려고 하는데 기본적으로 파라독스로 되어 있더군요. 예...
북해
•
1999.05.17 18:55
1
COMMENTS
/
0
LIKES
(왕초보) 메모장에서 문자입력시에..
이정욱
•
1999.05.17 19:44
TMemo의 ImeMode를 imSHanguel 로 줘보세요. ^^ 델4에서는 간단하죠? 북해 wrote: > 안녕하세요. 저는...
북해
•
1999.05.17 18:53
1
COMMENTS
/
0
LIKES
(왕초보)FieldbyName을 사용하려하는데..
이정욱
•
1999.05.17 19:41
델파이의 자동코드완성기는 그 문법에 맞게 출력이 됩니다. 즉, Edit1.Text := Query1. 까지 쳤을때는 Fie...
초심자
•
1999.05.17 18:40
1
COMMENTS
/
0
LIKES
윈98에서의 델파이
redhead
•
1999.05.18 19:16
RAM을 얼마나 쓰시는지? 윈98에서 리소스가 부족하면 그런 현상이 나타나는 것 같던데요.
북해
•
1999.05.17 18:39
2
COMMENTS
/
0
LIKES
(왕초보)서브 폼이 닫힐때...
하윤철
•
1999.05.18 01:14
북해 wrote: > 안녕하세요. 저는 간단한 메모장 프로그램을 만들려고 하는데요, 메인폼에서는 검색을 하고...
이정욱
•
1999.05.17 19:37
Edit을 클릭해도 그 이벤트가 발생하나요? Memo도요? 이상하군요.. Edit에서 Enter를 시면 그 이벤트가 ...
한상훈
•
1999.05.17 12:21
1
COMMENTS
/
0
LIKES
edit필드에 여러값 차례로 보기
이정욱
•
1999.05.17 19:21
Query로 하셨으면 그 Query는 이미 그 조건에 해당하는 데이타만 긁어서 가지고 있습니다. 다음데이타를 ...
이대선
•
1999.05.17 05:18
2
COMMENTS
/
0
LIKES
'CBAA'를 'AABC'로 sort하는 법좀....
황준동
•
1999.05.18 01:45
이대선 wrote: > 'CBAA'를 'AABC'로 쇼트 시키는 법을 알고 싶습니다. > > 꼭 좀 답변해 주세요.. > ...
김영대
•
1999.05.17 17:50
이대선 wrote: > 'CBAA'를 'AABC'로 쇼트 시키는 법을 알고 싶습니다. > > 꼭 좀 답변해 주세요.. > ...
saint09
1999.05.16 22:11
0
COMMENTS
/
0
LIKES
이정욱님 감사드립니다.
saint09
•
1999.05.16 09:37
1
COMMENTS
/
0
LIKES
DrawFocusRect 사용법 정말 모르겠네요
이정욱
•
1999.05.16 11:16
DrawFocusRect는 이렇게 사용하세요. 예를들어 Rect(100,100,200,200)을 Panel에 그린다면... var Rct...
saint09
•
1999.05.16 03:10
1
COMMENTS
/
0
LIKES
델파이에서 페인트 브러쉬의 잘라내기 모양 흉내내기
이정욱
•
1999.05.16 04:48
DrawFocusRect를 이용하시면 됩니다. DrawFocusRect를 이용해서 그린 후 다시 그자리에 DrawFocusRect를 ...
정방현
•
1999.05.16 01:59
4
COMMENTS
/
0
LIKES
동적 sql 사용시
이천주
•
1999.05.17 22:23
저는 이렇게 했읍니다. 두개짜리 따옴표가 아니고 한개짜리를 써야합니다. ss := ' update X...
신호성
•
1999.05.16 06:01
정방현 wrote: > 'cpu'라는 인자를 대입해서 오라클 테이블에 update하고자 합니다. > 실행 error는 Edat...
정방현
•
1999.05.16 20:01
신호성 wrote: > 정방현 wrote: > > 'cpu'라는 인자를 대입해서 오라클 테이블에 update하고자 합니다. ...
김경수
•
1999.05.17 00:26
안녕하세요. parambyname('cpu').asstring~~` 대신에 params[0].asstring 으로 바꾸어서 해보세요.왜그런...
이호선
1999/05/17 20:38
Views
232
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 안녕하세요.
> 현재 화면 모드를 알아 내는 방법이 어떻게 되나요.
안녕하세요 김영대입니다
아래 소스는 화면 모드를 읽고 변경하는 예제입니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Spin, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PdmArray = ^TDmArray;
TDmArray = array[0..0] of TDeviceMode;
var
Form1: TForm1;
lpDmArray: PDmArray;
NumModes: integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
MyPC_DC: THandle; // Display context
MyPC_Bits: Integer; // Bits per pixel
MyPC_HRes: Integer; // Horizontal resolution
MyPC_VRes: Integer; // Vertical resolution
i: integer;
dm : TDeviceMode;
begin
MyPC_DC := Canvas.Handle;
MyPC_Bits := GetDeviceCaps(MyPC_DC, BITSPIXEL); // 각 pixel당 칼러의 비트수
MyPC_HRes := GetDeviceCaps(MyPC_DC, HORZRES); // 화면의 폭(Width)의 비트수
MyPC_VRes := GetDeviceCaps(MyPC_DC, VERTRES); // 화면의 높이(Height)의 비트수
// 내 PC의 video mode 정보
Label1.Caption := Format('%d bits, %d x %d',[MyPC_Bits, MyPC_HRes, MyPC_VRes]);
// 현재 내 PC가 지원할 수 있는 video mode 를 구한다
Memo1.Lines.Clear;
NumModes := 0; // 첫번째 video mode의 번호(0번부터 시작)
while True do
begin
// nil 이면 현재 표시장치(display device)를 나타냅니다
if not EnumDisplaySettings(nil, NumModes, dm) then // False이면 더이상 없다
Break;
Memo1.Lines.Add('Mode ' +
IntToStr(NumModes) + ': ' +
IntToStr(dm.dmBitsPerPel) + ' Bits Per Pixel ' +
IntToStr(dm.dmPelsWidth) + ' x ' +
IntToStr(dm.dmPelsHeight));
Inc(NumModes); // 다음번 video mode의 번호를 나타냅니다
end;
// 선택 가능한 mode의 최소값
SpinEdit1.MinValue := 0;
// NumModes에는 마지막 mode번호보다 1이 큰 mode의 갯수가 들어있음
SpinEdit1.MaxValue := NumModes - 1;
// TDeviceMode 를 배열요소로 NumModes 크기의 동적배열을 만든다
// 위 type 선언문 "TDmArray = array[0..0] of TDeviceMode" 이 동작배열을
// 만들기 위한 선언이며 아래와 같이 실제 메모리를 할당받는다
// DELPHI 4.0 에서는 이런 일련의 동작을 하나로 통합한 동적배열을
// 직접 지원하고 있음
GetMem(lpDmArray, sizeof(TDeviceMode) * NumModes); // 배열의 메모리 할당
FillChar(lpDmArray^, sizeof(TDeviceMode) * NumModes, #0); // 배열의 초기화
// 동적배열에 mode정보를 저장(위의것은 화면에 보여주기 위해 읽은것임)
for i := 0 to (NumModes - 1) do
begin
EnumDisplaySettings(nil, i, lpDmArray[i]);
if (lpDmArray[i].dmBitsPerPel = MyPC_Bits) and
(lpDmArray[i].dmPelsWidth = MyPC_HRes) and
(lpDmArray[i].dmPelsHeight = MyPC_VRes)
then
SpinEdit1.Value := i;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ReturnVal : LongInt;
begin
// 선택한 모드로 화면 변경
ReturnVal := ChangeDisplaySettings(lpDmArray[SpinEdit1.Value],
CDS_UPDATEREGISTRY);
with Memo1.Lines do
begin
case ReturnVal of
DISP_CHANGE_SUCCESSFUL: Add('DISP_CHANGE_SUCCESSFUL');
DISP_CHANGE_RESTART : Add('DISP_CHANGE_RESTART');
DISP_CHANGE_BADFLAGS : Add('DISP_CHANGE_BADFLAGS');
DISP_CHANGE_FAILED : Add('DISP_CHANGE_FAILED');
DISP_CHANGE_BADMODE : Add('DISP_CHANGE_BADMODE');
DISP_CHANGE_NOTUPDATED: Add('DISP_CHANGE_NOTUPDATED');
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// 동적배열의 메모리 해제
FreeMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
end;
end.