Frage zu Pointern/Macros

Anfängerfragen zum Programmieren mit PureBasic.
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Frage zu Pointern/Macros

Beitrag von PurePi »

Ich glaube ich sehe den Wald vor lauter Bäumen nicht...
Daher mal folgende Frage:
Wie kann ich über die StringVariable MyTextVar einenen gültigen Handle auf das Gadget MyListIconID erhalten ? (s. Code)
Thanks for help

Code: Alles auswählen

MyListIconID = ListIconGadget(#PB_Any, 0, 0, 100, 100, "Nix", 50")
MyTextVar.s="MyListIconID"
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

Code: Alles auswählen

MyListIconID = ListIconGadget(#PB_Any, 0, 0, 100, 100, "Nix", 50)
MyTextVar.s=Str(MyListIconID)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

keine ahnung was du willst aber für das OS-Handle gibs:

Code: Alles auswählen

MyListIconID = ListIconGadget(#PB_Any, 0, 0, 100, 100, "Nix", 50") 
Handle = GadgetID(MyListIconID )
Wenn du die Gadget-Nummer als String haben willst:

Code: Alles auswählen

MyListIconID = ListIconGadget(#PB_Any, 0, 0, 100, 100, "Nix", 50") 
MyTextVar.s=Str(MyListIconID)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich würde auch zu Stagates erstem Code raten.
wieso und wofür du auf eine Stringvariable kommst erschließt sich mir in keinster Weise.....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PurePi
Beiträge: 41
Registriert: 08.02.2007 08:18

Beitrag von PurePi »

besten Dank für die Anworten.
Nachfolgend noch ein paar Erklärungen zu meiner etwas seltsamen Frage:
"Handle" war der falsche Begriff (brauche keinen OS Zugriff).
Der u.a. Code ist nur ein Beispiel zum eigentlichen Problem:
Ich erzeuge mit meiner Anwendung recht viele Gadgets dynamisch.
In einer DB habe ich die Namen der Gadgets hinterlegt.
Es gilt Name des Gadgets in der DB=VariablenName im Programm (s. Code)
D.h. das Programm kennt die Gadgets nur "textlich", damit habe ich aber noch Keinen Zugriff auf die Gadgets (z.B GetGadgetText(#Gadget).
:cry:
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Vieleicht so etwas?

Code: Alles auswählen


; Strukturen
Structure udtGadget
  id.i
  name.s
EndStructure

; Declare
Declare.s NameOfGadgetType(gadget)

; Variablen
Dim gadgets.udtGadget(100)
Global event

If OpenWindow(0, 20,20, 640, 480, "Test")

  gadgets(0)\name = "Drücke mich"
  gadgets(0)\id = ButtonGadget(#PB_Any, 20,20,120,25, "Ok")
  
  With gadgets(0)
    Debug \name + " = ID: " + Str(\id) + " von Type " + NameOfGadgetType(\id)
  EndWith
  Repeat
    event = WaitWindowEvent()
    
  Until event = #PB_Event_CloseWindow
  
EndIf

; *****************************************************************************

Procedure.s NameOfGadgetType(gadget)

  Protected type, name.s
  
  type = GadgetType(gadget)
  Select type
    Case #PB_GadgetType_Button        : name = "ButtonGadget"
    Case #PB_GadgetType_ButtonImage   : name = "ButtonImageGadget" 
    Case #PB_GadgetType_Calendar      : name = "CalendarGadget" 
    Case #PB_GadgetType_CheckBox      : name = "CheckBoxGadget" 
    Case #PB_GadgetType_ComboBox      : name = "ComboBoxGadget" 
    Case #PB_GadgetType_Container     : name = "ContainerGadget" 
    Case #PB_GadgetType_Date          : name = "DateGadget" 
    Case #PB_GadgetType_Editor        : name = "EditorGadget" 
    Case #PB_GadgetType_ExplorerCombo : name = "ExplorerComboGadget" 
    Case #PB_GadgetType_ExplorerList  : name = "ExplorerListGadget" 
    Case #PB_GadgetType_ExplorerTree  : name = "ExplorerTreeGadget" 
    Case #PB_GadgetType_Frame3D       : name = "Frame3DGadget" 
    Case #PB_GadgetType_HyperLink     : name = "HyperLinkGadget" 
    Case #PB_GadgetType_Image         : name = "ImageGadget" 
    Case #PB_GadgetType_IPAddress     : name = "IPAddressGadget" 
    Case #PB_GadgetType_ListIcon      : name = "ListIconGadget" 
    Case #PB_GadgetType_ListView      : name = "ListViewGadget" 
    Case #PB_GadgetType_MDI           : name = "MDIGadget" 
    Case #PB_GadgetType_Option        : name = "OptionGadget" 
    Case #PB_GadgetType_Panel         : name = "PanelGadget" 
    Case #PB_GadgetType_ProgressBar   : name = "ProgressBarGadget" 
    Case #PB_GadgetType_Scintilla     : name = "ScintillaGadget"
    Case #PB_GadgetType_ScrollArea    : name = "ScrollAreaGadget" 
    Case #PB_GadgetType_ScrollBar     : name = "ScrollBarGadget" 
    Case #PB_GadgetType_Spin          : name = "SpinGadget" 
    Case #PB_GadgetType_Splitter      : name = "SplitterGadget" 
    Case #PB_GadgetType_String        : name = "StringGadget" 
    Case #PB_GadgetType_Text          : name = "TextGadget" 
    Case #PB_GadgetType_TrackBar      : name = "TrackBarGadget" 
    Case #PB_GadgetType_Tree          : name = "TreeGadget" 
    Case #PB_GadgetType_Web           : name = "WebGadget" 
    Case #PB_GadgetType_Unknown       : name = "Unknown"
  EndSelect
  
  ProcedureReturn name
  
EndProcedure

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

PurePi hat geschrieben:Ich erzeuge mit meiner Anwendung recht viele Gadgets dynamisch.
In einer DB habe ich die Namen der Gadgets hinterlegt.
Es gilt Name des Gadgets in der DB=VariablenName im Programm (s. Code)
D.h. das Programm kennt die Gadgets nur "textlich", damit habe ich aber noch Keinen Zugriff auf die Gadgets (z.B GetGadgetText(#Gadget).
:cry:
ähm... ja... die herangehensweise ist zumindest ungewöhnlich.

also, der Name einer Variablen existiert im fertigen Programm garnicht mehr, nur in deinem Code.

Gadgets haben lediglich Nummern, wie alle Objekte.
(dynamisch erzeugte haben IDs, das sind nicht exakt Nummern aber grundsätzlich auch Nummern.)

Du kannst also genaugenommen ein Gadget nur dann zur Laufzeit mit einem Namen identifizieren,
wenn du in deiner DB eine eineindeutige Zuordnung dieser Namen zu Nummern vornimmst.


Was mich natürlich zu der Frage bringt, warum du Gadgets über Namen identifizieren willst....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ich bezweifel zwar das ich das richtig verstanden habe, aber versuch es mal so :

Code: Alles auswählen

Macro dq
"
EndMacro 

Macro AddGadgetToDB(gadget)
    Debug dq#gadget#dq 
    Debug gadget
    Debug "-------"
EndMacro 

Procedure main()
  Protected window
  Protected event  
 
  window = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,640,480,"Test",#WS_OVERLAPPEDWINDOW)
  
  If window
    
    
    button0 = ButtonGadget(0,0,0,100,100,"bla") : AddGadgetToDB(button0)
    button1 = ButtonGadget(0,0,0,100,100,"bla") : AddGadgetToDB(button1)        
    
    Repeat
      event = WaitWindowEvent()
        
      If event = #PB_Event_CloseWindow
        Break
      EndIf       
    ForEver 
    
    End
    
  EndIf 
  
  
EndProcedure:main()
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@edel

Code: Alles auswählen

Procedure main()

EndProcedure:main()
schöner Stil, darf ich doch übernehmen <)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

geschenkt :D
Antworten