Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
해상도 관한 질문~들어와봐요~
프로그램을 실행을 시켜을때 현 디스플래이 해상도를 알아 보고 싶습니다.
또한 해상도 바꾸는 방법 예)800*600---->640*480이러한 형식을로 하는법
오빠들 부탁해요.....게임을 만드는데 꼭 필요해요....^.^
1
COMMENTS
조규춘
•
2000.07.06 04:03
온달 wrote:
> 프로그램을 실행을 시켜을때 현 디스플래이 해상도를 알아 보고 싶습니다.
> 또한 해상도 바꾸는 방법 예)800*600---->640*480이러한 형식을로 하는법
> 오빠들 부탁해요.....게임을 만드는데 꼭 필요해요....^.^
윽.~! 이름은 온달로 적어 놓구선 왠 오빠들인지? 쩝...
위에 질문에 맞는 예제 입니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(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]);
Label1.Caption := Format('%d x %d',[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.
서경환
2000.07.06 01:54
0
COMMENTS
/
0
LIKES
StringGrid에 MaxLength
어린왕자
2000.07.06 01:52
0
COMMENTS
/
0
LIKES
고수님덜..DBGrid대신 리스트뷰써두 되여?
왕초
2000.07.06 01:42
0
COMMENTS
/
0
LIKES
Host system의 시간을 알아내는 방법????
이경배
2000.07.06 01:39
0
COMMENTS
/
0
LIKES
TQuery사용조회시 커서위치문제
어린왕자
2000.07.06 01:38
0
COMMENTS
/
0
LIKES
쓰레드 강제 종료하는 방법이 뭐가 있나요?
김만업
•
2000.07.06 01:35
2
COMMENTS
/
0
LIKES
unix서버상에 있는 사진파일을 image콤포넌트로 불러오는 방법 좀....
성호종
•
2000.07.07 03:25
김만업 wrote: FTP 를 공부하셔야 겠네요... 일단 FTP콤포넌트가 있으니까 사용법만 익히시면 됩니다. ...
김만업
•
2000.07.07 04:55
우선 답변 감사드립니다. 그런데 ftp콤포넌트를 이용한다는 건 유닉스상에 있는 사진 파일을 pc로 전송한 ...
yosul
•
2000.07.06 01:28
1
COMMENTS
/
0
LIKES
IE의 에디터박스나 메모박스에 다른 어플이 문자를 날려 보낼수 있는지요?
Vagabond
•
2000.07.06 01:31
IE 같은경우에 에디트박스나 그런건 다 핸들을 가진 콘트롤이 아닙니다.(콤보박스 빼고) IE가 그려서 흉...
온달
•
2000.07.06 00:48
1
COMMENTS
/
0
LIKES
해상도 관한 질문~들어와봐요~
프로그램을 실행을 시켜을때 현 디스플래이 해상도를 알아 보고 싶습니다. 또한 해상도 바꾸는 방법 예)800*600---->640*480이러한 형식을로 하는법 오빠들 부탁해요.....게임을 만드는데 꼭 필요해요....^.^
조규춘
•
2000.07.06 04:03
온달 wrote: > 프로그램을 실행을 시켜을때 현 디스플래이 해상도를 알아 보고 싶습니다. > 또한 해상도 ...
어린왕자
•
2000.07.06 00:02
7
COMMENTS
/
0
LIKES
TStringList.SaveToFile의 에러납니다..왜 날까?
어린왕자
•
2000.07.06 00:41
어린왕자
•
2000.07.06 06:49
어린왕자
•
2000.07.06 01:17
몰라
•
2000.07.06 01:27
어린왕자
•
2000.07.06 01:56
몰라
•
2000.07.06 02:06
어린왕자
•
2000.07.06 02:52
castle road
•
2000.07.06 00:01
1
COMMENTS
/
0
LIKES
jpg를 읽을 수 있는 component 있나요?
왕초보
•
2000.07.06 00:24
castle road wrote: > jpg를 읽을 수 있는 component를 찾고 있습니다. > 무료로 component를 받을 수 있...
ssonn
•
2000.07.05 23:54
2
COMMENTS
/
0
LIKES
Excel handling 방법 좀 알려주세요
아세만
•
2000.07.06 01:04
ssonn wrote: > 도와주세요!!! > DBGrid의 내용을 Excel File 로 저장하고 싶은데요....... > 소스는 ...
ssonn
•
2000.07.06 02:24
답변 감사 드립니다. 정말 정말 감사합니다!!! 아세만 wrote: > ssonn wrote: > > 도와주세요!!! ...
won
2000.07.05 23:26
0
COMMENTS
/
0
LIKES
table의 자릿수가 바뀐 후 delphi report 에서 어떻게.........
나재호
2000.07.05 23:15
0
COMMENTS
/
0
LIKES
DBGrid scroll bar가 이상해요!
조현석
•
2000.07.05 22:50
1
COMMENTS
/
0
LIKES
caFree 안먹는데요... 도와주세요
최용일
•
2000.07.05 23:32
안녕하세요. 최용일입니다. 변수가 참조하는 객체가 소멸된다고해도 변수에 nil이 들어가지는 않아요......
김병결
•
2000.07.05 22:43
2
COMMENTS
/
0
LIKES
투명창에서 폼바탕 갱신하는 법
왕초보
•
2000.07.05 23:33
김병결 wrote: > * 사용환경 : 델파이5 / Windows 98 > > 델파에서 투명창을 구현하려고 하니까 > 보...
김병결
•
2000.07.07 09:46
위의 답변은 감사합니다. 하지만 이렇게 이렇게 해라라고 말씀한 하시면 전 어떻게 하라고 하시는지 저도...
울분
•
2000.07.05 22:16
5
COMMENTS
/
0
LIKES
정말 가슴아픈 이야기입니다
김지승
•
2000.07.05 22:52
저는 한국해양대학교 졸업생 입니다 93학번이구 전자통신공학과를 97년 3월 졸업했습니다 저도 이글...
박종필
•
2000.07.05 22:45
사건의 진상이 그렇다면 해양대 게시판에 집중적으로 글을 올립시다. 그런 인간은 가만히 놔두면 안됩니...
사발우성
•
2000.07.05 22:31
흠... 진짜루 용서가 안되는군엽... 어떻게 이럴수가 있나엽..... 그게 사람으로서 할짓인지...ㅠ.ㅠ ...
사발우성
•
2000.07.05 23:03
가짜라구 하더군여 ㅠ.ㅠ 사발 진짜루 바보당 ㅠ.ㅠ 관리자님 삭제 부탁함당......ㅠ,.ㅠ 단...
임형호
•
2000.07.05 23:26
사발우성 wrote: > 가짜라구 하더군여 ㅠ.ㅠ > > 사발 진짜루 바보당 ㅠ.ㅠ > > 관리자님 삭제 ...
박종필
2000.07.05 21:45
0
COMMENTS
/
0
LIKES
cgi
초보
2000.07.05 21:42
0
COMMENTS
/
0
LIKES
socket.handle의 값의 의미
정말 초보....
•
2000.07.05 21:26
1
COMMENTS
/
0
LIKES
다른폼의 텍스트 값을 불러올 경우.......
아세만
•
2000.07.05 22:05
정말 초보.... wrote: > 안녕하세요 > 어제와 더불어 또 오늘 적네요.. > Form1에 있는 c_rate라는 텍스...
염동선
•
2000.07.05 21:15
3
COMMENTS
/
0
LIKES
SaveDialog 에서 저장할때...
최용일
•
2000.07.05 21:42
안녕하세요. 최용일입니다. WriteLn으로 저장하면 당연히 CR/LF가 들어갑니다. 이걸 안들어가게 할려면...
염동선
•
2000.07.05 23:02
고맙습니다......^.^ 님이 하시는일 만사형통 하시길.... 최용일 wrote: > 안녕하세요. 최용일입...
이상우
•
2000.07.05 21:26
염동선 wrote: > 안녕하십니까..델파이 고수님들... > > 다름이 아니고, > > SaveDailog 를 사용하...
온달
2000/07/06 00:48
Views
252
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 프로그램을 실행을 시켜을때 현 디스플래이 해상도를 알아 보고 싶습니다.
> 또한 해상도 바꾸는 방법 예)800*600---->640*480이러한 형식을로 하는법
> 오빠들 부탁해요.....게임을 만드는데 꼭 필요해요....^.^
윽.~! 이름은 온달로 적어 놓구선 왠 오빠들인지? 쩝...
위에 질문에 맞는 예제 입니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Spin;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
SpinEdit1: TSpinEdit;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(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]);
Label1.Caption := Format('%d x %d',[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.
행복하셔요 규춘올림