{"id":826,"date":"2008-05-30T08:18:11","date_gmt":"2008-05-30T08:18:11","guid":{"rendered":"http:\/\/6teen.ru\/?p=626"},"modified":"2008-05-30T08:18:11","modified_gmt":"2008-05-30T08:18:11","slug":"8083","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=826","title":{"rendered":"\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f COM \u043f\u043e\u0440\u0442\u043e\u0432"},"content":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f COM \u043f\u043e\u0440\u0442\u043e\u0432<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f COM \u043f\u043e\u0440\u0442\u043e\u0432\n\nunit TestRosh;\ninterface\nuses\nWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;\ntype\nTForm1 = class(TForm)\nPanel1: TPanel;\nLabel1: TLabel;\nPortCombo: TComboBox;\nLabel2: TLabel;\nBaudCombo: TComboBox;\nLabel3: TLabel;\nByteSizeCombo: TComboBox;\nLabel4: TLabel;\nParityCombo: TComboBox;\nLabel5: TLabel;\nStopBitsCombo: TComboBox;\nLabel6: TLabel;\nMemo1: TMemo;\nEdit1: TEdit;\nButton1: TButton;\nMemo2: TMemo;\nEdit2: TEdit;\nLabel7: TLabel;\nButton2: TButton;\nLabel8: TLabel;\nEdit3: TEdit;\nprocedure Button1Click(Sender: TObject);\nprocedure Memo2Change(Sender: TObject);\nprocedure Memo1Change(!\nSender: TObject);\nprocedure FormDestroy(Sender: TObject);\nprocedure Button2Click(Sender: TObject);\nprocedure PortComboChange(Sender: TObject);\nprocedure FormShow(Sender: TObject);\nprocedure Memo1DblClick(Sender: TObject);\nend;\nvar\nForm1: TForm1;\nimplementation\n{$R *.DFM}\nuses Registry;\nvar\nhPort: THandle;\nprocedure TForm1.Memo1Change(Sender: TObject);\nvar\ni: Integer;\nbegin\nEdit1.Text := '';\nfor i := 1 to Length(Memo1.Text) do\nEdit1.Text := Edit1.Text + Format('%x', [Ord(Memo1.Text[i])]) + ' '\nend;\nprocedure TForm1.Memo2Change(Sender: TObject);\nvar\ni:\nInteger;\nbegin\nEdit2.Text := '';\nfor i := 1 to Length(Memo2.Text) do\nEdit2.Text := Edit2.Text + Format('%x', [Ord(Memo2.Text[i])]) + ' '\nend;\nprocedure TForm1.Button1Click(Sender: TObject);\nvar\nS, D: array[0..127] of Char;\nactual_bytes: Integer;\nDCB: TDCB;\nbegin\nFillChar(S, 128, #0);\nFillChar(D, 128, #0);\nDCB.DCBlength := SizeOf(DCB);\nif not GetCommState(hPort, DCB) then begin\nShowMessage('Can''t get port state: ' + IntToStr(GetLastError));\nExit;\nend;\ntry\nDCB.BaudRate := StrToInt(BaudCombo.Text);\nexcept\nBaudCombo.Text := IntToStr(DCB.BaudRate);\nend;\ntry\nDCB.ByteSize := StrToInt(ByteSizeCombo.Text);\nexcept\nByteSizeCombo.Text := IntToStr(DCB.ByteSize);\n!\nend;\nif ParityCombo.ItemIndex > -1 then\nDCB.Parity := ParityCombo.ItemIndex\nelse\nParityCombo.ItemIndex := DCB.Parity;\nif StopBitsCombo.ItemIndex > -1 then\nDCB.StopBits := StopBitsCombo.ItemIndex\nelse\nStopBitsCombo.ItemIndex := DCB.StopBits;\nif not SetCommState(hPort, DCB) then begin\nShowMessage('Can''t set new port settings: ' + IntToStr(GetLastError));\nExit;\nend;\nPurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);\nStrPCopy(S, Memo1.Text);\nif not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then begin\nShowMessage('Can''t write to port: ' + IntToStr(GetLastError));\nExit;\nend;\nif not ReadFile(hPort, D, StrToInt(Edit3.Text), actual_bytes, nil) then\nShowMessage('Can''t read from port: ' + IntToStr(GetLastError))\nelse\nShowMessage('Read ' + IntToStr(actual_bytes) + ' bytes');\nMemo2.Text := D;\nend;\nprocedure TForm1.FormDestroy(Sender: TObject);\nbegin\nwith TRegistry.Create do begin\nOpenKey('\\Software\\MBEM\\Rosh Shkila', True);\nWriteString('Port', PortCombo.Text);\nWriteString('Baud Rate', BaudCombo.Text);\nWriteString('Byte Size', ByteSizeCombo.Text);\nWriteString('Parity', IntToStr(ParityCombo.ItemIndex));\nWriteString('Stop Bits', IntToStr(StopBitsCombo.ItemIndex));\nDestroy;\nend;\nif not CloseHandle(hPort) then begin\nShowMessage('Can''t close port: '\n+ IntToStr(GetLastError));\nExit;\nend;\nend;\nprocedure TForm1.Button2Click(Sender: TObject);\nbegin\nhPort := CreateFile(PChar(PortCombo.Text),\nGENERIC_READ + GENERIC_WRITE,\n0,\nnil,\nOPEN_EXISTING,\nFILE_ATTRIBUTE_NORMAL,\n0);\nif hPort = INVALID_HANDLE_VALUE then\nShowMessage('Can''t open ' + PortCombo.Text + ': ' + IntToStr(GetLastError))\nelse\nButton2.Hide;\nend;\nprocedure TForm1.PortComboChange(Sender: TObject);\nbegin\nFormDestroy(Sender);\nButton2.Show;\nend;\nprocedure TForm1.FormShow(Sender: TObject);\nbegin\nwith TRegistry.Create do begin\nOpenKey('\\Software\\MBEM\\Rosh\nShkila', True);\nPortCombo.Text := ReadString('Port');\n!\nBaudCombo.Text := ReadString('Baud Rate');\nByteSizeCombo.Text := ReadString('Byte Size');\nParityCombo.ItemIndex := StrToInt(ReadString('Parity'));\nStopBitsCombo.ItemIndex := StrToInt(ReadString('Stop Bits'));\nDestroy;\nend;\nend;\nprocedure TForm1.Memo1DblClick(Sender: TObject);\nbegin\nMemo1.Lines.Clear;\nMemo2.Lines.Clear;\nEdit1.Text := '';\nEdit2.Text := '';\nend;\nend.\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043c \u043f\u043e\u0440\u0442\nVar\nPrinter: THandle;\nN      : Cardinal;\nC      : POverlapped;\nbegin\n\/\/\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438\nPrinter := CreateFile(PChar('LPT1'),\nGENERIC_READ\nor GENERIC_WRITE,0,nil,\nOPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);\n\/\/!\n\u041f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u043e 'Hello World';\nWriteFile(Printer,'Hello World',11,N,c);\n\/\/\u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442\nCloseHandle(Printer);\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f COM \u043f\u043e\u0440\u0442\u043e\u0432<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[433,451],"tags":[497,1585,1613,1622],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/826"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=826"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/826\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=826"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=826"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=826"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}