Sichtbarkeit von globalen variabeln und deren Änderbarkeit?
Posted: 28 Aug 2021, 15:16
Hallo, ich bin mittlerweile am verzweifeln.
ich habe ein, für meine verhältnisse, recht umfangreiches Skript zusammengebastelt.
Darin enthalten ist ein Colorcheck, den ich über eine Methode realisiere die ich mir aus einem Forum geklaut hatte.
Noormalerweise wird die Funktion aufgerufen, erhält eine fenster id, sowie x und y koordinate und sollte eine Farbe in der Form 0x123456 oder so zurückgeben.
Mit der ehraltenen Farbe wird dann weitergearbeitet.
Durch Nutzung von msgboxes überall weiß ich dass die Funktion offenbar nix zurückgibt da die Variable, in der ich das ergebnis des Funktionsaufrufs speichere, offenbar leer ist.
Nach langem Testen fiele mir nur eine Idee ein:
Dass die window id und die x und y werte erst gar nicht richtig übergeben werden.
Weil der Aufbau meines Skriptes ist so:
Ich habe ein paar "globale Variabeln", die einfach so im Skript stehen.
Also bspw.
windowid:="0"
Weiterim Skript wird dann eine Funktion aufgerufen, die womöglich selbst wieder eine andere Funktion ändert und in der Funktion wird dann was gerechnet und getan und dann mit dem Befehl windowid:=waserrechnetwurde
der globalen variable ein neuer Wert zugewiesen werden.
Ich würde nun vermuten dass diese, aus einer vershcachtelten Methode heraus, Übershcreiben einer globalen methoden weiß der geier warum gar nicht funktioniert bzw. schlicht nicht gemacht wird.
dementsprechend hat windowid durchgängig den eingangs zugewiesenen Wert 0, weshalb es natürlich später zu problemen kommt weil 0 keine zulässige window id ist (war nur so ein Beispiel gerade).
Falls das das Problem ist, würde das auch andere Probleme später erklären.
Die Frage wäre dann nur, ist das richtig so dass ich nicht inenrhalb von aufgerufenen Methoden globale Variabeln ändern kann?
(Kann man es mit etwas trickserei vielelicht doch)
Und wie könnte ich das ansosnten bewerkstelligen?
Weil eigentlich will ich, ie in anderen Sprachen auch, die variable mal eingangs mit initialisieren und mit einem Standardwert belegen,
Und später, egal in welcher Untermethode oder wo es mir passt, nahc Belieben ändern und überschreiben können.
Gibts da was was man tun kann? so wie man bspw. in java mit abstrakten Variabeln und Co. manches tricksen kann?
Innerhalb einer aufgerufenen methode, sind da diese globalen methoden überhaupt sichtbar?
Oder meint das Skript, wenn ich in der Methode einen befehl wie windowid:="7" ausführe, dass hier eine brandneue variable mit diesem wert erstellt wird (weil er eben die ausserhalb der methode befindliche BVariable nicht kennt, die er eigentlich übershcrieben soll?
ich habe ein, für meine verhältnisse, recht umfangreiches Skript zusammengebastelt.
Darin enthalten ist ein Colorcheck, den ich über eine Methode realisiere die ich mir aus einem Forum geklaut hatte.
Noormalerweise wird die Funktion aufgerufen, erhält eine fenster id, sowie x und y koordinate und sollte eine Farbe in der Form 0x123456 oder so zurückgeben.
Mit der ehraltenen Farbe wird dann weitergearbeitet.
Durch Nutzung von msgboxes überall weiß ich dass die Funktion offenbar nix zurückgibt da die Variable, in der ich das ergebnis des Funktionsaufrufs speichere, offenbar leer ist.
Nach langem Testen fiele mir nur eine Idee ein:
Dass die window id und die x und y werte erst gar nicht richtig übergeben werden.
Weil der Aufbau meines Skriptes ist so:
Ich habe ein paar "globale Variabeln", die einfach so im Skript stehen.
Also bspw.
windowid:="0"
Weiterim Skript wird dann eine Funktion aufgerufen, die womöglich selbst wieder eine andere Funktion ändert und in der Funktion wird dann was gerechnet und getan und dann mit dem Befehl windowid:=waserrechnetwurde
der globalen variable ein neuer Wert zugewiesen werden.
Ich würde nun vermuten dass diese, aus einer vershcachtelten Methode heraus, Übershcreiben einer globalen methoden weiß der geier warum gar nicht funktioniert bzw. schlicht nicht gemacht wird.
dementsprechend hat windowid durchgängig den eingangs zugewiesenen Wert 0, weshalb es natürlich später zu problemen kommt weil 0 keine zulässige window id ist (war nur so ein Beispiel gerade).
Falls das das Problem ist, würde das auch andere Probleme später erklären.
Die Frage wäre dann nur, ist das richtig so dass ich nicht inenrhalb von aufgerufenen Methoden globale Variabeln ändern kann?
(Kann man es mit etwas trickserei vielelicht doch)
Und wie könnte ich das ansosnten bewerkstelligen?
Weil eigentlich will ich, ie in anderen Sprachen auch, die variable mal eingangs mit initialisieren und mit einem Standardwert belegen,
Und später, egal in welcher Untermethode oder wo es mir passt, nahc Belieben ändern und überschreiben können.
Gibts da was was man tun kann? so wie man bspw. in java mit abstrakten Variabeln und Co. manches tricksen kann?
Innerhalb einer aufgerufenen methode, sind da diese globalen methoden überhaupt sichtbar?
Oder meint das Skript, wenn ich in der Methode einen befehl wie windowid:="7" ausführe, dass hier eine brandneue variable mit diesem wert erstellt wird (weil er eben die ausserhalb der methode befindliche BVariable nicht kennt, die er eigentlich übershcrieben soll?