Q&A

  • 모니터해상도 변경
안녕하세요...



다름이 아니라...

제PC의 해상도가 1024*768 이거든요...

그런데..델파이에서 이해상도를 조정할수 있습니까..??



예를들어서 어떤버튼을 눌리게 되면

1024*768 에서 800*600 으로 해상도가 바꾸거나...

어나면 800*600에서 1024*768로 바꾸는 그런 것이

델파이에서 가능합니까???



1  COMMENTS
  • Profile
    김영대 1999.10.08 00:56
    // 해상도 변경은 아래 예제와 같습니다

    // 참고로 사용자가 해상도를 변경했는지 검사하는 방법은

    // 제 홈페이지(http://myhome.shinbiro.com/~cozykyd/index.htm) 의

    // "Delphi Tip" 에서 "해상도" 키워드로 검색해 보세요



    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.





    • memogi
    • 1999.10.08 00:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김영대
      1999.10.08 00:56
      // 해상도 변경은 아래 예제와 같습니다 // 참고로 사용자가 해상도를 변경했는지 검사하는 방법은 // 제...
    • 구창민
      1999.10.07 23:07
      장영선 wrote: > 비쥬얼베이직에서는 특정 문자열을 가지고 오는 MID함수라는게 있는데 델파이에서는 특정...
    • 이정욱
      1999.10.07 22:53
      음.. 하도 오래되어서 MID가 모하는 함수였는지 까먹었네요.. 만약 원하는 문자열을 찾는것이라면 POS ...
    • 이상헌
    • 1999.10.07 21:45
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      1999.10.08 20:31
      안녕하십니까? 전에 있었던 제목과 틀려서 알아보질 못했습니다. 2가지 질문이군요, 먼저 제가 말씀드렸...
    • 이주흥
      1999.10.07 23:20
      흠..안녕하세요... 첫번째 질문은 솔직히 이해가 안가구요.. 두번째 질문인 퀵리포트 출력은 간단합니다....
    • 박성태
    • 1999.10.07 21:19
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      1999.10.08 03:55
      박성태 wrote: > 델파이4와 Personal Oracle 7.3.3을 집에 있는 Pc에서 > 쓸려고 Local로 연결할려고 그...
    • 오승섭
      1999.10.08 00:41
      박성태 wrote: > 델파이4와 Personal Oracle 7.3.3을 집에 있는 Pc에서 > 쓸려고 Local로 연결할려고 그...
    • 여용구
    • 1999.10.07 20:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김종환
      1999.10.07 20:14
      여용구 wrote: > 안녕하세요.. > > 델파이를 처음 공부하는 사람입니다. > > 물어볼 것은... 이미...
    • David
    • 1999.10.07 19:48
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.10.07 22:53
      David wrote: > 안녕하십니까? > > Delphi의 Design Time에서 invisible Component(예:TQuery, TTable....
    • David
      1999.10.07 23:31
      구창민님 감사합니다만, 제 프로그램은 실행시 Panel이 움직입니다. 구창민님 답변대로라면, Panel아래 Pa...
    • 구창민
      1999.10.08 00:21
      David wrote: > 구창민님 감사합니다만, 제 프로그램은 실행시 Panel이 움직입니다. > 구창민님 답변대로...
    • 이정욱
      1999.10.07 20:36
      음냐.. 그럼 무쟈게 편하게 하는 방법이 있습니다. 메모뿐 아니라 그림까지 나오는.... XPower라는 컴포...
    • 심동식
    • 1999.10.07 19:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.10.07 20:32
      정확하게 이해가 가지 않습니다. 무슨 컴포넌트를 사용하시는지요? 생성시 폴더값을 넣으시면 당연히 되...
    • 안경옥
    • 1999.10.07 18:49
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박윤종
      1999.10.07 19:10
      안경옥 wrote: > 안녕하십니까..지금 밖에 비가 오는데..우산은 가지고들 나오셨나요?? > 이런날씨에비맞...
    • 이정욱
      1999.10.07 19:08
      안녕하세요? DB를 잘몰라서 두가지를 말씀해 볼께요.. 아래처럼 한번 해보시구요... qrlabel1.capti...
    • 안경옥
      1999.10.07 20:26
      이정욱 wrote: > 안녕하세요? > DB를 잘몰라서 두가지를 말씀해 볼께요.. > > 아래처럼 한번 해보시구...
    • 이정욱
      1999.10.07 20:29
      음.. 그럼 제 생각엔 다른곳에 문제가 있는것 같군요. qrlabel11.caption 이라는 값을 가지고 숫자처럼 활...
    • 김홍진
    • 1999.10.07 09:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박윤종
      1999.10.07 10:19
      김홍진 wrote: > 전문가님들의 고견을 구합니다. > > 질문 1. 디렉토리 생성은 MkDir(Edit1.Tex...
    • jackie
    • 1999.10.07 04:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.10.07 19:12
      당연 가능합니다. BarCode 컴포넌트는 상용도 있고 공개도 있습니다. 그런데 퀵리포트에서 사용하실...
    • 김진철
    • 1999.10.07 03:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.10.07 19:10
      DBMemo를 사용하지 그러세요...?? 만약 DBMemo를 쓰기 싫어서 그러신다면.. mfield 라는 필드를 메모...
    • 오용섭
    • 1999.10.07 03:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박윤종
      1999.10.07 10:42
      오용섭 wrote: > 안녕하세요 > > 이번에 출시된 델파이 5와 4의 호환성은 어느정도인지요.. 구체적으로...
    • 신사
    • 1999.10.07 02:48
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박윤종
      1999.10.07 10:29
      열심이 wrote: 당연한 결과 입니다. 이것을 해결하기 위해서는 모달 폼의 종료시에 메인 폼의 해...
    • 구창민
      1999.10.07 02:02
      손주양 wrote: > 안녕하세요. > 이곳에서 많은 도움을 받고 있습니다. 감사하게 생각합니다. > 알고 싶...
    • 김영대
      1999.10.07 01:58
      손주양 wrote: > 안녕하세요. > 이곳에서 많은 도움을 받고 있습니다. 감사하게 생각합니다. > 알고 싶...