Q&A

  • [급해요.. 도와주세요..]
제가 델파이 헬펑에서 음력<=>양력 로직을 받아서 작업을 하고 있어요..

근데 아무리 봐도 모르겠어요...

도대체.................

음력 생일을 양력으로 바꿔서 조회를 해야 하는데...

답변으로 올려주신 로직이 전혀 이해가 되지 않아요..

기존 양력생일을 저장하는 곳은 어딘지...

시간은 얼마 없는데 맘만 급해서 더 안되요...

혹 다른 쉬운 방법이나,, 이 로직으로 성공하신분 조언 좀 부탁드립니다...

델파이 헬퍼의 게시 자료 번호...1번이예요..



2  COMMENTS
  • Profile
    구창민 1999.05.24 01:16
    조진희 wrote:

    > 제가 델파이 헬펑에서 음력<=>양력 로직을 받아서 작업을 하고 있어요..

    > 근데 아무리 봐도 모르겠어요...

    > 도대체.................

    > 음력 생일을 양력으로 바꿔서 조회를 해야 하는데...

    > 답변으로 올려주신 로직이 전혀 이해가 되지 않아요..

    > 기존 양력생일을 저장하는 곳은 어딘지...

    > 시간은 얼마 없는데 맘만 급해서 더 안되요...

    > 혹 다른 쉬운 방법이나,, 이 로직으로 성공하신분 조언 좀 부탁드립니다...

    > 델파이 헬퍼의 게시 자료 번호...1번이예요..

    >



    조진희님 안녕하세요?

    아래 내용은 전철호님이 작성하신 모듈입니다.

    보시고 참조하세요.



    =======================================================

    양력을 음력으로 바꾸는 Procedure입니다.

    양력이 1943년부터 2043년까지만 됩니다.

    아마 이정도면 이세상에 내가 존재할때까지는 충분하지

    않을까?..



    aYear,aMonth,aDay는 입력 파리미터

    lYear,lMonth,lDay는 출력 파리미터



    예를 들어서

    lunar(1999,2,16,ly,lm,ld)라고 입력하면

    음력일자인 ly:1999,lm:1,ld:1이 입력됩니다.



    procedure lunar(const aYear,aMonth,aDay : integer; var lYear,lMonth,lDay : real);

    var

    i2, i3, i4, j2 : integer;

    a, lm : real;

    const

    lum : array[0..1236] of real =

    (1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0.5,1,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1.5,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,

    0,0,1,0,1,0,1,1.5,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,

    0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0.5,0,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0.5,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,

    //*57년~62년*

    0,1,0,1,0,1,1,0,1.5,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1.5,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,

    0,1,0,1,1.5,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,0,1.5,0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1.5,0,1,0,1,0,

    1,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,0,1.5,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1.5,1,0,1,1,0,0,1,0,

    0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1.5,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0.5,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,

    1,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1.5,0,1,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1.5,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,0,1,1,

    0,1,0,0,1,0,1.5,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1.5,1,0,0,1,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,

    1,0,0,1.5,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1.5,0,1,1,0,1,0,1,0,0,1,0,1,0,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,1.5,0,0,1,0,0,0,1,

    //*99년~04년*

    0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1.5,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1.5,0,0,1,0,1,0,1,0,1,0,

    1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,1,0,1,0,1.5,0,0,1,0,0,1,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1.5,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,

    0,1,0,0,1,0,1,1,0,1,0,1,0,1,0,0.5,0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0.5,1,0,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,0,1,0,0,

    0,1,1,0,1,1.5,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,1,0,0,1.5,0,1,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,

    1,0,1.5,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,1.5,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,1,1,0,0,0,1,0,0,1,0,1.5,1,0,1,1,0,0,1,

    0,0,1,0,0,1,1,0,1,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,1.5,0,1,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,1,0,1,0,1.5,0,0,0,1,0,1,0,1,1,0,1,0,1,0,0,0,1,

    //*35년~40년*

    0,1,0,1,1,0,1,1,0,0,1,0,0,0,1,0,1,1,0.5,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1.5,0,1,0,1,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,

    0,1,1,0,1,0,0,1,0,0,1,0,1,0,1.5,1,0,1,0,1,0,0,0,1,0);

    begin

    lYear := 0;

    lMonth := 0;

    lDay := 0;

    if (aYear < 1943) or (aYear > 2043) then

    System.Exit;

    i3 := 0;

    lm := 0;

    a := 0;



    i2 := (aYear - 1943) div 4;

    j2 := i2 * 1461;

    i2 := aYear - i2 * 4;



    if (i2 = 1945) then

    j2 := j2 + 731

    else

    if (i2 = 1944) then

    begin

    if ((aMonth >= 3) or ((aMonth = 2) and (aDay = 29))) then

    j2 := j2 + 366

    else

    j2 := j2 + 365;

    end

    else

    if (i2 = 1946) then

    j2 := j2 + 1096;



    case aMonth of

    1 : j2 := j2 - (31 - aDay + 4);

    2 : j2 := j2 + (aDay - 4);

    3 : j2 := j2 + (aDay + 24);

    4 : j2 := j2 + (aDay + 55);

    5 : j2 := j2 + (aDay + 85);

    6 : j2 := j2 + (aDay + 116);

    7 : j2 := j2 + (aDay + 146);

    8 : j2 := j2 + (aDay + 177);

    9 : j2 := j2 + (aDay + 208);

    10: j2 := j2 + (aDay + 238);

    11: j2 := j2 + (aDay + 269);

    12: j2 := j2 + (aDay + 299);

    end;



    i2 := 0;

    while i2 < 1237 do

    begin

    a := 30 - lum[i2];

    if (a <> 29) and (a <> 30) then

    a := a + 0.5;

    lm := lm + a;

    if (lm >= j2) then

    break;

    Inc(i2);

    end;



    lm := a - (lm - j2);



    Inc(i2);

    i4 := 1;

    while i4 <= i2 do

    begin

    if (i4 = i2) then

    begin

    lYear := 1943 + ((i4 - i3) div 12);

    if (lum[i4-1] = 0.5) or (lum[i4-1] = 1.5) then

    begin

    lMonth := (i4 - (i3 + 1)) mod 12;

    Dec(i3);

    end

    else

    lMonth := (i4 - i3) mod 12;

    if (lMonth = 0) then

    lMonth := 12;

    end;



    if (lum[i4-1] = 0.5) or (lum[i4-1] = 1.5) then

    begin

    Inc(i3);

    if (i4 = i2) then

    lMonth := lMonth + 0.5;

    end;

    Inc(i4);

    end;

    lDay := lm;

    end;





  • Profile
    초보 1999.05.25 10:18
    정말 감사합니다..

    훨씬 이해가 가는군요.. 근데 저희 초보들은 파라미터는 쿼리 할때 변수사용하려고 사용해 보고 개념이 잘 정리되지 않아 여전히 어려움이 있어요..

    한가지 질문드릴께요..

    저희들 생각에는 테이블에 저장되어 있는 음력의 생일을 변환해서 양력의 필드에 저장해써 사용하다가 해마다 그 값을 클리어 하고 갱신해야 할거라 생각해요..

    그런데 답변으로 주신 자료를 효과적으로 사용하지 못하고 있어요..

    제 옆 짝궁도 어렵데요..



    혹시~~~ 음력--> 양력은 없으세요..

    그리구 저희들의 프로그램 진행순서가 문제가 있나요..

    음력생일은 해마다 양력이 틀리잖아요.. 아닌가요.. (^_^)

    좀 더 여유를 갖고 해야 하는데...

    • 이상석
    • 1999.05.24 19:17
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 모승열
      1999.05.24 20:11
      메인윈도우의 name이 FrmMain, 자식윈도우 name이 FrmChild라면 . . . implementation uses uChild;//...
    • 이상석
      1999.05.24 22:04
      모승열 wrote: > 메인윈도우의 name이 FrmMain, 자식윈도우 name이 FrmChild라면 > . > . > . > imple...
    • 조용덕
    • 1999.05.24 19:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 22:04
      아래를 참고하세요. 알맞게 고쳐서 사용하세요. procedure DrawIcon(Fs: String); var Icon ...
    • 이미영
    • 1999.05.24 18:07
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 18:40
      GetFocus를 사용해 보세요. GetFocus를 하면 현재 키보드입력상태에 있는 콘트롤의 핸들값을 반환합니다. ...
    • 이미영
      1999.05.24 22:08
      Procedure MessageHandler(mm: Tmessage); var CHandle: HWND; Begin CHandle := GetFocus(); ...
    • 이정욱
      1999.05.24 22:22
      아래를 참고하세요. 쩝.. 근데 저 안 멋져요.. ^^; procedure SendData(TargetWnd : HWnd; StrMsg: str...
    • 최장민
    • 1999.05.24 17:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 18:57
      TMediaPlayer를 보면 OnNotify 이벤트가 있습니다. 이곳에서 코딩을 해주시면 되는데... 예를들면.. pro...
    • 하명훈
    • 1999.05.24 15:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 18:43
      데이타베이스는 어떤것을 사용하셨나요? 혹시 ODBC로 연결을 하셨는지요? 짐작이 가는것이라면 맨 처음 ...
    • 이정현
    • 1999.05.24 11:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 18:45
      AsMemo말고 AsString으로 해보세요. Query1.ParamByName('N3').AsString := Memo1.Text; //메모... 그리...
    • VMNT
    • 1999.05.24 08:56
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 19:05
      아마도 생성은 하셨지만 어느순간에 지워야 하는지를 여쭙는것 같습니다. 그렇다면 이렇게 해보세요. Chi...
    • 영인
    • 1999.05.24 06:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 신인재
      1999.05.24 08:42
      영인 wrote: > 집합형 변수중에서 궁금한게 있는데요...빨리 답을 좀 알아야 하는 상황이라서......어느 ...
    • 박용근
    • 1999.05.24 02:37
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 모승열
      1999.05.24 19:56
      박용근 wrote: > 안녕하세요. > 스트링그리드에서 정렬을 할려고 하는데 잘 되지 않아요. > 정렬하는 ...
    • 김우철
      1999.05.24 11:21
      정확히 어떤 내용인지 모르겠지만, 혹시 도움이 될까 해서 적습니다. db에 있는 데이터라면 SQL의 Order B...
    • 이호선
    • 1999.05.23 23:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 01:08
      이호선 wrote: > 안녕하세요.. > 시스템 디렉토리(예 : C:Windows 또는 C:WINDOWSSYTEM )을 얻어올수 있...
    • 초심
      1999.05.24 00:15
      이호선 wrote: > 안녕하세요.. > 시스템 디렉토리(예 : C:Windows 또는 C:WINDOWSSYTEM )을 얻어올수 있...
    • 조진희
    • 1999.05.23 21:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.24 01:16
      조진희 wrote: > 제가 델파이 헬펑에서 음력양력 로직을 받아서 작업을 하고 있어요.. > 근데 아무리 봐...
    • 초보
      1999.05.25 10:18
      정말 감사합니다.. 훨씬 이해가 가는군요.. 근데 저희 초보들은 파라미터는 쿼리 할때 변수사용하려고 사...
    • 초보
    • 1999.05.23 08:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 초심
      1999.05.24 00:40
      초보 wrote: > 저희가 개발중인 프로그램의 프로젝트 이름을 바꾸려고 해요... > 어디를 바꾸면 되는지요...
    • 초보
      1999.05.24 08:05
      고맙습니다.. 근데요... 한글은 안되나요.. 그래도...정말 정말 고마와요...
    • 박성식
    • 1999.05.23 07:01
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 01:10
      아스키 문자라는것이.. 아스키 코드를 말씀하시나요? 그렇다면... ord 를 사용하시면 됩니다. 단, Ord...
    • 박성식
      1999.05.27 23:09
      이정욱 께서 말씀하시기를... > 아스키 문자라는것이.. 아스키 코드를 말씀하시나요? > 그렇다면... > ...
    • 이정욱
      1999.05.27 23:28
      온라인 상에서 직접 작성하는것이라서 수정이 필요할 수 있습니다. function StrToAsc(Str : String) : ...
    • 안명호
    • 1999.05.23 06:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.05.24 01:12
      SetForegroundWindow 를 사용하세요. 메세지 박스가 뜨기직전에 해주세요. SetForgroundWindow(Handle); ...
    • 안명호
    • 1999.05.23 00:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      1999.05.24 01:14
      안명호 wrote: > 컨트롤 내에서가 아니라... > 프로그램 외부에서 예를 들어 탐색기에서 > 파일을 드래...