프로그래밍/델파이 80

GetSystemTime과 TDateTime, FILETIME

GetSystemTime으로 얻은 SYSTEMTIME 구조체를 사용할 때, 주의해야할 점은 SYSTEMTIME 구조체의 시각 정보가 UTC 표준 시각이라는 점입니다. 우리가 일반적으로 사용하는 TDateTime이나, FILETIME은 현재 TimeZone의 시각이므로, 지역별로 차이가 존재하게 됩니다. 세계 각 지역별 UTC 시각와의 차이는 http://rimy.co.kr/entry/UTC-%EA%B8%B0%EC%A4%80-%EC%84%B8%EA%B3%84-%EC%8B%9C%EA%B0%84-%EC%B0%A8 여기서 확인해 보시면 됩니다. 이 때문에 GetSystemTime이나, FILETIME에서 변환된 SYSTEMTIME을 델파이의 SystemTimeToDateTime 함수에 논리적 버그가 생깁니다. ..

FastMM4 - 4.90 배포

FastMM4 - 4.90 안정화 버전이 배포되었네요. 다음 주소에서 다운로드 받을 수 있습니다. https://sourceforge.net/project/showfiles.php?group_id=130631&release_id=625112 이번에 변경된 내용은 아래와 같습니다. Version 4.90 (9 September 2008): - Added logging of the thread ID when capturing and displaying stack traces. (Suggested by Allen Bauer and Mark Edington.) - Fixed a Delphi 5 compiler error under FullDebugMode. (Thanks to Maurizio Lotauro an..

URLOpenBlockingStream을 이용하여 스트림으로 다운로드 받기

URLMon 유닛에 보면, URLOpenBlockingStream 함수가 있습니다. 이 함수를 이용하면 인터넷에 있는 파일을 URL로 스트림으로 다운로드 받을 수 있습니다. 아래와 같은 코드를 참고하여 작성하면 되겠습니다. procedure TForm1.btnDownloadClick(Sender:TObject); var hRet: HRESULT; AMemoryStream : TMemoryStream; AStream: IStream; AStatStg: TStatStg; nRead:int64; begin AMemoryStream := TMemoryStream.Create; try hRet := URLOpenBlockingStream(nil, PChar(ieaURL.Text), AStream, 0, self)..

Delphi 7에서 일반 소스로 배포하는 패키지 설치하는 방법

일반적인 공개 패키지들은 모두 소스 자체를 포함하여 패키지를 배포합니다. Indy9를 별도 패키지로 설치하는 과정을 예를 들어 설명하겠습니다. 1. 소스가 포함된 공개 패키지를 설치하기 위하여 먼저 패키지를 해당 사이트에서 다운로드 받습니다. 인디 9의 경우, 다음 주소에서 다운로드 받을 수 있습니다. http://www.indyproject.org/Sockets/Download/Files/Indy9.EN.aspx 2. 다운로드 받은 압축 파일을 적당한 디렉토리에 풉니다. 필자는 9.0.18 Source code distribution 압축 파일을 다운로드 받아서 설치하였습니다. 3. 소스가 있는 경로를 델파이의 Tools > Environment Options 메뉴의 Library 탭에 Library ..

스레드 내부에서 Sleep 하면 suspended 상태인가?

스레드를 사용하다보면 내부에서 Sleep로 일정 시간 기다리게 하는 상황이 발생하는데... Sleep로 작업 스레드가 중지 되어 있는 상태에 스레드 내부 속성중 Suspended 속성이 true인지 궁금하였다. 결론적으로 Sleep과 스레드의 Suspended와는 아무런 연관이 없다. Suspended에 영향을 주는 것은 오직 Suspend 메소드를 이용하여 그 상황을 만드는 것 뿐이다. Suspend 메소드를 호출하여 스레드가 일시 정지된 상태에서 다시 스레드를 동작시키기 위해서는 Resume 메소드를 호출해 주면 된다. 아래 코드는 Sleep한 스레드가 Suspended 상태인지 검사해본 예제 소스 이다. unit Unit1; interface uses Windows, Messages, SysUtil..

윈도우즈 이벤트에 내 프로그램의 로그 기록하기(SvcMgr.TEventLog)

unit SvcMgr; TEventLog 클래스 이용하여 다음과 같이 작성하면 내 프로그램에서 원하는 이벤트 로그를 남길 수 있습니다. FEventLog := TEventLog.Create("Test Event Program"); FEventLog.LogMessage("테스트 오류 이벤트 메시지"); FEventLog.LogMessage("테스트 경고 이벤트 메시지", EVENTLOG_WARNING_TYPE, 120); // ID = 120 상수 상수값 설명 EVENTLOG_ERROR_TYPE $0001 오류 이벤트 EVENTLOG_WARNING_TYPE $0002 경고 이벤트 EVENTLOG_INFORMATION_TYPE $0004 정보 이벤트 EVENTLOG_AUDIT_SUCCESS $0008 감사 ..

주어진 프로세스 ID의 IE에 대한 IWebBrowser2 구하기

function GetWebBrowser2(nProcessID: THandle):IWebBrowser2; var x: Integer; AShellWindows: IShellWindows; AWebBrowser2:IWebBrowser2; dwProcessID: Cardinal; begin Result := nil; AShellWindows := CoShellWindows.Create; for x := 0 to AShellWindows.Count - 1 do begin if ((AShellWindows.Item(x) nil) and (AShellWindows.Item(x).QueryInterface(IWebbrowser2, AWebBrowser2) = S_OK)) then begin GetWindowThre..

TEmbeddedWB에서 자바스크립트 오류 무시하기

TEmbeddedWB를 사용하여 네비게이션을 하던 중에 스크립트 오류창이 나타나는 경우가 있습니다. 이 창이 나타나지 않도록 DownloadOptions의 DLCTL_SLIENT를 설정해 놓는 경우가 있는데, 이런 경우 자바스크립트 오류가 한번 발생하면 다음부터 스크립트가 제대로 실행되지 않는 문제가 있습니다. 자바 스크립트는 그대로 동작하고, 오류창만 표시하지 않기 위해서는 OnScriptError 이벤트 핸들러를 설정해 주어야 하니다. procedure TForm1.EmbeddedWB1ScriptError(Sender: TObject; ErrorLine, ErrorCharacter, ErrorCode, ErrorMessage, ErrorUrl: String; var ContinueScript, Sho..

부팅된 시각 알아내기

다음과 같은 선언부를 별도의 유닛으로 만들거나, 관련 부분에 추가해 줍니다. type NET_API_STATUS = DWORD; _STAT_SERVER_0=record sts0_start: DWORD; // the time when statistics collection started sts0_fopens: DWORD; // number of times a file is opened on a server sts0_devopens: DWORD; // number of times a server device is opened sts0_jobsqueued: DWORD; // number of server print jobs spooled sts0_sopens: DWORD; // number of times t..

728x90