Q&A

  • 화면모드를 알아내는 방법
안녕하세요.

현재 화면 모드를 알아 내는 방법이 어떻게 되나요.

1  COMMENTS
  • Profile
    김영대 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.



    • 영이...
    • 1999.05.18 03:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 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
    • 황준동
      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.18 03:15
      황준동 wrote: > 클라이언트에서 어플리케이션 서버의 함수의 파라메터로 그림을 넘겨서, > > 그 그림...
    • djha
    • 1999.05.17 22:17
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      1999.05.18 01:47
      djha wrote: > > 안녕하십니까? 입문한지 얼마 안된 초보입니다. > > 텍스트 에디터를 만들고자 하는...
    • djha
      1999.05.18 02:44
      초보라서 질문이 엉성했습니다.다시 질문을 드리겠습니다. 텍스트에디트를 만들고자합니다. 그런데 이...
    • 이호선
    • 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
    • 황준동
      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
    • 이정욱
      1999.05.17 19:41
      델파이의 자동코드완성기는 그 문법에 맞게 출력이 됩니다. 즉, Edit1.Text := Query1. 까지 쳤을때는 Fie...
    • 초심자
    • 1999.05.17 18:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 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
    • 이정욱
      1999.05.17 19:21
      Query로 하셨으면 그 Query는 이미 그 조건에 해당하는 데이타만 긁어서 가지고 있습니다. 다음데이타를 ...
    • 이대선
    • 1999.05.17 05:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      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
    • 이정욱
      1999.05.16 11:16
      DrawFocusRect는 이렇게 사용하세요. 예를들어 Rect(100,100,200,200)을 Panel에 그린다면... var Rct...
    • 이정욱
      1999.05.16 04:48
      DrawFocusRect를 이용하시면 됩니다. DrawFocusRect를 이용해서 그린 후 다시 그자리에 DrawFocusRect를 ...
    • 정방현
    • 1999.05.16 01:59
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이천주
      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 으로 바꾸어서 해보세요.왜그런...