PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Диалоговое окно


Диалоговое окно

Сообщений 1 страница 16 из 16

1

Решил значит создать диалоговое окно в процедуре(функции)ну типа шрифт выбирать смотреть что выбрал.
И тут бах не понял ,почему по окончании этой процедуры с закрытием окна вся программа завершается?я как бы процедуру с дополнительным окном типа диалога завершал.
Это ошибка или что?

Код:

Procedure.i Test_metrika()
Protected window_hwnd.i
Protected canvas_hwnd.i




 window_hwnd=OpenWindow(#PB_Any, 0, 0, 600, 600, "Выбор шрифта",#PB_Window_SystemMenu| #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
 canvas_hwnd=CanvasGadget(#PB_Any,300,200,300,300)
 
 
 
Repeat
 Select WaitWindowEvent()
  Case #PB_Event_CloseWindow
     
    ;DestroyWindow_(canvas_hwnd)
    ;DestroyWindow_(window_hwnd)
    Break
  
EndSelect
ForEver
ProcedureReturn 
EndProcedure

OpenWindow(0, 0, 0, 800, 400, "Testhrift",#PB_Window_SystemMenu| #PB_Window_SizeGadget | #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)


Test_metrika()


Repeat
Event = WaitWindowEvent()
 
Until Event = #PB_Event_CloseWindow

0

2

И ещё не понятно в чём различие такое в функциях api CloseWindow_() и пурика CloseWindow(),первая всю программу закрывает а вторая только  своё окно,как так?

Код:

Procedure.i Test_metrika()
Protected window_hwnd.i
Protected canvas_hwnd.i

 window_hwnd=OpenWindow(#PB_Any, 0, 0, 600, 600, "Выбор шрифта",#PB_Window_SystemMenu| #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
 canvas_hwnd=CanvasGadget(#PB_Any,300,200,300,300)
 
Repeat
 Select WaitWindowEvent()
  Case #PB_Event_CloseWindow
    CloseWindow(window_hwnd)
    ;CloseWindow_(window_hwnd)
    ;DestroyWindow_(canvas_hwnd)
    ;DestroyWindow_(window_hwnd)
    Break
  
EndSelect
ForEver
ProcedureReturn 
EndProcedure

OpenWindow(0, 0, 0, 800, 400, "Testhrift",#PB_Window_SystemMenu| #PB_Window_SizeGadget | #PB_Window_MinimizeGadget| #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)


Test_metrika()


Repeat
Event = WaitWindowEvent()
 
Until Event = #PB_Event_CloseWindow

Отредактировано Sergeihik (26.04.2022 17:45:46)

0

3

Обработчик событий должен быть один (общий для всех окон).
Функция EventWindow() позволяет узнать в каком окне произошло событие.

Sergeihik написал(а):

в чём различие такое в функциях api CloseWindow_() и пурика CloseWindow()

Не стоит окна PB закрывать через WinAPI.

0

4

Пётр написал(а):

Обработчик событий должен быть один (общий для всех окон).
Функция EventWindow() позволяет узнать в каком окне произошло событие.

Не стоит окна PB закрывать через WinAPI.

Так а как же классы api создаются?что прям у всех классов один обработчик и в нём типа все окно определять с принадлежностью?
Вопрос вот возник а как можно скомпилить процедуру в длл что бы она не публичной была и не отображалась в прасмоторщиках dll?

0

5

Sergeihik написал(а):

не понятно в чём различие такое в функциях api CloseWindow_() и пурика CloseWindow()

Я думаю PureBasic хранит информацию о всех созданных элементах (внутренние идентификаторы окон, гаджетов, рисунков) в виде списка, и каждый список отдельный со своей нумерацией. Если программа закрывается, то PureBasic по возможности освободит ресурсы, закрыв все элементы созданные программой, точнее элементы имеющие внутренний идентификатор. Функция CloseWindow() закрывает окно и освобождает идентификатор в списке. Если использовать CloseWindow_(), то PureBasic не освободит идентификатор в списке и будет продолжает его обслуживать, думая что окно существует. Возможно это не критично, так как при попытке закрыть окно PureBasic скорее всего воспользуется функцией CloseWindow_(), а она просто выдаст ошибку в пустоту и ничего страшного. Но проблема если PureBasic например перерисовывает окно или ещё что-либо, что может вызывать сбои, который не известно чем могут закончится. Вот поэтому и не желательно ставить PureBasic в неловкое положение.

0

6

Sergeihik написал(а):

Вопрос вот возник а как можно скомпилить процедуру в длл что бы она не публичной была и не отображалась в прасмоторщиках dll?

Именно скомпилировать? Да, наверное, никак. Если вы хотите скомпилировать длл, то компилятор это сделает самым обычным образом. Все процедуры или функции будут вполне себе публичные))) Да собственно, для этого дллки обычно и пишутся. Ещё и мануалы рисуют и раздают с описанием как всем этим пользоваться  8-)
Вы напишите более детально что вы хотите, для чего это нужно (от кого скрыть) и где будете использовать эту длл. Может что-то можно будет посоветовать.

0

7

Ну с индификаторами та да понятно.так и подумал

А вот приватные процедуры в dll вполне себе встречаются.
И нужно допустим обработчик сделать как приватный,зачем он пользователю публичный?
Если только типа как у sсintilly в нем описать
вызов процедур или участок исполняемого кода
Или это такая процедура которая много раз в коде
встречается в других процедурах но она не для
публичного использования так как не имеет ни какого смысла.

Отредактировано Sergeihik (28.04.2022 08:55:35)

0

8

Sergeihik написал(а):

Вопрос вот возник а как можно скомпилить процедуру в длл что бы она не публичной была и не отображалась в прасмоторщиках dll?

Скомпилируйте код и найдите процедуру в dll.

Код:
Procedure Test()
EndProcedure

0

9

Пётр написал(а):

Procedure Test()
EndProcedure

Пётр написал(а):

Скомпилируйте код и найдите процедуру в dll.

В принципе да работает,получается если нет в названии dll то процедура тоже компилится но как приватная.
Ps: вот ещё вопросик,есть константа #PB_2DDrawing_Transparent а с #OPAQUE у меня нет.это только у меня в ранней версии?
и можно ли тогда сделать так DrawingMode(2)?
и вопросик если константа (PB_Any) hwnd=ButtonGadget(#PB_Any,0,0,55,15,"") то тоже окно разрушать не надо и оно само пуриком удалится,как бы hwnd=id будет?

Отредактировано Sergeihik (28.04.2022 15:18:32)

0

10

Sergeihik написал(а):

hwnd=id будет?

на сколько я знаю нет. Если использовать id, то возвращает hwnd, а если использовать #PB_Any, то возвращает id. Но возврат hwnd не документировано, в справке указано что возвращает результат успешного выполнения, фактически hwnd не может быть нулём и поэтому используется как флаг успешности. Вообще #PB_Any удобен для модуля, так как неизвестно кем будет использован модуль и имеются ли занятые id, поэтому он генерируется. А программе удобнее указывать кнопки через "перечисление" с именными константами.

Отредактировано AZJIO (28.04.2022 16:44:44)

0

11

Sergeihik написал(а):

как бы hwnd=id будет?

https://www.purebasic.com/documentation … ndles.html

0

12

если гаджету давать просто номер, то гаджет возвращает gadgetId
если гаджету давать #pb_any, то гаджет возвращает номер и потом нужно gadgetId использовать
это нередко в примерах встречается\используется
с недавних пор пользуюсь этой особонностью, в структуре оба числа для каждого гаджета хранятся
оказалось очень удобно
это не документировано, но судя по примерам, это работает с первых версий

0

13

Да я так и понял что с #PB_Any возвращает сгенерированный id.,для диалогового окна думаю удобно так как не будет конфликтов с ранее уже созданными гаджетами.

0

14

C окном по шрифту пока отложил и разбираюсь с компортом(хочу через него открывать ком порт)
и вот оказывается если разработчиком поставляется в длл диалоговое окно то работает.
имя устройства должно быть как в диспетчере у меня допустим com2 на переходнике usb_com(rs232)
так это открывает как в диспетчере приметивненко без настройки буферов.
PS:при смене параметров в этом окне по умолчанию в диспетчере они не поменялись.

Код:

       
Procedure.s debug_ohibka()
Protected Buffer.s = Space(200)
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError_(), #LANG_NEUTRAL, @Buffer, 200,0)
Debug Str(GetLastError_())+"   "+Buffer
EndProcedure
Structure _DCB;{;Определяет настройку управления для устройства последовательной связи.
   DCBlength.l;Длина структуры в байтах. Вызывающий должен установить для этого члена значение sizeof(DCB)
   BaudRate.l ;Скорость передачи данных бит/с ,с которой работает устройство связи. Этот элемент может быть фактическим значением скорости передачи данных или одним из следующих индексов.
   fBinary.l; : 1;Если этот элемент имеет значение TRUE, двоичный режим включен. Windows не поддерживает передачи в недвоичном режиме, поэтому этот элемент должен иметь значение TRUE.
   fParity.l; : 1;Если этот элемент имеет значение TRUE, выполняется проверка четности и сообщается об ошибках.
   fOutxCtsFlow.l; : 1;Если этот элемент имеет значение TRUE, сигнал CTS (готовность к отправке) отслеживается для управления выходным потоком. Если этот элемент имеет значение TRUE и CTS отключен, вывод приостанавливается до тех пор, пока CTS не будет отправлен снова.
   fOutxDsrFlow.l; : 1;Если этот элемент имеет значение TRUE, сигнал DSR (готовность к набору данных) отслеживается для управления выходным потоком. Если этот элемент имеет значение TRUE и DSR отключен, вывод приостанавливается до тех пор, пока DSR не будет отправлен снова.
   fDtrControl.l ; : 2;Управление потоком DTR (готовность к терминалу данных). Этот элемент может быть одним из следующих значений.
   fDsrSensitivity.l; : 1;Если этот элемент равен TRUE, драйвер связи чувствителен к состоянию сигнала DSR. Драйвер игнорирует любые полученные байты, если только входная линия модема DSR не имеет высокого уровня.
   fTXContinueOnXoff.l; : 1;Если этот элемент имеет значение TRUE, передача продолжается после того, как входной буфер достиг предела XoffLim байтов от заполнения и драйвер передал символ XoffChar, чтобы прекратить прием байтов. Если этот элемент имеет значение FALSE, передача не продолжается до тех пор, пока входной буфер не станет пустым в пределах XonLim байтов и драйвер не передаст символ XonChar для возобновления приема.
   fOutX.l; : 1;Указывает, используется ли во время передачи управление потоком XON/XOFF. Если этот элемент имеет значение TRUE, передача останавливается при получении символа XoffChar и начинается снова при получении символа XonChar.
   fInX.l; : 1;Указывает, используется ли во время приема управление потоком XON/XOFF. Если этот элемент имеет значение TRUE, символ XoffChar отправляется, когда входной буфер находится в пределах байтов XoffLim от заполнения, а символ XonChar отправляется, когда входной буфер находится в пределах байтов XonLim от заполнения.
   fErrorChar.l; : 1;Указывает, заменяются ли байты, полученные с ошибками четности, символом, указанным элементом ErrorChar. Если этот элемент имеет значение TRUE, а элемент fParity имеет значение TRUE, происходит замена.
   fNull.l; : 1;Если этот элемент имеет значение TRUE, при получении нулевые байты отбрасываются.
   fRtsControl.l; : 2;Управление потоком RTS (запрос на отправку). Этот элемент может быть одним из следующих значений.
   fAbortOnError.l; : 1;Если этот элемент имеет значение TRUE, драйвер завершает все операции чтения и записи со статусом ошибки, если возникает ошибка. Драйвер не будет принимать никаких дальнейших коммуникационных операций, пока приложение не подтвердит ошибку, вызвав функцию ClearCommError.
   fDummy2.l; : 17;не используй.
   wReserved.w;Зарезервировано должен быть равен нулю.
   XonLim.w;Минимальное количество используемых байтов, разрешенное во входном буфере, прежде чем активируется управление потоком, чтобы разрешить передачу отправителем. Это предполагает, что в элементах fInX, fRtsControl или fDtrControl указано управление входным потоком XON/XOFF, RTS или DTR.
   XoffLim.w;Минимальное количество свободных байтов, разрешенных во входном буфере, прежде чем активируется управление потоком для запрета отправителя. Обратите внимание, что отправитель может передавать символы после активации сигнала управления потоком, поэтому это значение никогда не должно быть равно нулю. Это предполагает, что в элементах fInX, fRtsControl или fDtrControl указано управление входным потоком XON/XOFF, RTS или DTR. Максимально допустимое количество используемых байтов рассчитывается путем вычитания этого
   ByteSize.d;Количество битов в переданных и полученных байтах
   Parity.b  ;Используемая схема паритета. Этот элемент может быть одним из следующих значений.
   StopBits.b    ;Количество стоповых битов, которые будут использоваться. Этот элемент может быть одним из следующих значений.
   XonChar.c;Значение символа XON как для передачи, так и для приема.
   XoffChar.c;Значение символа XOFF как для передачи, так и для приема.
   ErrorChar.c;Значение символа, используемого для замены байтов, полученных с ошибкой четности.
   EofChar.c;Значение символа, используемого для обозначения конца данных.
   EvtChar.c;Значение символа, используемого для обозначения события.
   wReserved1.w;
;Примечания
;Когда для настройки 8250 используется структура DCB, к значениям, указанным для элементов ByteSize и StopBits, применяются следующие ограничения:
;Количество битов данных должно быть от 5 до 8 бит.
;Использование 5 битов данных с 2 стоповыми битами является недопустимой комбинацией, равно как и 6, 7 или 8 битов данных с 1,5 стоповыми битами. 
 EndStructure;};
Structure _COMMCONFIG;{;Содержит информацию о состоянии конфигурации устройства связи.
   dwSize.l;Размер структуры в байтах. Вызывающий должен установить для этого члена значение sizeof(COMMCONFIG)
   wVersion.w;Номер версии структуры. Этот параметр может быть равен 1. Версия специфичной для провайдера структуры должна быть включена в элемент wcProviderData.
   wReserved.w; не используй
   dcb._DCB;Структура блока управления устройством (DCB) для последовательных устройств RS-232. Структура DCB присутствует всегда, независимо от подтипа драйвера порта, указанного в структуре COMMPROP устройства.
   dwProviderSubType.l;Тип провайдера связи и, следовательно, формат данных, специфичных для провайдера. Список типов провайдеров связи см. в описании структуры COMMPROP.
   dwProviderOffset.l;Смещение данных поставщика относительно начала структуры в байтах. Этот член равен нулю, если нет данных, специфичных для поставщика.
   dwProviderSize.l;Размер данных поставщика в байтах.
   wcProviderData.u[1];Необязательные данные для конкретного поставщика.
   ;Этот элемент может быть любого размера или может быть опущен. Поскольку в будущем структура COMMCONFIG может быть расширена, приложения должны использовать элемент dwProviderOffset для определения местоположения этого элемента.
;Примечания
;Если подтип поставщика — PST_RS232 или PST_PARALLELPORT, элемент wcProviderData опускается. Если подтип провайдера — PST_MODEM, элемент wcProviderData содержит структуру MODEMSETTINGS.
EndStructure;};

Procedure.i CommConfigDialog(*lpszName,hWnd,*COMMCONFIG);Отображает диалоговое окно конфигурации драйвера
;lpszName,Имя устройства, для которого должно отображаться диалоговое окно. Например, от COM1 до COM9 — последовательные порты, а от LPT1 до LPT9 — параллельные порты.
;hWnd,Дескриптор окна, которому принадлежит диалоговое окно. Этот параметр может быть любым допустимым дескриптором окна или должен иметь значение NULL, если у диалогового окна не должно быть владельца.
;*COMMCONFIG,Указатель на структуру COMMCONFIG. Эта структура содержит исходные настройки диалогового окна до звонка и измененные значения после звонка.
;Примечания;Для функции CommConfigDialog требуется библиотека динамической компоновки (DLL), предоставляемая поставщиком коммуникационного оборудования.
  If CommConfigDialog_(*lpszName,hWnd,*COMMCONFIG)<>0
    ProcedureReturn 1
  Else  
    debug_ohibka()
    ProcedureReturn 0
  EndIf
EndProcedure
Global _COMMCONFIG._COMMCONFIG
_COMMCONFIG\dwSize=SizeOf(_COMMCONFIG)


CommConfigDialog(@"COM2",0,_COMMCONFIG)

Отредактировано Sergeihik (03.06.2022 15:19:01)

0

15

Вот ещё чего предыдущий код как видно работает с структурой DCB что нет в пурике
но решил я значит сделать отражение действующих ком портов что в наличии в ComboBoxGadget()
так как винда 7-ка я не могу задействовать функции что то типа GetCommPorts()
и решил использовать функцию GetDefaultCommConfig(работает с пуриковским DCB),так как она работает без открытия порта(собственно не смотрел пока функции открытия)
и если она завершается без ошибки то как бы порт существует.
но она показала два порта,выдернув все входы остался какой то один rs232,как думаете что это может быть?

Код:

Structure _DCB;{;Определяет настройку управления для устройства последовательной связи.
   DCBlength.l;Длина структуры в байтах. Вызывающий должен установить для этого члена значение sizeof(DCB)
   BaudRate.l ;Скорость передачи данных бит/с ,с которой работает устройство связи. Этот элемент может быть фактическим значением скорости передачи данных или одним из следующих индексов.
   fBinary.l; : 1;Если этот элемент имеет значение TRUE, двоичный режим включен. Windows не поддерживает передачи в недвоичном режиме, поэтому этот элемент должен иметь значение TRUE.
   fParity.l; : 1;Если этот элемент имеет значение TRUE, выполняется проверка четности и сообщается об ошибках.
   fOutxCtsFlow.l; : 1;Если этот элемент имеет значение TRUE, сигнал CTS (готовность к отправке) отслеживается для управления выходным потоком. Если этот элемент имеет значение TRUE и CTS отключен, вывод приостанавливается до тех пор, пока CTS не будет отправлен снова.
   fOutxDsrFlow.l; : 1;Если этот элемент имеет значение TRUE, сигнал DSR (готовность к набору данных) отслеживается для управления выходным потоком. Если этот элемент имеет значение TRUE и DSR отключен, вывод приостанавливается до тех пор, пока DSR не будет отправлен снова.
   fDtrControl.l ; : 2;Управление потоком DTR (готовность к терминалу данных). Этот элемент может быть одним из следующих значений.
   fDsrSensitivity.l; : 1;Если этот элемент равен TRUE, драйвер связи чувствителен к состоянию сигнала DSR. Драйвер игнорирует любые полученные байты, если только входная линия модема DSR не имеет высокого уровня.
   fTXContinueOnXoff.l; : 1;Если этот элемент имеет значение TRUE, передача продолжается после того, как входной буфер достиг предела XoffLim байтов от заполнения и драйвер передал символ XoffChar, чтобы прекратить прием байтов. Если этот элемент имеет значение FALSE, передача не продолжается до тех пор, пока входной буфер не станет пустым в пределах XonLim байтов и драйвер не передаст символ XonChar для возобновления приема.
   fOutX.l; : 1;Указывает, используется ли во время передачи управление потоком XON/XOFF. Если этот элемент имеет значение TRUE, передача останавливается при получении символа XoffChar и начинается снова при получении символа XonChar.
   fInX.l; : 1;Указывает, используется ли во время приема управление потоком XON/XOFF. Если этот элемент имеет значение TRUE, символ XoffChar отправляется, когда входной буфер находится в пределах байтов XoffLim от заполнения, а символ XonChar отправляется, когда входной буфер находится в пределах байтов XonLim от заполнения.
   fErrorChar.l; : 1;Указывает, заменяются ли байты, полученные с ошибками четности, символом, указанным элементом ErrorChar. Если этот элемент имеет значение TRUE, а элемент fParity имеет значение TRUE, происходит замена.
   fNull.l; : 1;Если этот элемент имеет значение TRUE, при получении нулевые байты отбрасываются.
   fRtsControl.l; : 2;Управление потоком RTS (запрос на отправку). Этот элемент может быть одним из следующих значений.
   fAbortOnError.l; : 1;Если этот элемент имеет значение TRUE, драйвер завершает все операции чтения и записи со статусом ошибки, если возникает ошибка. Драйвер не будет принимать никаких дальнейших коммуникационных операций, пока приложение не подтвердит ошибку, вызвав функцию ClearCommError.
   fDummy2.l; : 17;не используй.
   wReserved.w;Зарезервировано должен быть равен нулю.
   XonLim.w;Минимальное количество используемых байтов, разрешенное во входном буфере, прежде чем активируется управление потоком, чтобы разрешить передачу отправителем. Это предполагает, что в элементах fInX, fRtsControl или fDtrControl указано управление входным потоком XON/XOFF, RTS или DTR.
   XoffLim.w;Минимальное количество свободных байтов, разрешенных во входном буфере, прежде чем активируется управление потоком для запрета отправителя. Обратите внимание, что отправитель может передавать символы после активации сигнала управления потоком, поэтому это значение никогда не должно быть равно нулю. Это предполагает, что в элементах fInX, fRtsControl или fDtrControl указано управление входным потоком XON/XOFF, RTS или DTR. Максимально допустимое количество используемых байтов рассчитывается путем вычитания этого
   ByteSize.d;Количество битов в переданных и полученных байтах
   Parity.b  ;Используемая схема паритета. Этот элемент может быть одним из следующих значений.
   StopBits.b    ;Количество стоповых битов, которые будут использоваться. Этот элемент может быть одним из следующих значений.
   XonChar.c;Значение символа XON как для передачи, так и для приема.
   XoffChar.c;Значение символа XOFF как для передачи, так и для приема.
   ErrorChar.c;Значение символа, используемого для замены байтов, полученных с ошибкой четности.
   EofChar.c;Значение символа, используемого для обозначения конца данных.
   EvtChar.c;Значение символа, используемого для обозначения события.
   wReserved1.w;
;Примечания
;Когда для настройки 8250 используется структура DCB, к значениям, указанным для элементов ByteSize и StopBits, применяются следующие ограничения:
;Количество битов данных должно быть от 5 до 8 бит.
;Использование 5 битов данных с 2 стоповыми битами является недопустимой комбинацией, равно как и 6, 7 или 8 битов данных с 1,5 стоповыми битами. 
EndStructure;};
Structure _COMMCONFIG;{;Содержит информацию о состоянии конфигурации устройства связи.
   dwSize.l;Размер структуры в байтах. Вызывающий должен установить для этого члена значение sizeof(COMMCONFIG)
   wVersion.w;Номер версии структуры. Этот параметр может быть равен 1. Версия специфичной для провайдера структуры должна быть включена в элемент wcProviderData.
   wReserved.w; не используй
   dcb._DCB;Структура блока управления устройством (DCB) для последовательных устройств RS-232. Структура DCB присутствует всегда, независимо от подтипа драйвера порта, указанного в структуре COMMPROP устройства.
   dwProviderSubType.l;Тип провайдера связи и, следовательно, формат данных, специфичных для провайдера. Список типов провайдеров связи см. в описании структуры COMMPROP.
   dwProviderOffset.l;Смещение данных поставщика относительно начала структуры в байтах. Этот член равен нулю, если нет данных, специфичных для поставщика.
   dwProviderSize.l;Размер данных поставщика в байтах.
   wcProviderData.u[1];Необязательные данные для конкретного поставщика.
   ;Этот элемент может быть любого размера или может быть опущен. Поскольку в будущем структура COMMCONFIG может быть расширена, приложения должны использовать элемент dwProviderOffset для определения местоположения этого элемента.
;Примечания
;Если подтип поставщика — PST_RS232 или PST_PARALLELPORT, элемент wcProviderData опускается. Если подтип провайдера — PST_MODEM, элемент wcProviderData содержит структуру MODEMSETTINGS.
EndStructure;};






Procedure debug_ohibka()
Protected *Bufer
*Bufer=AllocateMemory(200)
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0, GetLastError_(), #LANG_NEUTRAL, *Bufer, 200,0)
MessageRequester("Событие",Str(GetLastError_())+"   "+PeekS(*Bufer,-1,#PB_Unicode))
FreeMemory(*Bufer)
EndProcedure
Procedure.i CommConfigDialog(*lpszName,hWnd,*COMMCONFIG);Отображает диалоговое окно конфигурации драйвера
;lpszName,Имя устройства, для которого должно отображаться диалоговое окно. Например, от COM1 до COM9 — последовательные порты, а от LPT1 до LPT9 — параллельные порты.
;hWnd,Дескриптор окна, которому принадлежит диалоговое окно. Этот параметр может быть любым допустимым дескриптором окна или должен иметь значение NULL, если у диалогового окна не должно быть владельца.
;*COMMCONFIG,Указатель на структуру COMMCONFIG. Эта структура содержит исходные настройки диалогового окна до звонка и измененные значения после звонка.
;Примечания;Для функции CommConfigDialog требуется библиотека динамической компоновки (DLL), предоставляемая поставщиком коммуникационного оборудования.
  If CommConfigDialog_(*lpszName,hWnd,*COMMCONFIG)<>0
    ProcedureReturn 1
  Else
    debug_ohibka()
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure.i GetDefaultCommConfig(*lpszName,*COMMCONFIG._COMMCONFIG,*lpdwSize);Извлекает конфигурацию по умолчанию для указанного устройства связи.(как в диспетчере)
;lpszName=Имя устройства. Например, от COM1 до COM9 — последовательные порты, а от LPT1 до LPT9 — параллельные порты
;*COMMCONFIG=Указатель на буфер, который получает структуру COMMCONFIG 
;lpdwSize=Указатель на переменную, определяющую размер буфера, на который указывает *COMMCONFIG, в байтах. По возвращении переменная содержит количество скопированных байтов, если функция завершилась успешно, или количество байтов, необходимых, если буфер был слишком мал.
  If GetDefaultCommConfig_(*lpszName,*COMMCONFIG._COMMCONFIG,*lpdwSize)<>0
    ProcedureReturn 1
  Else  
    
    ProcedureReturn 0
  EndIf
EndProcedure



;====================================
Global *COMMCONFIG.COMMCONFIG
Debug SizeOf(*COMMCONFIG)


Global *bufer=AllocateMemory(150)
Global bufersize.i=150;_COMMCONFIG\dwSize

For i=0 To 255
s.s="COM"+Str(i)
If GetDefaultCommConfig(@s,*bufer,@bufersize)
  *COMMCONFIG=*bufer
   Debug bufersize
   Debug s
    Debug "версия  "+Str(*COMMCONFIG\wVersion)
          Debug "========протокол связи======="
             Select *COMMCONFIG\dwProviderSubType
               Case $00000021;ФАКС
                 Debug "ФАКС"
               Case $00000101;LAT-протокол
                 Debug "LAT-протокол"
               Case $00000006;Модемное устройство
                 Debug "Модемное устройство"
               Case $00000100;Неизвестный сетевой мост
                 Debug "Неизвестный сетевой мост" 
               Case $00000002;Параллельный порт
                 Debug "Параллельный порт(Lpt)"
               Case $00000001;Последовательный порт RS-232
                 Debug "Последовательный порт RS-232"
               Case $00000003;Порт RS-422 
                 Debug "Порт RS-422 " 
               Case $00000004;Порт RS-423
                 Debug "Порт RS-423"
               Case $00000005;Порт RS-449
                 Debug "Порт RS-449"
               Case $00000022;Сканер
                 Debug "Сканер"
               Case $00000102;Протокол TCP/IP Telnet
                 Debug "Протокол TCP/IP Telnet" 
               Case $00000000;Неопределенные
                 Debug "Неопределенные"
               Case $00000103;Стандарты Х.25
                 Debug "Стандарты Х.25"
               Default:;Неустановленный
                 Debug "Неустановленный" 
             EndSelect
           Debug "============"  
           Debug "dwProviderOffset  "+Str(*COMMCONFIG\dwProviderOffset)
           Debug "dwProviderSize  "+Str(*COMMCONFIG\dwProviderSize)
           Debug "wcProviderData  "+Str(*COMMCONFIG\wcProviderData)
           Debug "=====dcb====="
            Debug "DCBlength  "+Str(*COMMCONFIG\dcb\DCBlength)
            Debug "BaudRate(Скорость обмена данными, бит/с) "+Str(*COMMCONFIG\dcb\BaudRate);;Скорость обмена данными, бит/с 
            
           Debug "======Битовое поле для настройки порта===="
              Select *COMMCONFIG\dcb\fbits
                Case 4880
                  Debug "Xon/Xoff" 
                Case 4112
                  Debug "Нет"
                Case 8236
                 Debug "Аппаратное"     
              EndSelect  
            Debug "XonLim  "+Str(*COMMCONFIG\dcb\XonLim)
           Debug "XoffLim  "+Str(*COMMCONFIG\dcb\XoffLim)

            Debug "биты данных "+Str(*COMMCONFIG\dcb\ByteSize)
            ;
            
            Debug "=============чётность============"
              Select  *COMMCONFIG\dcb\Parity;чётность
               Case 0;Нет чётности(Нет паритета)
                  Debug "нет"
               Case 1;НЕЧЕТНОСТЬ(Нечетный паритет)
                 Debug "нечет(нечётность)"
               Case 2;РАВЕНСТВО Даже паритет.
                 Debug "чёт(равенство)"
               Case 3;Отметить паритет
                 Debug "маркер(равенство)"
               Case 4;ПРОСТРАНСТВО(Космический паритет)
                 Debug "пробел"
             EndSelect
              Debug "======================="
            ;
            Debug "=========StopBits=========="
              Select *COMMCONFIG\dcb\StopBits
                Case 0;1  
                  Debug "1"
                Case 1;1.5
                  Debug "1.5"
                Case 2;2
                  Debug "2"
              EndSelect  
            Debug *COMMCONFIG\dcb\XonChar
            Debug *COMMCONFIG\dcb\XoffChar
            Debug *COMMCONFIG\dcb\ErrorChar
            Debug *COMMCONFIG\dcb\EofChar
            Debug *COMMCONFIG\dcb\EvtChar
   
   
 EndIf  
Next
  FreeMemory(*bufer)
;===================================  
  
  
 Global _COMMCONFIG._COMMCONFIG
_COMMCONFIG\dwSize=SizeOf(_COMMCONFIG) 
CommConfigDialog(@"COM2",0,_COMMCONFIG)

Отредактировано Sergeihik (03.06.2022 17:33:22)

0

16

Вобщем GetDefaultCommConfig()неправильно определяла порт а SetDefaultCommConfig() не ставит параметров по умолчанию(не работает),буду получать ставить на открытый порт
там вроде бы ок. это программный модем на com порту.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Диалоговое окно