본문 바로가기

Delphi Tip/+Tip62

윈도우 포커스 및 최상위로 올리기/활성화 윈도우 포커스 및 최상위로 올리기/활성화 원래 SetForegroundWindow() 함수를 쓰면 윈도우가 앞으로 나오던 것이 win98 부터 처리 방식이 바뀌어서 사용자 입력 포커스를 os 에서 관리하기 시작하면서 해당 api 가 원래대로 작동을 하지 않게 되었습니다. MSDN 에 보면 다음과 같은 경우에만 앞으로 기어나온다고 설명되어 있습니다. Quote: Windows 98/Me: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true: - The process is the fo.. 2022. 2. 23.
외부 프로그램 실행하고 대기하기 외부 프로그램 실행하고 대기하기 = ShowModal과 비슷 외부 프로그램을 실행 후 실행한 프로그램이 종료될때까지 대기상태(루프)에 들어간다. uses shellapi; {...} Procedure ShellExecute_AndWait(FileName:String;Params:String); var exInfo : TShellExecuteInfo; Ph : DWORD; begin FillChar( exInfo, Sizeof(exInfo), 0 ); with exInfo do begin cbSize:= Sizeof( exInfo ); fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT; Wnd := GetActiveWindow(); ExInfo.lpVe.. 2022. 2. 22.
시스템 대기모드/화면 보호기/모니터 끄기 이벤트 감지하기 시스템 대기모드/화면 보호기/모니터 끄기 이벤트 감지하기 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry, Inifiles; type TForm1 = class(TForm) Memo1: TMemo; private { Private declarations } public { Public declarations } procedure WMSyscommandBroadcast(var Msg: TMessage); message WM_SYSCOMMAND; procedure WMPowerBroadcast(var Msg: TMessage).. 2022. 2. 17.
문자열에서 특정 문자까지 자르기 문자열에서 특정 문자까지 자르기 Uses 절에 StrUtils 추가 AnsiLeftStr(값, AnsiPos('|', 값) - 1) AnsiLeftStr : 왼쪽 부터 시작 AnsiPos:= 앞쪽 파라메타 값의 위치 값 리턴 2022. 2. 16.
델파이 로고(logo) 관리 델파이 로고(logo) 관리 문제 1 - Runtime상에서 변수명을 보고 싶다 프로그램을 짜다 보면 중간에 어떠한 변수가 가지는 값을 확인해 보고 싶은 경우가 있습니다. 디버깅중이라면 컴파일러 IDE상에서 해당 변수를 보면 되겠지만 디버깅이 아닌 Runtime인 경우에는 해당 변수의 값을 보기가 힘이 듭니다. 해결 1 - printf를 이용해서 디버깅을 한다 이러한 경우에 가장 많이 사용하게 되는 것이 바로 출력과 관련된 API(printf, MessageBox 등)입니다. int i; // blah blah printf("i=%d", i); 자, 이렇게 실시간으로 특정 변수의 값을 출력을 해서 Runtime상에서 변수의 값을 확인하게 됩니다. 문제 2 - 디버깅 다 끝났다, 그런데 언제 디버깅 코드를.. 2022. 2. 15.
스크롤박스의 스크롤 제어 방법 스크롤박스의 스크롤 제어 방법 스크롤 박스 이벤트 속성중...마우스휠다운,업에 작성한다. ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position-30; 그리고 object inspector의 HorzScrollBar와 VertScrollBar의 Smooth과 ThumbSize를 True로 설정한다. 다른 속성중 Position이 스크롤 위치 값이다.. 2022. 2. 14.
윈도우 바탕화면 경로(주소) 값 알아내기 윈도우 바탕화면 경로(주소) 값 알아내기 Uses Shlobj function TForm1.GetProgramFilesDir: String; const CSIDL_PROGRAM_FILES = $0000; var pidl: PItemIDList; Path: array [0..MAX_PATH-1] of char; begin if Succeeded(SHGetSpecialFolderLocation(Application.Handle, CSIDL_PROGRAM_FILES, pidl)) then begin if SHGetPathFromIDList(pidl, Path) then Result := StrPas(path); end; end; 원하는 폴더 주소를 상수로 설정한다. CSIDL_DESKTOP = $0000; C.. 2022. 2. 11.
프로그램 중복 실행 방지 프로그램 중복 실행 방지 program Project1; uses Forms,Windows, Unit1 in 'Unit1.pas' {fmMain}; var Mutex : Thandle; {$R *.res} begin Mutex := CreateMutex(nil,True,'YourMutex'); if (Mutex 0 ) and (GetLastError = 0 ) then begin Application.Initialize; Application.CreateForm(TfmMain, fmMain); Application.Run; if Mutex 0 then CloseHandle(Mutex); end; end. 2022. 2. 10.
TStreamMemory TStreamMemory 델파이 CD의 Extras 폴더를 뒤져보면 ZLIb를 멋지게 포장한 TCompressionStream, TDecompressionStream 객체를 찾을 수 있다. TStream을 간단히 압축하고 해제할 수 있게 해 주기 때문에 자주 애용하게 된다. 그런데, TStream이 아닌 그저 압축된 메모리 덩어리를 다뤄야 할 때는 어떻게 할까. 임시 스트림을 만들고 여기에 메모리를 옮겨담고 압축을 푼다?? 뭔가 조금 어색하다. 메모리 덩어리를 굳이 복사하지 않고 스트림처럼 사용할 수는 없을까? 비슷한 경우는 또 있다. 버퍼에 옮긴 비트맵 파일. 여기 담겨있는 내용을 TBitmap의 LoadFromStream로 불러들일 수는 없을까? TStreamMemory는 이런 고민이 생겼을 때 쓸만.. 2022. 2. 9.
델파이 후킹(hooking) 델파이 후킹(hooking) 화면 키보드를 만들면서 몸에 익힌 훅킹기법~ 남용하면 독이 되지만 잘 만 쓰면 정말 좋은 영약이 되는 것은 세상 다른 이치와 마찬가지겠죠…?? 훅~ 훅훅훅훅~~ (웃음소리 입니다~) 저역시 배우는데 깝깝했던 만큼, 가능하면 쉽게 설명하도록 노력하겠습니다. 이 강좌는 다음과 같은 순서로 진행할 것입니다. - 훅킹이란 무엇인가 - 훅킹의 종류 - 훅킹에 사용되는 함수 설명 - 훅 프로시저 - 훅 프로시저의 위치. 왜 시스템 훅킹은 DLL이어야 하는가. - 실전 {이 글은 Kent Reisdorph가 Delphi Developer's Journal에 기고한 글을 아주 많이 참조하여 작성한 것입니다.} 훅킹이란 무엇인가~? 누구나 한번쯤, 델파이에 포함되어 있는 스파이 프로그램인 ‘.. 2022. 2. 8.
해당 월의 처음과 끝 날짜 알아오기 해당 월의 처음과 끝 날짜 알아오기 uses DateUtils var firstDay, lastDay: TDate; begin firstDay := StartOfTheMonth(DateTimePicker.Date); lastDay := EndOfTheMonth(DateTimePicker.Date); Edit1.Text := FormatDateTime('dd',firstDay); Edit2.Text := FormatDateTime('dd',lastDay); end; 2022. 2. 4.
떠있는폼이 IsWindowEnabled인 상태 체크 떠있는폼이 IsWindowEnabled인 상태 체크 IsWindowEnabled(Screen.ActiveForm.Handle) 2022. 2. 3.
델파이 바이러스 백신 및 체크방법 델파이 바이러스 백신 및 체크방법 Options 설명 Scan only executables exe, dll, ocx 처럼 실행파일만을 검사한다. Scan only files who seem to be delphi compiled (detection could fail) 델파이컴파일러로 컴파일 된 것만 검사하므로 만약 다른 것으로 컴파일된거라면 검사에서 제외된다. Unpack UPX packed files if possible 실행파일 사이즈를 줄이기 위해 UPX을 사용했다면 압축을 풀고 검사를 해야하므로 이부분을 체크 바랍니다. Create Backup (in case disinfection fails) 혹시나 문제가 생길것을 대비하여 *.bak 형태의 백업파일을 만듭니다. 만약 이 크리너를 실행후 프.. 2022. 1. 28.
모달폼(다이얼로그 등)이 떠 있을 때 폼 visible 막기 모달폼(다이얼로그 등)이 떠 있을 때 폼 visible 막기 일반적으로 델파이에서 폼을 ShowModal하게 되면 다른 폼들은 모달 상황이 종료될 때 까지 사용할 수 없습니다. 그 이유는, 모든 폼들의 Enabled를 False로 바꾸어 버리기 때문이죠. 그런데, 프로그램을 만들다 보면 ShowModal중에도 제어가 가능한 폼이 필요할 때가 있습니다.(Form1.Enabled:= True) 이런게 언제 필요하냐면 모달 폼에서 데이터를 검색해서 입력해야 할 때 또 다른 모달 창을 띄웠다 닫았다 하게 만들면 사용자들이 별루 안 좋아 할 때가 많죠 화면 키보드를 프로그램에 내장 시킬 때 등등 여러가지 부분에서 사용이 가능할 겁니다. 필요하신 분들이 있다면 도움이 되길 바랍니다. 소스랄 것도 없이 간단합니다. .. 2022. 1. 27.
델파이 개발 버전 알아내기 델파이 개발 버전 알아내기 델파이 2~7 버전에는 프로젝트이름.dof 파일이 있습니다. 이 내용으로 버전을 확인할 수 있지만, 정확하게 버전 이름이 있는 것은 아니고, 내용을 봐야 합니다. dof 파일 안에 "HostApplication"이라는 문자열을 검색해봐서 "HostApplication"이 있으면 델파이 3 혹은 그보다 높은 버전입니다. (HostApplication 기능이 델파이 3에서 추가되었습니다) 그리고 "PackageDLLOutputDir"이나 "PackageDCPOutputDir" 문자열이 있으면 4 이상 버전입니다. 이 설정도 델파이 4에서 추가된 기능이어서 그렇습니다. "Language"라는 문자열을 검색해봐서 존재하면 델파이 5이거나 그보다 높은 버전입니다. 델파이 6, 7 버전의.. 2022. 1. 26.
인터넷 연결 체크 인터넷 연결 체크 function TdmMain.CheckInternet: boolean; begin result:=false; try IdTCPClient1.ReadTimeout:=2000; IdTCPClient1.ConnectTimeout:=2000; IdTCPClient1.Port:=80; IdTCPClient1.Host:='google.com'; IdTCPClient1.Connect; IdTCPClient1.Disconnect; result:=true; except result:=false; end; end; 2022. 1. 24.
한국 표준시간(LGU+서비스) 가져오기 셋팅 한국 표준시간(LGU+서비스) 가져오기 셋팅 ime.bora.net 2022. 1. 21.
인터넷 연결상태 체크 인터넷 연결상태 체크 Ping을 자주 쓰기는 하는데, 때때로 Ping이 안먹히는 Network이 있습니다. 아래 함수가 더 정확하게 동작하더군요. uses절에 WinInet 을 포함시키고 아래 함수를 실행시키십시요. function CheckInet( psURL : String ) : Boolean; var lhInet, lhUrl : HINTERNET; begin lhInet := InternetOpen( 'jInet function by Pak jeong mo', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 ); if Assigned( lhInet ) = TRUE then begin lhUrl := InternetOpenUrl( lhInet, PChar( psURL ),.. 2022. 1. 20.
델파이의 MD5 해싱 델파이의 MD5 해싱 델파이를 사용하여 파일 또는 문자열에 대한 MD5 체크섬 계산 MD5 Message-Digest Algorithm은 암호화 해시 기능 MD5는 일반적으로 파일의 무결성을 검사하는 데 사용되며 파일이 변경되지 않았는지 확인합니다. 한 가지 예가 프로그램을 온라인에서 다운로드 할 때입니다. 소프트웨어 배포자가 파일의 MD5 해시를 제공하면 Delphi를 사용하여 해시를 생성 한 다음 두 값을 비교하여 동일한 지 확인하십시오. 파일이 다르다면 다운로드 한 파일이 웹 사이트에서 요청한 파일이 아니므로 악성 일 수 있습니다. MD5 해시 값은 128 비트이지만 일반적으로 32 자리 16 진수 값으로 읽습니다. Delphi를 사용하여 MD5 해시 찾기 Delphi를 사용하면 주어진 파일에 대한.. 2021. 9. 17.
델파이 폼 모달 TForm modal, modaless show 델파이 폼 모달 TForm modal, modaless show 1. 모달 폼 띄우기 (팝업창, 모달, modal) ex) 설정폼. TfrmSetup frmSetup := TfrmSetup.Create(Self); // 폼 생성 ..... // 폼 생성 후 보이기 전에 하는 작업 .... try if frmSetup.ShowModal = mrOK then begin // modalresult = OK .... end; finally frmSetup.Free; // 폼 해제 frmSetup := nil; // 그냥 습관임. 폼 변수가 폼 생성 여부를 가르키게.. end; 2. 그냥 폼 띄우기 (모달리스, modaless) ex) 로그창. TfrmLogView 로그창이 떠 있으면 앞으로 보내고, 없으면 띄운.. 2021. 9. 2.