본문 바로가기

델파이474

소켓 프로그래밍 기법의 활용 6편 마무리 소켓 프로그래밍 기법의 활용 6편 마무리 블로킹 연결을 이용한 파일 전송 예제 소켓을 이용한 프로그래밍을 할 때 앞서 설명한 채팅 어플리케이션과 같이 연결을 유지하면서 통신을 할 필요가 있을 때에는 중단되지 않는 논-블로킹 연결을 지원하도록 해야 하지만, 경우에 따라서는 전송하는 측과 전송받는 측의 데이터 전송에 있어서 서로 비동기 적으로 처리하는 것이 효율적일 때가 많다. 이럴 때에는 블로킹 연결을 이용하게 되는데, 블로킹 연결을 이용하여 소켓 프로그래밍을 하는 것은 해당되는 연결의 쓰레드를 생성하여 이를 실행하도록 하는 형태로 제작해야하기 때문에 논-블로킹 연결을 지원하는 어플리케이션에 비해 다소 까다로운 점이 많다. 그러면, 블로킹 연결을 통해 클라이언트에서 서버로 지정된 파일을 전송하는 예제를 작.. 2021. 12. 27.
소켓 프로그래밍 기법의 활용 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 App ID, Key 존재시 IdHTTP App ID, Key 존재시 user System.JSON var s : String; JSON : TJSONObject; i : integer; rec_Data : TStringStream; Stream: TBytesStream; begin Stream := TBytesStream.Create; IdHTTP1.Request.CustomHeaders.Add('x-pharmsearch-app: 000000'); IdHTTP1.Request.CustomHeaders.Add('x-pharmsearch-key: 0000000'); IdHTTP1.Request.ContentType := 'application/json; charset=utf-8'; IdHTTP1.Request.ContentEncodi.. 2021. 12. 10.
웹브라우저에 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.
IE 웹브라우저(Webbrowser) 화면을 이미지로 저장하기 IE 웹브라우저(Webbrowser) 화면을 이미지로 저장하기 uses MSHTML_TLB, JPEG, ActiveX, ComObj; procedure generateJPEGfromBrowser(browser: iWebBrowser2; jpegFQFilename: string; srcHeight: Integer; srcWidth: Integer; tarHeight: Integer; tarWidth: Integer); var sourceDrawRect: TRect; targetDrawRect: TRect; sourceBitmap: TBitmap; targetBitmap: TBitmap; jpeg: TJPEGImage; viewObject: IViewObject; begin sourceBitmap := TB.. 2021. 12. 2.
Internet explorer 띄우기 Internet explorer 띄우기 usesComObj; procedureTForm1.Button1Click(Sender: TObject); var IE: OleVariant; begin try IE:=CreateOleObject('Internetexplorer.Application'); // 위치, 크기 IE.Left:=0; IE.Top :=0; IE.Width :=500; IE.Height:=400; // IE 윈도우 상태 IE.Toolbar :=False; IE.Statusbar:=False; IE.Menubar :=False; // 띄우기 IE.Visible:=True; SetForegroundWindow(IE.HWND); IE.Navigate('인터넷주소URL'); finally IE:=Un.. 2021. 12. 1.
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.
delphi로 IE 컨트롤 delphi로 IE 컨트롤 1. 기본적인 사항 모든 웹브라우저 컴퍼넌트는 IWebBrowser2 라는 인터페이스를 사용합니다. 델파이로만들던 VC로 만들던 VB로 만들던지 암튼간에 무조건 저 인터페이스를 사용합니다. 델파이의 TWebBrowser라는 컴퍼넌트 역시 MS의 웹브라우저 컴포넌트를 포장해서 쓰는관계로 IWebBrowser2 인터페이스를 가지고 있습니다. 바로 OleObject 퍼로퍼티가 그 놈입니다. IWebBrowser2 외에도 관련된 인터페이스들이 있는데, 계보를 따져보면 아래와 같습니다. IUnknown | IDispatch | IWebBrowser | IWebBrowserApp | IWebBrowser2 이 인터페이스들은 델파이의 컴포넌트 계보와 개념이 비슷합니다. 우리는 IWebBro.. 2021. 11. 29.
IE 현재 열려있는 주소값 읽어오기 IE 현재 열려있는 주소값 읽어오기 IE 현재 열려있는 주소값 읽어오기 { Code 1 **************************************} uses ddeman; function GetURL(Service: string): string; var ClDDE: TDDEClientConv; temp: PChar; begin Result := ''; //create a new DDE Client object ClDDE := TDDEClientConv.Create(nil); with ClDDE do begin SetLink(Service, 'WWW_GetWindowInfo'); temp := RequestData('0xFFFFFFFF'); Result := StrPas(temp); StrDis.. 2021. 11. 25.
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.
idhttp를 이용한 사이트 이미지 업로드 idhttp를 이용한 사이트 이미지 업로드 function IdHttpImgPost(URL:String;FormFieldName,FormFieldValue:array of STring; FormFieldCount : integer;FieldName,FileName,imgType:String): String; //user IdMultipartFormData; function GetHostNameFromURL(URL: String): String; var PosSlash: Integer; begin Result:=Trim(URL); Result:=MidStr(Result, Pos('://', Result)+3, Length(Result)); PosSlash:=Pos('/', Result); if PosSla.. 2021. 11. 22.