본문 바로가기

델파이474

프로그램 중복 실행 방지 프로그램 중복 실행 방지 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.
해당 월의 처음과 끝 날짜 알아오기 해당 월의 처음과 끝 날짜 알아오기 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.
델파이 바이러스 백신 및 체크방법 델파이 바이러스 백신 및 체크방법 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.
익명함수+스레드를 활용한 간단한 스레드 사용 방법 익명함수 스레드를 활용한 간단한 스레드 사용 방법 기존에는 TThread를 상속하여 구현하였기에 초보시절엔 접근도 어렵고 잠깐 쓰레드가 필요한 시점에서의 활용도 번거로웠습니다. 다행히 델파이 2010버전부터 익명함수가 제공되었는데 덕분에 쓰레드를 아주 손쉽게 사용할 수 있습니다. 다만, 여기서는 자세히 설명할 순 없지만 안전한 쓰레드 사용을 위해 크기 2가지를 지켜야 합니다. 1) 쓰레드의 begin ~ end 블록 사이에서 UI를 조작(변경, 수정, 삭제등)할때는 Syncronize를 이용한다. 2) 다른 쓰레드와 동시에 같은 자원(변수, 클래스등)을 공유(동시에 읽거나 쓰는 행위, 포인터를 참조하는 행위)하지 않는다. 간단한 예제입니다. 1. 100ms 타이머 만들기 델파이 기본 타이머는 윈도우 이벤.. 2022. 1. 24.
인터넷 연결 체크 인터넷 연결 체크 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.
델파이7 에서 퀵리포트 추가하기 델파이7 에서 퀵리포트 추가하기 델파이7 메뉴에서 Component를 선택하시고, 하부 메뉴에서 Install Package를 선택합니다.. 거기서 Add 버튼을 누르신후..Delphi7디렉토리 밑에 Bin 디렉토리 밑에 있는 화일들 중에서 dclqrt70.bpl을 선택하시면 퀵레포트가 등록이 됩니다 2022. 1. 17.
멀티스레드 GUI 동기화 멀티스레드 GUI 동기화 일반적인 Delphi 애플리케이션은 단일 스레드이므로 모든 VCL 객체가 속성에 액세스하고이 단일 스레드 내에서 메서드를 실행합니다. 애플리케이션에서 데이터 처리 속도를 높이려면 하나 이상의 보조 스레드를 포함하십시오. 프로세서 스레드 스레드 프로세서에 응용 프로그램의 통신 채널이다. 단일 스레드 프로그램은 실행시 양방향으로 (프로세서에서) 양방향으로 통신해야합니다. 다중 스레드 앱은 여러 채널을 열 수 있으므로 실행 속도가 빨라집니다. 스레드 및 GUI 애플리케이션에서 여러 스레드가 실행 중일 때 스레드 실행의 결과로 그래픽 사용자 인터페이스를 업데이트 할 수있는 방법에 대한 의문이 생깁니다. 대답은 TThread 클래스 Synchronize 메서드에 있습니다. 보조 스레드에서.. 2022. 1. 14.
SQLite 대량 insert 시 속도 저하 개선 SQLite 대량 insert 시 속도 저하 개선 SQLite 에서 대량으로 insert 시에 속도가 너무 느려서 방법을 찾던차 인터넷에서 찾은 방법입니다. SQLite 사이트에 설명이 있다던데, 매뉴얼을 덜보다보니... ^^ var QueryStr: string; EndTime, StartTime, i: integer; begin // 여기가 추가됨. SQLQuery1.SQL.Text := 'PRAGMA synchronous=0'; SQLQuery1.ExecSQL; // 여기까지. StartTime := GetTickCount; for i := 1 to 1000 do begin QueryStr := 'INSERT INTO log (date, time, matchrate)'; QueryStr := Que.. 2022. 1. 12.
오라클에 이미지 저장/불러오기 방법 오라클에 이미지 저장/불러오기 방법 오라클 컬럼을 BLOB 타입으로 만들어야겠지만... 그것은 32KB이상 되는건 저장되지 않는당...오라클7이상은 모르겠지만.. 암튼 LONG RAW타입으로 만든다. =저장 소스= procedure TFBITEM_I1.Button1Click(Sender: TObject); var Ms: TMemoryStream; Jpg: TJPEGImage; begin with QR_TEMP_ do begin Close; SQL.Clear; SQL.Add('INSERT INTO CITEMIMG_ (ITEM_CODE,ITEM_IMAG,ITEM_BIGO )'); SQL.Add('VALUES (''24234'', :ITEM_IMAG, ''sadfasd'')'); Ms := TMemoryStr.. 2022. 1. 11.
MSSQL 초 --> 시분초 변환 MSSQL 초 --> 시분초 변환 declare @ss int set @ss = 899 select convert (varchar(8), dateadd (s, @ss, '' ), 8) as '재생시간' 2022. 1. 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 삶아서 구워먹기 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.