Q&A

  • MDI에서 F1을 누르면 HELP실행되게하고 싶어요..
안녕하세요~~



새천년이 시작되었습니다..

모두들 멋진 새천년 맞으셨길 바라면서 한가지 여쭙겠습니다..



다름이 아니오라..

MDI에서 F1을 누르면 ACTIVE되어 있는 FORM의 NAME을 이용 그 화일을 불러오려합니다..

만약 FORM의 NAME이 HH.TXT라면 HH.TXT를 부르는 것이지요..

근데 HH.TXT를 부를 수는 있겠는데 (ShellExecute이용..)



하나..ACTIVE되어 있는 FORM의 NAME을 어케 가져와야하는지..

(그 폼은 여러 판넬이 CLIENT로 덮혀있습니다..)

둘..F1을 눌렀다는걸 MDI에서 어케 인식하는지..

(KEYDOWN/KEYPRESS EVENT사용했는데.. 아무리 F1을 눌러도 그 프로시져를 타질

않네요..)



또하나..

이건 제가 예전에 올려놓은 질문인데요..

아직 답변이 없으셔서 여기에다 붙여놓을께요.

이것두 좀 봐 주세요..

그럼 감사합니다..



일반 오라클에서

TRUNC(112,-1) => 110 TRUNC(115,-1) => 110

ROUND(112,-1) => 110 ROUND(115,-1) => 120

됩니다..



이런걸 델파이에서 구현하고 싶은데..

함수 TRUNC, ROUND, INT는 아닌거 같구..

뭐 다른 좋~은 함수 있으면 갈켜주십시요~~



그럼 수고하세요..



