delphi484 익명함수+스레드를 활용한 간단한 스레드 사용 방법 익명함수 스레드를 활용한 간단한 스레드 사용 방법 기존에는 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. 퀵레포트 추가 설치 퀵레포트 추가 설치 1. Component 메뉴 - Install Package - Add 선택 2. 델파이 bin 폴더 안에 dclqrt70.bpl 을 선택하여 설치 2022. 1. 19. 델파이7 에서 퀵리포트 추가하기 델파이7 에서 퀵리포트 추가하기 델파이7 메뉴에서 Component를 선택하시고, 하부 메뉴에서 Install Package를 선택합니다.. 거기서 Add 버튼을 누르신후..Delphi7디렉토리 밑에 Bin 디렉토리 밑에 있는 화일들 중에서 dclqrt70.bpl을 선택하시면 퀵레포트가 등록이 됩니다 2022. 1. 17. 멀티스레드 GUI 동기화 멀티스레드 GUI 동기화 일반적인 Delphi 애플리케이션은 단일 스레드이므로 모든 VCL 객체가 속성에 액세스하고이 단일 스레드 내에서 메서드를 실행합니다. 애플리케이션에서 데이터 처리 속도를 높이려면 하나 이상의 보조 스레드를 포함하십시오. 프로세서 스레드 스레드 프로세서에 응용 프로그램의 통신 채널이다. 단일 스레드 프로그램은 실행시 양방향으로 (프로세서에서) 양방향으로 통신해야합니다. 다중 스레드 앱은 여러 채널을 열 수 있으므로 실행 속도가 빨라집니다. 스레드 및 GUI 애플리케이션에서 여러 스레드가 실행 중일 때 스레드 실행의 결과로 그래픽 사용자 인터페이스를 업데이트 할 수있는 방법에 대한 의문이 생깁니다. 대답은 TThread 클래스 Synchronize 메서드에 있습니다. 보조 스레드에서.. 2022. 1. 14. 퀵레포트 밴드에 빈데이터 추가하기 퀵레포트 밴드에 빈데이터 추가하기 퀵레포트로 레포트를 만들 경우 데이타가 적게는 1개에서 몇백개까지 나올 경우가 있다... 문제는 이게 아니다 양식에 맞게 레포트를 만들게 되면 밴드 같은 경우 데이터 수만큼 생기고 바로 Footer가 나와 레포트 형식이 짧거나 아니면 넘어가는 현상이 일어난다 머..다른 방법이 있을 수 있겠지만...나만의 방식으로 위기를 모면(?) 했다 =============================================== 양식지 데이터 수가 20개일경우... 데이터가 20개 미만일 경우 데이터 수만큼 디테일 밴드에 나온 후 바로 짤리는 요상한 형식이 나와버린다 자! 일단 요렇게 해보쟈!!! 일단 나는 밴드를 디비로 보았다 15개 데이타가 있을 경우 나는 15개의 데이터에 .. 2022. 1. 14. 오라클에 이미지 저장/불러오기 방법 오라클에 이미지 저장/불러오기 방법 오라클 컬럼을 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. 스트링리스트 중복문자 갯수알아내기 스트링리스트 중복문자 갯수알아내기 //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. 소켓 프로그래밍 기법의 활용 5편 소켓 프로그래밍 기법의 활용 5편 1:1 채팅 예제의 제작 그러면, 실제로 예제를 만들어 나가면서 지금까지 설명한 것들을 익혀 보도록 하자. 이번에 만들 예제는 1:1 채팅을 가능하게 하는 프로그램으로 하나의 어플리케이션에 TClientSocket과 TServerSocket을 모두 올려 놓고, 이 프로그램이 경우에 따라서 채팅 서버가 되기도 하고, 클라이언트가 되기도 하는 프로그램이다. 본래 채팅 프로그램을 제대로 만들려면 서버 프로그램에 여러 개의 클라이언트가 접속하는 형태로 제작해야 하지만, 이 예제는 네트워크 프로그래밍의 기본을 이해시키려는 목적으로 제작하는 것이므로 1:1 채팅 만을 지원하도록 하였다. 이런 식으로 클라이언트와 서버의 기능을 모두 갖춘 프로그램은 프로그램을 테스트 하기에 편리하고 .. 2021. 12. 26. 소켓 프로그래밍 기법의 활용 4편 소켓 프로그래밍 기법의 활용 4편 서버 소켓의 이용 어플리케이션을 TCP/IP 서버로 둔갑시키려면 먼저 서버 소켓 컴포넌트인 TServerSocket 을 폼이나 데이터 모듈에 올려 놓는다. 서버 소켓에서 제공하려는 서비스나 클라이언트의 요구를 기다릴 때 사용할 포트를 지정할 수 있다. 각 서버 소켓 컴포넌트는 서버 윈도우 소켓 객체(TServerWinSocket)를 사용하여 리스닝 연결에서의 서버측 종료점을 이루게 한다. 또한, 서버가 받아들인 클라이언트 소켓과의 연결에서의 서버 종료점에 대한 클라이언트 윈도우 소켓 객체(TServerClientWinSocket)도 활용한다. ● 포트의 지정 서버 소켓이 클라이언트의 요구를 기다리기 전에 (이런 기다림을 ‘listening’ 이라고 한다.) 서버가 사.. 2021. 12. 25. 소켓 프로그래밍 기법의 활용 3편 소켓 프로그래밍 기법의 활용 3편 블로킹 연결 (Blocking connections) 클라이언트 소켓에서는 ClientType 프로퍼티를 ctBlocking으로 설정하면 블로킹 연결이 생성된다. 클라이언트 어플리케이션에 따라서는 읽고 쓰는 데에 새로운 쓰레드를 생성하기를 원할 수도 있는데, 이렇게 하면 어플리케이션은 연결이 완료되어 데이터를 읽고, 쓸 때까지 다른 쓰레드를 실행할 수 있다. 서버 소켓에서는 ServerType 프로퍼티를 stThreadBlocking으로 설정하면 블로킹 연결이 생성된다. 블로킹 연결은 연결에 의한 데이터 교환이 될 때까지 실행이 되지 않으므로, 다른 클라이언트 연결에 대해서 항상 새로운 쓰레드가 생성된다. 1)블로킹 연결과 쓰레드의 이용 클라이언트 소켓은 블로킹 연결이 .. 2021. 12. 21. 소켓 프로그래밍 기법의 활용 2편 소켓 프로그래밍 기법의 활용 2편 연결의 종류 소켓 연결에는 연결의 초기화와 어떤 로컬 소켓이 연결되는지에 따라 기본적으로 다음과 같은 세가지로 나누어 볼 수 있다. 1. 클라이언트 연결 (Client connections) 클라이언트 연결은 로컬 시스템의 클라이언트 소켓을 리모트 시스템의 서버 소켓에 연결하는 것을 말한다. 클라이언트 연결은 클라이언트 소켓에 의해 개시되고 초기화된다. 먼저 클라이언트 소켓이 연결하고자 하는 서버 소켓에 대한 정보를 제공하면, 클라이언트 소켓이 서버 소켓을 찾게 되고, 서버의 위치를 파악하게 되면 연결을 요구한다. 서버 소켓은 클라이언트 요구에 대한 큐(queue)를 가지고 있어서 시간이 될 때마다 연결을 시도한다. 일단 서버 소켓이 클라이언트 연결을 받아들이면 클라이언.. 2021. 12. 20. 소켓 프로그래밍 기법의 활용 1편 소켓 프로그래밍 기법의 활용 1편 소켓 프로그래밍 기법의 활용 (Using Socket Programming Techniques) 윈도우에서의 프로세스간 통신 기법으로는 명명된 파이프, DCOM, DDE, 클립 보드와 각종 네트워크 프로그래밍 기법 등을 이용할 수 있다. 이 중에서도 윈도우 95와 윈도우 NT 3.5 버전부터는 내부적인 통신 프로토콜로 기존의 NetBIEU와 함께 TCP/IP를 사실상의 표준으로 인정하고 이를 지원하고 있다. 또한, DCOM과 윈도우 소켓을 프로세스간 통신의 표준으로 삼고 있으며, 윈도우 NT 4.0 부터는 윈도우 소켓의 2.0 버전(WinSock 2.0)을 사용하여 보다 강화된 소켓 프로그래밍을 지원하게 되었다. 이러한 소켓 프로그래밍을 위해서는 Win32에서 지원하는 .. 2021. 12. 16. 웹브라우저에 HTML 코드 밀어넣기 웹브라우저에 HTML 코드 밀어넣기 uses Windows, SysUtils, Classes, SHDocVw, ActiveX; ... ... procedure WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: String); var sList: TStringList; mStream: TMemoryStream; begin // 1. 웹브라우저에 빈페이지 로딩 WebBrowser.Navigate('about:blank'); while WebBrowser.ReadyState 2021. 12. 15. 이전 1 ··· 14 15 16 17 18 19 20 ··· 25 다음