본문 바로가기

Delphi/프로시저-함수48

해당날짜 몇 주차인지 알아내기 해당날짜 몇 주차인지 알아내기 uses System.DateUtils function myGetWeekNo(paToday:TDateTime):Word;varvWeekNo : word;vDTstart : TDate;beginvDTstart := EncodeDate( YearOf(paToday), MonthOf(paToday), 01 );vWeekNo := WeekOfTheYear(paToday) - WeekOfTheYear(vDTstart) +1;if Not (vWeekNo IN [1..6]) then //12월 31일이 월요일인경우 리턴값이 65xxx를 예방하기 위함vWeekNo := 6;Result := vWeekNo;end; 2024. 7. 5.
숫자 정수 반올림(어셈블러 Assembler) 숫자 정수 반올림(어셈블러 Assembler)   function xRoundInteger(pData, pDec: Integer): Integer;{ xRoundInteger(126,10) = 130 }asmMov ECX,EDXCdqIDiv ECXShl EDX,1Cmp EDX,ECXJb @Skip2Or EAX,EAXJs @Skip1Inc EAXJmp @Skip2@Skip1:Dec EAX@Skip2:IMul ECXend; function xTruncInteger(pData, pDec: Integer): Integer;{ xTruncInteger(354,100) = 300 }asmMov ECX,EDXCdqIDiv ECXIMul ECXend; 2024. 5. 28.
주민등록번호 성인인증 주민등록번호 성인인증   function IsUserAudult(jumin : string):boolean;varjuminleng, lastnum : integer;yy, mm, dd : string;nyy, nmm, ndd : integer;iyy, imm, idd : integer;ryy, rmm : integer;isAudult : boolean;begin result := false; nyy := strtoint(Formatdatetime('YYYY', now));nmm := strtoint(Formatdatetime('MM', now));ndd := strtoint(Formatdatetime('DD', now)); juminleng := length(jumin); if juminleng exit.. 2024. 5. 14.
첫번째 영문을 대문자 변경 첫번째 영문을 대문자 변경  function TitleCase(const str: string): string;varnewword: boolean; i: integer;c: char;beginnewword := true;result := Lowercase(str); for i := 1 to Length(result) dobeginc := result[i];if c in ['a'..'z'] thenbeginif newword thenbeginresult[i] := UpCase(c);newword := false;end;endelseif not (c in ['0'..'9']) thennewword := true;end;end; 2024. 5. 13.
한글 자음 모음 분리 한글 자음 모음 분리    constHanBase = $AC00; //유니코드 3.0 에서의 시작 한글영역HanLast = $D7AF; //유니코드 3.0 에서의 마지막 한글영역ChoSungStr:WideString = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ';JungSungStr:WideString = 'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ';JongSungStr:WideString = ' ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ'; function JamoSplit(const Han: WideChar):WideString;varUniCode: Integer;ChoSung, JungSung, JongSung: Integer;beginResult := '';for UniCode := 1 to L.. 2024. 5. 10.
HEX 코드를 TColor 값으로 변환하여 반환 HEX 코드를 TColor 값으로 변환하여 반환     HexToTColor(), TColorToHex() HEX 코드를 TColor 값으로 변환하여 반환한다 function HexToTColor(RGBCode: String): TColor;varhex: Int64;Color: TColor;iRGBCode: STring;begintryiRGBCode := copy(RGBCode,5,2)+copy(RGBCode,3,2)+copy(RGBCode,1,2);hex := StrToInt64('$00'+iRGBCode);excepton Exception dobeginhex := $00000000;MessageDlg('올바르지 않은 색상값입니다.', mtError, [mbOK], 0);end;end;Color := .. 2024. 4. 29.
FindWindowEx로 찾지못하는 원도우 핸들구하기 FindWindowEx로 찾지못하는 원도우 핸들구하기 FindWindowEx함수로 찾지못하는 윈도우 핸들이 무지많다 아래함수는 제경험상으로는 95% 이상 핸들을 찾을수있다. function SubWindowFind( ParentWnd : HWND; FindClassName : string ): HWND; var ClassName : array[0..255] of char; FindWnd : HWND; begin Result := 0; if ParentWnd = 0 then Exit; FindWnd := GetWindow( ParentWnd, GW_CHILD ); while ( FindWnd 0 ) do begin if Boolean( GetClassName( FindWnd, ClassName, 255) .. 2024. 3. 23.
실행파일 종료시 실행파일 삭제 실행파일 종료시 실행파일 삭제 procedure DeleteMe; var BatchFile:TextFile; BatchFileName:String; ProcessInfo:TProcessInformation; StartUpInfo:TStartupInfo; begin BatchFileName:=ExtractFilePath(application.exename)+'$$336699.bat'; AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile, ':try'); Writeln(BatchFile, 'del "' + application.exename + '"'); Writeln(BatchFile, 'if exist "' + appli.. 2024. 3. 11.
숫자에 콤마 찍어주기 숫자에 콤마 찍어주기 { ******************************************************************************** ** ** ** 숫자에 화폐단위 000,000,000~ 처럼 3단위로 콤마를 삽입시켜 준다. ** ** 999,999,999,999,999 단위 까지 가능함. 999조 ** ** ** ******************************************************************************** } Function Comma(I : Double) : String; var StrTmp : String; Cunt, J1, J2, K, L : Integer; Begin Cunt := 0; L := 3; StrT.. 2024. 3. 9.
윈도우에 폰트 설치/제거 하기 윈도우에 폰트 설치/제거 하기 // 폰트 설치 AddFontResource(PChar('XXXFont.TTF')); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); // 폰트 제거 RemoveFontResource(PChar('XXXFont.TTF')); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); 2024. 3. 5.
Delphi Open ToolsAPI (3) Delphi Open ToolsAPI 모듈의 정의 모듈을 쉽게 표현하자면 대표 파일을 가진 편집 단위라고 보면 된다. 프로젝트 그룹, 프로젝트, 유닛, 폼유닛등이 모두 모듈이다. 하나 혹은 그 이상의 파일이 하나의 모듈을 구성한다. 폼이 있는 유닛이 대표적인 경우인데 예를들어 Unit1.pas는 Unit1.dfm와 함께 두개의 파일로 구성되어 있으며 대표파일은 Unit1.pas다. 프로젝트나 프로젝트 그룹등도 하나의 모듈로 취급된다. 모듈을 찾거나 여는 등의 작업은 파일명을 통해 이루어지는데 이를 대표파일이로 정의하자 (이를 지칭할만한 뚜렷한 이름이생각나지 않는다) . 대표파일로는 *.pas, *.bpg, *.dpr,*.dpk가 있다. 델파이에 프로젝트 그룹과 프로젝트가 로드된 상태에서 모듈의 파일명을 .. 2023. 12. 26.
Delphi Open ToolsAPI (2) Delphi Open ToolsAPI Delphi Open ToolsAPI 메뉴의 OnClick등의 이벤트는 오브젝트의 메쏘드를 필요로 한다. 따라서 무작정 빈 유닛을 기준으로 삼아 작성하기 보다는 DataModule을 기반으로 하는 것이 좋다. 혹은 자신이 아예 새로운 오브젝트 클래스를 작성할 생각이라면 그렇게 해도 좋다. 여하간 이벤트가 필요하거나 혹은 컴퍼넌트가 필요한 경우 메인모듈은 오브젝트를 기반으로 작성하는 것이 좋다. 필자가 제시하는 방법은 DataModule이 메인 모듈이 되고 기타 옵션적용등을 위해 필요한 폼은 메인모듈에서 생성해서 보여주는 것이다. 될 수 있으면 Form을 메인모듈로 잡지 않는 것이 좋다. DataMoudle 보다 리소스를 더 많이 잡아먹을 것이기 때문이다. 다음의 사항.. 2023. 12. 19.
Delphi Open ToolsAPI Delphi Open ToolsAPI 자고 일어나면 빌딩이 선다. 이 새삼스럽지 않은 기적은 철골구조와 조립식 컨크리트에 의해 이루어진다. 철골이 올라가는가 하면 금새 벽이 붙여지고 며칠 안가 빌딩이 완성된다. 이런 조립형태의 접근방식은 빠른 결과물을 보게 해준다. 이런 조립형태의 개발방식은 RAD(고속개발)툴의 근간을 이루고 있다. 델파이에서 조립식 컨크리트의 역할은 컴퍼넌트가 담당한다. 그리고 굳건하게 이런 컴퍼넌트 중심의 개발환경을 뒷받침하고 있는 철골구조가 바로 IDE(통합개발환경)이다. 보다 빠르고 시각화된 개발환경을 제공하기 위해서 일찌감치 IDE(통합개발환경)라는 위대한 환경을 제시해 왔다. IDE를 통해 단순 컴파일러가 아니라 개발툴이라는 당시로서는 진보적 개념을 처음 도입한 것은 볼랜드였.. 2023. 12. 14.
윈도우 사용자 이름 알아내기 윈도우 사용자 이름 알아내기 function GetCurrentUserName : string; const cnMaxUserNameLen = 254; var sUserName : string; dwUserNameLen : DWord; begin dwUserNameLen := cnMaxUserNameLen-1; SetLength(sUserName, cnMaxUserNameLen); GetUserName(PChar(sUserName), dwUserNameLen); SetLength(sUserName, dwUserNameLen); Result := sUserName; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetCurren.. 2023. 11. 17.
최상위 윈도우 얻기 최상위 윈도우 얻기 현재 윈도우상에서 최상위에 떠있는 이름을 알려주는 함수 function OKTopWindowText: string; var WinName: array[0..144] of char; begin FillChar(WinName, 145, 0); GetWindowText(GetForegroundWindow, WinName, 144); SetLength(Result, StrLen(WinName)); Result := StrPas(WinName); end; 2023. 11. 1.
델파이 숫자 한글변환 델파이 숫자 한글변환 첫번째 함수 function IntToHanguel( Value: Int64 ) : String; const NumberChar: array['0'..'9'] of String = ( '영','일','이','삼','사','오','육','칠','팔','구' ); LevelChar: array[0..3] of String = ( '', '십','백','천' ); DecimalChar: array[0..5] of String = ( '','만','억','조','경','현' ); var S : String; UseDecimal : Boolean; i, Level: Integer; begin Result := ''; S := IntToStr( Value ); UseDecimal := Fals.. 2023. 10. 27.
기간사이 특정요일 개수알아내기 기간사이 특정요일 개수알아내기 function CountWeek(StartDate, EndDate : TDate; CheckWeek : Integer) : Integer; var DayNum, StartWeek : Integer; begin DayNum := Trunc(Int(EndDate - StartDate)); // MATH Unit 사용을 하지 않았을 경우 if StartDate > EndDate then StartWeek := DayOfWeek(EndDate) else StartWeek := DayOfWeek(StartDate); // StartWeek := DayOfWeek(Max(StartDate,EndDate)); // MATH Unit 사용시 Result := DayNum div 7; i.. 2023. 9. 11.
태스크바 (taskbar) 에서 숨기기 태스크바 (taskbar) 에서 숨기기 To do this you will need to: 1.Select the View -> Project Source, from Delphi's main menu. 2.Add the Windows unit to the uses clause. 3.Add Application.ShowMainForm := False; to the line after "Application.Initialize;". 4.Add: ShowWindow(Application.Handle, SW_HIDE); to the line before "Application.Run;" Your main project source file should now look something like this: pro.. 2023. 8. 1.
시스템 날짜바꾸기 시스템 날짜바꾸기 방법 1 시스템의 날짜를 바꾸는 방법은 아래와 같이 윈도우 API를 사용하면 간단히 바꿀수 있습니다. procedure TForm1.ChgSysDateTime(ADateTime: TDateTime); var sys_time: TSystemTime; begin sys_time.wYear := StrToInt(FormatDateTime('yyyy', ADateTime)); sys_time.wMonth := StrToInt(FormatDateTime('m', ADateTime)); sys_time.wDay := StrToInt(FormatDateTime('d', ADateTime)); sys_time.wHour := StrToInt(FormatDateTime('h', ADateTime)); .. 2023. 7. 27.
Hook(훅) SetWindowsHookEx Hook(훅) SetWindowsHookEx SetWindowsHookEx 함수는 Windows 운영 체제에서 훅(Hook)을 설치하기 위해 사용되는 함수입니다. 훅은 시스템 내에서 발생하는 이벤트를 감지하고 해당 이벤트에 대한 처리를 수행하는 데 사용됩니다. 예를 들어, 키보드 이벤트, 마우스 이벤트, 윈도우 메시지 등을 감지하고 원하는 동작을 수행할 수 있습니다. SetWindowsHookEx 함수는 다음과 같은 매개변수를 가지고 있습니다 idHook: 설치할 훅의 유형을 지정하는 매개변수로, 훅의 종류에 따라 다른 상수 값을 사용합니다. 예를 들어, WH_KEYBOARD는 키보드 이벤트를 감지하는 훅을 설치하는 상수입니다. lpfn: 훅 프로시저(Hook Procedure)로서 호출될 함수의 포인터.. 2023. 7. 7.