Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Мастера DELPHI. Новости мира компонент, FAQ, статьи...


Информационный Канал Subscribe.Ru

Ежедневная рассылка сайта Мастера DELPHI

DELPHI.mastak.ru

Выпуск от 20.07.02 09:04

Лучшее из нашего FAQ   |x|
Кто-нибудь может кинуть мне пример программирования COM портов

»»» Rukhimovich Oleg - rukhiich@hotmail.com (06.06.00 20:23)
Если нужны подробности, пишите.

unit TestRosh;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
PortCombo: TComboBox;
Label2: TLabel;
BaudCombo: TComboBox;
Label3: TLabel;
ByteSizeCombo: TComboBox;
Label4: TLabel;
ParityCombo: TComboBox;
Label5: TLabel;
StopBitsCombo: TComboBox;
Label6: TLabel;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
Memo2: TMemo;
Edit2: TEdit;
Label7: TLabel;
Button2: TButton;
Label8: TLabel;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure Memo2Change(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure PortComboChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Memo1DblClick(Sender: TObject);
   end;

var
   Form1: TForm1;

implementation

{$R *.DFM}

uses Registry;

var
   hPort: THandle;

procedure TForm1.Memo1Change(Sender: TObject);
var
   i: Integer;
begin
   Edit1.Text := '';
   for i := 1 to Length(Memo1.Text) do
Edit1.Text := Edit1.Text + Format('%x', [Ord(Memo1.Text[i])]) + ' '
end;

procedure TForm1.Memo2Change(Sender: TObject);
var
   i: Integer;
begin
   Edit2.Text := '';
   for i := 1 to Length(Memo2.Text) do
Edit2.Text := E! dit2.Text + Format('%x', [Ord(Memo2.Text[i])]) + ' '
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   S, D: array[0..127] of Char;
   actual_bytes: Integer;
   DCB: TDCB;
begin

   FillChar(S, 128, #0);
   FillChar(D, 128, #0);

   DCB.DCBlength := SizeOf(DCB);

   if not GetCommState(hPort, DCB) then begin
ShowMessage('Can''t get port state: ' + IntToStr(GetLastError));
Exit;
   end;

   try
DCB.BaudRate := StrToInt(BaudCombo.Text);
   except
BaudCombo.Text := IntToStr(DCB.BaudRate);
   end;

   try
DCB.ByteSize := StrToInt(ByteSizeCombo.Text);
   except
ByteSizeCombo.Text := IntToStr(DCB.ByteSize);
   end;

   if ParityCombo.ItemIndex > -1 then
DCB.Parity := ParityCombo.ItemIndex
   else
ParityCombo.ItemIndex := DCB.Parity;

   if StopBitsCombo.ItemIndex > -1 then
DCB.StopBits := StopBitsCombo.ItemIndex
   else
StopBitsCombo.ItemIndex := DCB.StopBits;

   if not SetCommState(hPort, DCB) then begin
ShowMessage('Can''t set new port settings: ' + IntToStr(GetLastError));
Exit;
   end;

PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);

   StrPCopy(S, Memo1.Text);

   if not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then begin
ShowMessage('Can''t write to port: ' + IntToStr(GetLastError));
Exit;
   end;

   if not ReadFile(hPort, D, StrToInt(Edit3.Text), actual_bytes, nil) then
ShowMessage('Can''t read from port: ' +! IntToStr(GetLastError))
   else
ShowMessage('Read ' + IntToStr(actual_bytes) + ' bytes');
   Memo2.Text := D;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   with TRegistry.Create do begin
OpenKey('\Software\MBEM\Rosh Shkila', True);
WriteString('Port', PortCombo.Text);
WriteString('Baud Rate', BaudCombo.Text);
WriteString('Byte Size', ByteSizeCombo.Text);
WriteString('Parity', IntToStr(ParityCombo.ItemIndex));
WriteString('Stop Bits', IntToStr(StopBitsCombo.ItemIndex));
Destroy;
   end;
   if not CloseHandle(hPort) then begin
ShowMessage('Can''t close port: ' + IntToStr(GetLastError));
Exit;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   hPort := CreateFile(PChar(PortCombo.Text),
   GENERIC_READ + GENERIC_WRITE,
   0,
   nil,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,
   0);

   if hPort = INVALID_HANDLE_VALUE then
ShowMessage('Can''t open ' + PortCombo.Text + ': ' + IntToStr(GetLastError))
   else
Button2.Hide;
end;

procedure TForm1.PortComboChange(Sender: TObject);
begin
   FormDestroy(Sender);
   Button2.Show;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   with TRegistry.Create do begin
OpenKey('\Software\MBEM\Rosh Shkila', True);
PortCombo.Text := ReadString('Port');
BaudCombo.Text := ReadString('Baud Rate');
ByteSizeCombo.Text := ReadString('Byte Size');
ParityCombo.ItemIndex := StrToInt(ReadString('Parity'));
StopBitsCombo.ItemIn! dex := StrToInt(ReadString('Stop Bits'));
Destroy;
   end;
end;

procedure TForm1.Memo1DblClick(Sender: TObject);
begin
   Memo1.Lines.Clear;
   Memo2.Lines.Clear;
   Edit1.Text := '';
   Edit2.Text := '';
end;

end.


»»» peter - ppp_extr@chat.ru (03.07.00 09:05)
Пример вывода текста на печать используя ком порт

Var
Printer: THandle;
N : Cardinal;
C : POverlapped;

begin
//Открываем порт принтера для записи
Printer := CreateFile(PChar('LPT1'),
GENERIC_READ or GENERIC_WRITE,0,nil,
OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);

//Печатаем слово 'Hello World';
WriteFile(Printer,'Hello World',11,N,c);
//Закрываем порт
CloseHandle(Printer);

-= Из конференции сайта MASTERS OF DELPHI (http://delphi.mastak.com) =-

»»» Прислать свои комментарии

Обсуждается в конференциях   |x|
  • MouseMove
    Есть рисунок - на нем надпись (не стандартный текст), как мне сделать, чтобы при наведении мышой на определенную ...
  • Помогите с null-terminating string'ами
    Проблема заключается в следующем: Я пишу функцию, которой в качествае параметра передается string, тип возвращаемого ...
  • Как мне подключать эти формы из DLL
    У меня в программе 3 формы В главной форме я могу работать с другими например вот так form2.Label1.Caption:='Зброс'; ...
  • Generator
    Мастера, как лучше узнать значение поля, которое устанавливается триггером? Я делаю переоткрытие запроса, но это очень ...
  • Как распространять приложения с БД под Interbase?
    Господа, не могли бы Вы подсказать, какие файлы надо поставлять пользователям, чтобы работало приложение, использующие ...
  • Композитивный отчет приводит к сбою приложение!
    Стоит скинуть композитивный отчет и закрыть проект, после чего он больше не открываеться!!! Что делать? Где можно взять ...
  • Удалить одинаковые строки из listbox
    В listbox есть список строк: r123 r456 r789 r123 r098 r456 Так вот, нужно найти одинаковые строки и удалить их! В ...
У нас большой выбор статей   |x|
Перемещение Image по форме во время работы программы
Многие из вас, наверное, сталкивались с проблемой перемещения Image'a по форме. Решить ее можно, по крайней, мере тремя способами...
Новинки книжного рынка   |x|
Shareware : профессиональная разработка и продвижение программ
Рассматриваются особенности создания условно-бесплатных программ, приводятся рекомендации по разработке интерфейса и оформлению документации, обсуждаются теоретические и практические вопросы проектирования, рекламы, маркетинга и технической поддержки создаваемого программного продукта. Книга содержит примеры удачной разработки и реализации программ из мировой и российской практики. Множество иллюстраций дает возможность более наглядно представить объем и качество работы, необходимой для создания программ на профессиональном уровне.
Автор: Жарков С.
Другие сайты о DELPHI   |x|
FreePascal :)
На этом сайте можно скачать Freepascal :)
A используя бесплатную оболочку плюс бесплатный компилятор - можно писать коммерческие дельфийские проги :)
там GPL лицензия
саму оболочку можно ...

