Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 22.04.2019, 10:49   #1
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 24
Репутация: 10
По умолчанию TLazSerial

Здравствуйте знатоки Лазаруса.

Подскажите как с помощью Библиотеки TLazSerial определить открыт Сом порт уже или нет , дело в том что если он открыт и пытаться его открывать ещё раз не получится и как следствие прога вылетает , а нужно этот момент предусмотреть. Работать с портом вроде как получается , а вот этот момент не выходит . Доку в интернете найти не получается по библиотеки.
Fedia74 вне форума   Ответить с цитированием
Старый 22.04.2019, 11:48   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,651
Репутация: 2631
По умолчанию

Код:
if Serial.Active then
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 22.04.2019, 14:18   #3
Fedia74
Пользователь
 
Регистрация: 24.03.2019
Сообщений: 24
Репутация: 10
По умолчанию

Это просто переменная которая показывает о подключении или нет Сом порта , а для того что бы узнать занят порт или нет нужно к нему пробовать подцепиться.
А проблема в том что когда подключаешься к занятому порту то выскакивает меню ошибки (Порт занят) с выбором действия , остановить прогу или продолжить и это мешает.
Дело в том что если программно опрашивать порты в поиске нужного , то эта выскакивающая меню очень мешает . И было найдено решение.

В модуле TLazSerial ,были сделаны изменения в двух процедурах

Код:
procedure TLazSerial.DeviceOpen;
begin
  FSynSer.Connect(FDevice);  // тута определение ошибки открытия
  if FSynSer.Handle=INVALID_HANDLE_VALUE
   then
     exit; // отключено вывод меню и выход по ошибке , сделан просто выход из Процедуры 
    //raise Exception.Create('Could not open device '+ FSynSer.Device);

  FSynSer.Config(ConstsBaud[FBaudRate],
                 ConstsBits[FDataBits],
                 ConstsParity[FParity],
                 ConstsStopBits[FStopBits],
                 FSoftflow, FHardflow);

  // Launch Thread
  ReadThread := TComPortReadThread.Create(true);
  ReadThread.Owner := Self;
  ReadThread.MustDie := false;
//  ReadThread.Resume;   --> deprecated
  ReadThread.Start;
end;
И во второй

Код:
procedure TLazSerial.SetActive(state: boolean);
begin
  if state=FActive then  exit;

  if state
   then
    begin
     DeviceOpen;       //Добавлено условие ошибки
     if FSynSer.Handle=INVALID_HANDLE_VALUE
      then state:=false;
    end
   else
     DeviceClose;

  FActive:=state;
end;
В результате окно ошибки не выводится , просто нет подключения к занятому порту .
Теперь можно программно опрашивать порты и если при подключении к порту подключения не произошло , то это значит что порт занят.
И вот тут уже да можно использовать Active и смотреть подключился порт или нет .


РЕШЕНО.

Последний раз редактировалось Fedia74; 22.04.2019 в 14:22.
Fedia74 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


18:28.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.