Seite 1 von 2

Gadgets - verfügbare Anschlüsse anzeigen

Verfasst: 26.10.2006 12:41
von Doris
Guten Tag allerseits,

ich als blutige Anfängerin in der Programmiererei hab mir gedacht, PureBasic könnte "meins" sein. Sieht auch eindeutig so aus, und es macht viel Spaß.

Gleich bei der ersten Aufgabe bin ich nun auf folgendes Problem gestoßen:
Ich möchte in meinem Fenster die auf dem Rechner verfügbaren COM-Anschlüsse anzeigen, um sie dem Anwender später zur Auswahl zur Verfügung zu stellen.

Ich kann nun einfach nicht herausbekommen, wie ich das Gadget anlegen muss, damit ich die Anschlüsse zusehen bekomme, die im Geräte-Manager verfügbar sind...

Kann mir hier bitte jemand helfen? Vielen Dank schon im Voraus.

Gruss - Doris

Verfasst: 26.10.2006 12:53
von bobobo
Hi auch..

in etwas so

Code: Alles auswählen

; Debugger Anmachen !!
For i=1 To 100
If OpenComPort(0,"Com"+Str(i)+":")
  Debug "Com"+Str(i)+": ist vorhanden"
  EndIf
Next i
End
ich mach das gleich auch mal mit Gadgets .. momang ..VisualDesigner anwerfen .. Gerüst basteln .. Datenabfrage in der PBIDE integrieren.



Ich finde zwar OpenComPort() nicht in der Dokumentation .. es geht
aber trotzdem

Ansonsten guck auch mal ins Codearchiv auf purearea.net
und bemüh die Forensuche

Verfasst: 26.10.2006 12:54
von AND51
Möchtest du wissen, wie man Gadgets erstellt?

Dann musst du zunächst ein Fenster öffnen:

Code: Alles auswählen

OpenWindow(0, 0, 0, 800, 600, "COM-Anschlüsse")
Sobald du dieses Fenster erstellt hast, erstellst du eine Gadgetliste. Dazu gibt es den fehel CreateGadgetList(), und der geht so: DU setzt einfach das handle des Windows, zu dem die folgenden Gadgets erstelt werden sollen, in die Klammer ein:

Code: Alles auswählen

CreateGadgetList(WindowID(0))
Nun kannst du alle gadgets erstelen, die du möchtest. Beispielsweise einen Button für jeden COM-Anschluss.

Code: Alles auswählen

ButtonGadget(0, 5, 5, 200, 30, "COM 1")
ButtonGadget(1, 5, 5, 200, 30, "COM 2")
ButtonGadget(2, 5, 5, 200, 30, "COM 3")
Alles klar? :D

Verfasst: 26.10.2006 13:00
von Doris
Vielen Dank erstmal, dass man hier so schnell Antwort bekommt.

Meine ersten Gadgets stehen schon, ich bin begeistert.

Aber das Problem ist, dass ich nicht weiss, welche Com-Ports der Anwender des Programms auf seinem Rechner hat und ich möchte nur die anzeigen, die auch vorhanden sind.
Dazu müsste ich vermutlich den Gerätemanager "lesen", um das herauszufinden...aber wie?

Gruss - Doris

Verfasst: 26.10.2006 13:04
von bobobo
Comportsauswahl per OpenComPort in Comboboxauswahl zum auswählen
für PB 4

Code: Alles auswählen

Enumeration
  #Window_0
  #Combo_0
  #Button_0
  #Button_1
  #Button_2
  #Text_0
EndEnumeration

If OpenWindow(#Window_0, 216, 0, 380, 159, "Portauswahl",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

  If CreateGadgetList(WindowID(#Window_0))
    ComboBoxGadget(#Combo_0, 10, 30, 130, 200, #PB_ComboBox_UpperCase)
    ButtonGadget(#Button_0, 240, 30, 90, 20, "ok")
    ButtonGadget(#Button_1, 240, 60, 90, 20, "ko")
    ButtonGadget(#Button_2, 240, 90, 90, 20, "¿?")
    TextGadget(#Text_0, 10, 10, 190, 20, "Wähle den Port")
  EndIf

EndIf

For i=1 To 100 ; ist vielleicht etwas viel , aber man kann ja nie wissen

  If ReadFile(0,"Com"+Str(i)+":") ;liefert was zurück wenn der Port verfügbar ist
    AddGadgetItem(#Combo_0,-1,"Com"+Str(i)+":")
    CloseFile(0) ; Comport wieder zu
  EndIf

Next i

SetGadgetState(#Combo_0,0)

Repeat
  Event = WaitWindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()

  If Event = #PB_Event_Gadget

    If GadgetID = #Combo_0

    ElseIf GadgetID = #Button_0
      SetGadgetText(#TExt_0,"Na gut ..meinetwegen "+GetGadgetText(#Combo_0))
      DisableGadget(#Button_0,1)
      Delay(1000)
      DisableGadget(#Button_0,0)
      SetGadgetText(#TExt_0,"Wähle den Port")

    ElseIf GadgetID = #Button_1
      End

    ElseIf GadgetID = #Button_2
      MessageRequester("AHA","Das Zeichen ¿ erhälst Du, wenn Du ALT drückst und dann 0191 eingibst",#MB_ICONEXCLAMATION)
    EndIf

  EndIf

Until Event = #PB_Event_CloseWindow

End


Verfasst: 26.10.2006 13:32
von bobobo
OpenComPort funktioniert wohl wie OpenFile

um einen Port zu schließen sollte ein Closefile() ausreichen

hier die geänderte CommPortAuswahlSchleife

Code: Alles auswählen

For i=1 To 100
  If OpenComPort(0,"Com"+Str(i)+":")
    AddGadgetItem(#Combo_0,-1,"Com"+Str(i)+":")
    CloseFile(0)    
  EndIf
Next i
hab ich oben auch mit eingetragen

Verfasst: 26.10.2006 13:34
von Doris
Vielen herzlichen Dank!

So werd ich es versuchen.

Viele Grüße
Doris

Verfasst: 26.10.2006 13:55
von Zaphod
Das ist ja ein Ding... es gibt Tatsächlich OpenComPort() .... warum um alles in der Welt ist das denn nicht Dokumentiert?

Verfasst: 26.10.2006 14:03
von bobobo
Weil es nicht nötig ist ..scheint identisch mit OpenFile() zu sein

Könnte Andre ja mal was machen

Verfasst: 26.10.2006 16:05
von Doris
Vielen Dank nochmal, bobobo,

ich hab das jetzt so ausprobiert, aber aus irgendeinem Grund findet das Programm dann beim Ablauf nicht die COM-Ports, die wirklich vorhanden sind, sondern es fängt erst bei COM3 an, obwohl COM1 vorhanden ist und es listet auch solche COM-Ports auf, die gar nicht da sind (geht z.B. bis COM9)

Jetzt bin ich baff...und gespannt, ob hier jemand eine Idee hat.

Gruss - Doris