본문 바로가기

Delphi Tip/유닛7

메인폼과 Application 전역객체 메인폼과 Application 전역객체 델파이에서 메인폼은 일반폼과는 상당히 다르게 동작한다. 간혹 이를 잘못 이해해서 오류를 내는 경우가 있다. 지난번 예제에서 나도 이런 차이를 간과하여 실수를 저질렀는데, 사실 이런 에러는 VCL의 별별 기능을 파헤쳐서 응용하는 고수들일 수록 많이 부닥칠 수 있다. 그런 예를 들어보자. 다음은 첨부한 예제의 폼의 메인 폼 소스이다. // MainFm.pas 메인폼 소스 {중략} var MainFrm: TMainFrm; // 전역 폼 변수 implementation {$R *.dfm} uses SubFm; procedure TMainFrm.FormCreate(Sender: TObject); begin if assigned(Application.MainForm) then.. 2024. 4. 7.
루프 시간측정 성능테스트 루프 시간측정 성능테스트 user System.Diagnostics procedure TForm1.Button1Click(Sender: TObject); var _Stopwatch: TStopwatch; begin _Stopwatch := TStopwatch.StartNew; for i := 0 to 19999 do begin ////////////// end; Memo1.Lines.Add(IntToStr(_Stopwatch.ElapsedMilliseconds)); // 1,012 2022. 1. 5.
TStringList 의 StrictDelimiter 프로퍼티 delphi delimiter space TStringList 의 StrictDelimiter 프로퍼티 RAD2007이상버젼에서는 TStringList 에 StrictDelimiter라는 bool형 프로퍼티가 있습니다. 아는 사람은 알겠지만.. 새로 생긴 프로퍼티라서 혹 모르시는 분이 있으실것 같아 적어봅니다. 구분자(Delimiter)를 엄격하게(Strict) 다음과 같은 문자열이 있을경우에 StrictDelimiter를 쓰고 안쓰고 결과가 다릅니다. ​ TStringList *lst=new TStringList; lst->Delimiter='$'; lst->DelimitedText="1111$2 22$3333$4444"; //위와같이 할경우 다음과 같이 결과가 나옵니다. lst->Strings[0];.. 2022. 1. 4.
TStringList 삶아서 구워먹기 TStringList 삶아서 구워먹기 1. TStringList 란 무엇인가? 델파이 유닛중 Classes 라는 유닛에 기본적으로 포함되어 있는 클래스다. TStringList = class(TStrings) private FList: PStringItemList; FCount: Integer; ... 위와 같이 TStrings 를 상속받고 있다. TStrings 와 TStringList 는 다르다. 이름에서도 알 수 있듯이 이 클래스는 문자열(String)을 효율적으로 관리하기 위한 클래스다. 본인도 그러했으나 아마 대부분의 델파이 개발자들이 델파이를 처음 하면서 초기에 알게 되고, 그 어떤 클래스에 못지 않게 많이들 사용하는 클래스중에 하나다. 델파이를 처음 배우기 시작한 개발자라면 알아두면 좋을만한.. 2021. 12. 31.
프로그램 중복 실행 방지 프로그램 중복 실행 방지 프로그램의 중복실행을 방지하는 방법으로는 CreateMutex가 많이 쓰이는 것 같습니다. 저는 조금 고전적이지만 이해하기 쉬운 Global Atom Table을 이용한 방법을 소개합니다. 실은 10년전쯤에 컴포넌트로 만든 것을 컴포넌트 설치과정 없이 바로 이용할 수 있도록 단순한 유니트로 바꾼 것입니다. 이용법은 프로그램 소스 내용 중 상수로 정의된 Author와 RunProgram 값을 올바르게 고친 후 프로젝트가 위치한 폴더에 복사해 두고, 아래와 같이 프로젝트 소스화일(*.dpr)의 uses절에 제일 먼저 RunOne을 등록만 하면 됩니다. uses RunOne, Forms, . . . . 그리고 RunOne은 실행하고자 하는 프로그램이 이미 실행중일 경우 최소화 상태이면.. 2021. 12. 30.
DateUtils.pas 날짜 연산 정리 DateUtils.pas 날짜 연산 정리 //일자를 추출한다. function DateOf(const AValue: TDateTime): TDateTime; //시간을 추출한다. function TimeOf(const AValue: TDateTime): TDateTime; //평년,윤년을 구분하다. function IsInLeapYear(const AValue: TDateTime): Boolean; //오전,오후를 구분한다. function IsPM(const AValue: TDateTime): Boolean; //Word형의 년,월,일 파라메타의 유효성을 체크한다. function IsValidDate(const AYear, AMonth, ADay: Word): Boolean; //Word형의 시,분,.. 2021. 12. 29.
스트링리스트 중복문자 갯수알아내기 스트링리스트 중복문자 갯수알아내기 //Stringlist Overlap count function TfrmMain.ListOverlapCnt(InOutDate:TStringList; NickName:String ):String; var ls : TStringList; ip , SearName : string; ipAddresses : TStringList; n : integer; I: Integer; begin SearName := NickName+'님이 들어왔습니다.'; ipAddresses := TStringList.Create; for I := 0 to InOutDate.Count-1 do begin ipAddresses.Add(InOutDate.Strings[I]); end; ls := TStri.. 2021. 12. 28.