Seite 1 von 2
Frage zu Pointern/Macros
Verfasst: 25.04.2009 12:49
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"
Verfasst: 25.04.2009 12:54
von RSBasic
Code: Alles auswählen
MyListIconID = ListIconGadget(#PB_Any, 0, 0, 100, 100, "Nix", 50)
MyTextVar.s=Str(MyListIconID)
Verfasst: 25.04.2009 12:54
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)
Verfasst: 25.04.2009 13:11
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.....
Verfasst: 25.04.2009 13:14
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).

Verfasst: 26.04.2009 04:00
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

Verfasst: 26.04.2009 11:42
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).

ä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....
Verfasst: 26.04.2009 12:15
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()
Verfasst: 26.04.2009 13:55
von mk-soft
@edel
schöner Stil, darf ich doch übernehmen

Verfasst: 26.04.2009 14:54
von edel
geschenkt
