본문 바로가기

delphi515

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.
델파이 JSON 생성 (서브아이템포함) 델파이 JSON 생성 (서브아이템포함) user Json 추가 var JTopObj, JObj : TJSONObject; JArr : TJSONArray; JPair : TJSONPair; i : integer; begin JTopObj := TJSONObject.Create; JArr := TJSONArray.Create; for i := 1 to 2 do begin JObj := TJSONObject.Create; // Item block JObj.AddPair('array_index', TJSONNumber.Create( i ) ); // Array index (option) JObj.AddPair('itemDatetime', '20200708' ); JObj.AddPair('itemTaxAmoun.. 2021. 12. 14.
idHTTP JSON Post 방법 idHTTP JSON Post 방법 토큰 키값이 존재 시 다음과 같이 처리한다. procedure TForm1.Button6Click(Sender: TObject); var URL, Retorno: String; JsonStreamRetorno, JsonStreamEnvio: TStringStream; begin URL := 'https://0000000000000t'; //UTF-8로 받는다 JsonStreamEnvio := TStringStream.Create(Memo2.Text,TEncoding.UTF8); JsonStreamRetorno := TStringStream.Create(''); // Init request: try idHttp.Request.Clear; idHttp.IOHandler :.. 2021. 12. 13.
웹브라우저에 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. 8.
현재 떠 있는 모든 IE 찾기 및 닫기 현재 떠 있는 모든 IE 찾기 및 닫기 모든 인터넷 익스플로러 핸들을 구해서 WM_CLOSE 메시지를 보낸다. function CloseAllInternetExplorer: Boolean; var WindowHandle: HWND; ClassName: array[0..260] of char; begin WindowHandle := GetWindow(GetDesktopWindow(), GW_CHILD); while WindowHandle > 0 do begin FillChar(ClassName, sizeof(ClassName), #0); GetClassName(WindowHandle, ClassName, sizeof(ClassName)); if SameText(ClassName, 'IEFrame') the.. 2021. 12. 7.
델파이에서 원하는 주소로 크롬실행 델파이에서 원하는 주소로 크롬실행 var URL: string; begin URL:= 'http://www.daum.co.kr/'; // ShellExecute(self.WindowHandle,'open', PChar(URL), nil, nil, SW_SHOW); //default browser ShellExecute(self.WindowHandle,'open','chrome.exe', PChar(URL), nil, SW_SHOW); 2021. 12. 6.
Delphi에서 Chrome Browser 사용하기 Delphi에서 Chrome Browser 사용하기 델파이 기본 웹브라우저 컴포넌트는 TWebBrowser인데. 이놈이 Internet Explorer를 맵핑해놓은거다. 기존에는 델파이로 응용프로그램을 구현할 때, 내부에 웹뷰가 필요하면 이 녀석을 사용했는데.. 아무래도 표준도 잘 안지키고, 버전별로 표준 구현의 차이가 심하여.. Chrome 브라우저를 웹뷰로 사용해보기로 함. 검색을 해보니. Delphi Chromium Embedded (DCEF) 라는 놈이 있는데, 이게 DCEF 1, DCEF 3 이렇게 나눠져있더라는... DCEF 1를 진행하다 개발이 중단된 거 같고, 그걸 포크해서 DCEF 3을 다시 개발한 거 같은데.. 잘은 모르겠고... 소스를 대략 보니 DCEF 3이 완성도가 더 있는 듯.... 2021. 12. 5.
Capture element click in Internet Explorer Capture element click in Internet Explorer I’m trying to write an automatic IE form filler for myself. I’m able to get the URL (from IE not TWebBrowser) and if it’s “managed” by my app fill in the fields and submit it. I’d like to ask the user if they want to add a non-managed URL to the managed list when the submit button is clicked when a password field is found on the page. It seems to me tha.. 2021. 11. 30.
Indy9 파일전송 예제 Indy9 파일전송 예제 Indy 9 버전으로 파일만 전송하는 간단한 루틴을 작성해보았습니다. 테스트된 예제입니다. 참고하시고, 즐거운 프로그래밍 하세요.. P.S : Indy10 으로 파일전송은 이 게시판에서 'Indy10' 으로 검색해보시면 찾으실 수 있습니다. unit uMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; IdTCPClient1:.. 2021. 11. 24.
ActiveX Form기초부터 배포까지 ActiveX Form기초부터 배포 개발환경 : Windows XP pro, Delphi 6.0, IIS 5.2 - 새프로젝트를 시작하자. 델파이를 시작하고 메뉴->File->New->Other을 선택한다. New Items창에서 ActiveX텝으로 이동한다. Active Form을 선택하고 OK버튼을 클릭한다. - Active Form Wizard폼이 나타난다. New ActiveX Name : ActXRun을 입력하면 아래는 알아서 변경된다. OK버튼을 클릭한다. 경고메시지가 나오면 OK버튼을 클릭한다. - 이제부터가 시작이다. 일단 저장을 한다. 적당한 폴더를 선택(예제작성시는 c:\ActXRun폴더에 저장했다)하여 저장한다. - 컴포넌트 추가 TButton(예제작성시 이름은 기본값을 사용한다)을 .. 2021. 11. 23.