3  COMMENTS
  • Profile
    구창민 2000.01.05 22:12
    김지현 wrote:

    > 안녕하세요~~

    >

    > 새천년이 시작되었습니다..

    > 모두들 멋진 새천년 맞으셨길 바라면서 한가지 여쭙겠습니다..

    >

    > 다름이 아니오라..

    > MDI에서 F1을 누르면 ACTIVE되어 있는 FORM의 NAME을 이용 그 화일을 불러오려합니다..

    > 만약 FORM의 NAME이 HH.TXT라면 HH.TXT를 부르는 것이지요..

    > 근데 HH.TXT를 부를 수는 있겠는데 (ShellExecute이용..)

    >

    > 하나..ACTIVE되어 있는 FORM의 NAME을 어케 가져와야하는지..

    > (그 폼은 여러 판넬이 CLIENT로 덮혀있습니다..)

    > 둘..F1을 눌렀다는걸 MDI에서 어케 인식하는지..

    > (KEYDOWN/KEYPRESS EVENT사용했는데.. 아무리 F1을 눌러도 그 프로시져를 타질

    > 않네요..)

    >

    > 또하나..

    > 이건 제가 예전에 올려놓은 질문인데요..

    > 아직 답변이 없으셔서 여기에다 붙여놓을께요.

    > 이것두 좀 봐 주세요..

    > 그럼 감사합니다..

    >

    > 일반 오라클에서

    > TRUNC(112,-1) => 110 TRUNC(115,-1) => 110

    > ROUND(112,-1) => 110 ROUND(115,-1) => 120

    > 됩니다..

    >

    > 이런걸 델파이에서 구현하고 싶은데..

    > 함수 TRUNC, ROUND, INT는 아닌거 같구..

    > 뭐 다른 좋~은 함수 있으면 갈켜주십시요~~

    >

    > 그럼 수고하세요..

    >



    전역핫키를 이용해 보세요.

    MDI에서는 안 해봤지만 될거 같네요.

    이곳 문답란에서 '전역핫키'라고 입력하고 검색해보세요.

    아마 찾으실수 있을 겁니다.



    그리고 말씀하신 Trunc, Round는 델파이함수에도 있습니다.

    아니면 0.05를 더하구 마지막 자리를 잘라도 되구요..

    방법은 많겠군요. 음..제가 지금 제대로 대답드리고 있는거 맞나요?

    그럼 즐거운 프로그래밍 되시길~

  • Profile
    김지현 2000.01.05 22:48
    구창민 wrote:

    > 김지현 wrote:

    > > 안녕하세요~~

    > >

    > > 새천년이 시작되었습니다..

    > > 모두들 멋진 새천년 맞으셨길 바라면서 한가지 여쭙겠습니다..

    > >

    > > 다름이 아니오라..

    > > MDI에서 F1을 누르면 ACTIVE되어 있는 FORM의 NAME을 이용 그 화일을 불러오려합니다..

    > > 만약 FORM의 NAME이 HH.TXT라면 HH.TXT를 부르는 것이지요..

    > > 근데 HH.TXT를 부를 수는 있겠는데 (ShellExecute이용..)

    > >

    > > 하나..ACTIVE되어 있는 FORM의 NAME을 어케 가져와야하는지..

    > > (그 폼은 여러 판넬이 CLIENT로 덮혀있습니다..)

    > > 둘..F1을 눌렀다는걸 MDI에서 어케 인식하는지..

    > > (KEYDOWN/KEYPRESS EVENT사용했는데.. 아무리 F1을 눌러도 그 프로시져를 타질

    > > 않네요..)

    > >

    > > 또하나..

    > > 이건 제가 예전에 올려놓은 질문인데요..

    > > 아직 답변이 없으셔서 여기에다 붙여놓을께요.

    > > 이것두 좀 봐 주세요..

    > > 그럼 감사합니다..

    > >

    > > 일반 오라클에서

    > > TRUNC(112,-1) => 110 TRUNC(115,-1) => 110

    > > ROUND(112,-1) => 110 ROUND(115,-1) => 120

    > > 됩니다..

    > >

    > > 이런걸 델파이에서 구현하고 싶은데..

    > > 함수 TRUNC, ROUND, INT는 아닌거 같구..

    > > 뭐 다른 좋~은 함수 있으면 갈켜주십시요~~

    > >

    > > 그럼 수고하세요..

    > >

    >

    > 전역핫키를 이용해 보세요.

    > MDI에서는 안 해봤지만 될거 같네요.

    > 이곳 문답란에서 '전역핫키'라고 입력하고 검색해보세요.

    > 아마 찾으실수 있을 겁니다.

    >

    > 그리고 말씀하신 Trunc, Round는 델파이함수에도 있습니다.

    > 아니면 0.05를 더하구 마지막 자리를 잘라도 되구요..

    > 방법은 많겠군요. 음..제가 지금 제대로 대답드리고 있는거 맞나요?

    > 그럼 즐거운 프로그래밍 되시길~



    구창민님의 답변 감사합니다..

    근데.. 제가 델파이를 시작한지 얼마되지 않아서 그런데요..

    핫키라는 것에대한 설명좀 부탁드립니다.. 소스에대한 설명도 함께면 더 좋겠구요..

    사실 여기저기 찾아보긴했는데.. 어째 모호하게만 느껴지고 잘 모르겠네요..



    음.. 그리구 델파이에서의 Trunc, Round는

    단순히 소수점 아래 숫자에대해서만 적용되는거 같더라구요..

    근데 제가 원하는건 소수점 아래가 아니라 일자리에서의 Trunc, Round거든요..

    예를 들어

    TRUNC(112,-1) => 110 TRUNC(115,-1) => 110

    ROUND(112,-1) => 110 ROUND(115,-1) => 120

    거요..



    근데 델파이에서는

    TRUNC(112.5) => 112

    ROUND(112.5) => 113

    이렇게만 되는거 같더라구요..



    그럼.. 감사하구요.. 수고하세요..





  • Profile
    구창민 2000.01.06 02:04
    구창민입니다.

    먼저 말씀하신 반올림에 대해 말씀드릴께요.

    그건 그냥 숫자 5를 더하면 간단히 해결 되잖아요.

    예를 들어 112 라는 숫자가 있다면,

    112 + 5 = 117 <-- 마지막 자리수만 0 으로 바꿔 버리면 원하는 결과가 되죠.

    만약 숫자가 116 이었다면 116 + 5 = 121 이 되므로

    역시 마지막 자리수를 0으로 바꾸면 결과는 120. 원하는 결과가 되죠.

    한번 해보시구 안되면 다시 질문올리세요.





    그리고, 핫키에 대해 모든 설명을 다 드리려면 매우 힘이 드니

    대충만 말씀드릴께요. 그리고, 간단한 예제와 함께 주석을 달죠.

    먼저 윈도우란 놈은 키를 누르면 등록된 핫키를 찾기 위해

    모든 쓰레드의 핫키를 뒤져요. 그러다가 찾으면 WM_HOTKEY 메시지를

    해당 쓰레드의 메시지큐에 쑤셔넣고, 만약 이미 그런 핫키가 있을 때는

    등록이 안되죠..



    그럼, 등록되었다 치고,

    WM_HOTKEY 메시지를 처리는 자주 사용하는 메세지를 가로채는 방식으로..

    에궁.. 말이 넘 많아지네요. 소스를 보면서 알아보지요.

    생각보다는 간단해요.



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;



    type

    TForm1 = class(TForm)

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    private

    { Private declarations }

    public

    //핫키를 눌렀을때 반응할 메세지 핸들러 선언

    procedure WMHotKey(var Message: TWMHotKey); message WM_HotKey;

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.WMHotKey(var Message: TWMHotKey);

    begin

    //핫키를 눌렀을때 반응을 처리할 프로시져

    //여기서 현님이 처리하실 내용을 기술하시면 됩니다.

    Show;

    ShowMessage('HotKey를 눌렸당~');

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    //메인 폼이 생성될때 자신이 원하는 키를 핫키로 등록한다.

    //RegisterHotKey 함수 사용.

    //GlobalAddAtom이라는 함수는 도움말을 보면서 공부해보세요.

    if RegisterHotKey(Self.Handle, GlobalAddAtom('KimJiHyunKey'), 0, VK_F1) = False then

    ShowMessage('핫키등록 실패');

    end;



    procedure TForm1.FormDestroy(Sender: TObject);

    begin

    //시스템에 등록되어 있는 핫키를 제거합니다.

    UnRegisterHotKey(Self.Handle, GlobalAddAtom('KimJiHyunKey'));

    end;



    이렇게 하시면 F1키를 눌렀을때 지현님이 원하시는

    특정작업을 하실수 있을 겁니다.



    위의 소스를 바로 사용해보려면, 새로운 어플리케이션을 열고,

    그냥 빈 FormCreate이벤트 핸들러를 만들고 FormDestory핸들러를 만들고,

    이거 만들줄은 아시죠? 그냥 이벤트에 더블클릭만 하시면 됩니다.



    그리고는 그냥 위의 소스를 그대로 복사해서 그 열린 Unit을 깨끗이 지우고

    엎어 씌우세요.

    그리고, 바로 실행시키시면 실행될겁니다.



    그럼, 이해되셨을 줄 믿고,

    항상 즐거운 프로그래밍 바랍니다~~