» Оценка сайта: 2
Опрос населения :)
Стоит ли устраивать встречи программистов в реале? (пирушки :)
»»» Обязательно!
»»» Иногда можно
»»» Я туда не пойду
»»» Категорически нет
Журнал "RSDN Magazine"  |x|

Дорогие друзья! Мы рады представить вам новый совместный проект сайтов www.rsdn.ru, delphi.mastak.ru и www.optim.ru - профессиональный журнал для программистов RSDN Magazine.
Несомненно, ваше мнение о необходимости такого журнала, содержании рубрик и темах отдельных статей поможет сделать журнал более полезным и интересным. Высказать свое мнение, проголосовать или же подписаться вы можете на сайте. Без вашего участия, нам будет трудно сделать правильный журнал!
На сайте выложен анонс пилотного выпуска журнала, вступительное слово от редакции.

Для души

Хокку дня
летом на реке -
рядом мост, но мой конь
переходит вброд

Афоризмы
И ностальгия уже не та, что была раньше (Симона Синьоре)

Фраза дня
Тише едешь - никому не нужен (услышано от гаишника)

Дурацкие законы (информация предоставлена сайтом kurilka.com)
В городе Экселзиор Спрингс в Монтане (США) считается преступлением бросаться мячами.
В городе Элко в Неваде (США) по улицам можно ходить только в маске.

И на закуску коротенький анекдот
Собака: "Я след хозяина всегда узнаю: он широкий и непрерывный".

Фотоприколы.
Начните день с хорошего настроения!
http://delphi.mastak.ru/cgi-bin/prikol.pl?id=444222


На этом позвольте откланяться и пожелать вам удачного дня.
Искренне ваш, Алексей (delphi@mastak.com)

Добро пожаловать на сайт -= Мастера DELPHI =- 


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное