Hallo Christian,
> Die Frage müsste also lauten: Können ein
> Document-Window und ein Floating-Window gleichzeitig ativated sein? Hier
> könnte ein bug versteckt sein.
Es können beide aktiv sein, aber nur eines sollte den Fokus haben.
>> noch nicht gesehen. Andererseits kannst Du das ja auch einfach umschiffen,
>> indem Du in Deinem Resized-Event prüfst, ob sich die Fenstergröße
>> tatsächlich geändert hat:
>>
>> if (gOldWidth <> w.width OR gOldHeight <> w.height)
>> AdjustWindowContents...
>> end if
>
> Ich hatte so etwas auch schon ausprobiert, allerdings würde ich noch härter
> 'ran gehen.
> Ich setze eine globale Variable 'stAktivesFenster' as String,
> in den activate-Eventhandler jedes Fensters schreibe ich:
> stAktivesFenster = "meinFensterName",
> im resized-Eventhandler jedes Fensters klammere ich den Code mit:
> if stAktivesFenster = "meinFensterName" then
> ...
> end if
Das halte ich für eine *sehr* schlechte Idee. Wenn Du das schon so machen
willst, dann nimm dir wenigstens eine eingeutige Referenz und nicht etwas,
was auch doppelt vorkommen kann. Im Übrigen hast Du für solche sachen ja den
GotFocus/LostFocus-Event. Da wäre es m.E. schlauer sich in einer globalen
Variablen das Fenster zu merken:
Also im GotFocus sowas wie:
MCURRENTACTIVWINDOW = self
> Die Idee dabei war, bestimmte gleichartige Aktionen in den einzelnen
> Fenstern mit einem globalen Code steuern zu können. Wenn jedes Fenster ein
> Control_A hat, dann wäre es praktisch in einem Modul schreiben zu können:
> stAktivesFenster.Control_A.visible =true
> Ganz so einfach geht das natürlich nicht. Man müsste schon schreiben:
> if stAktivesFenster ="Fenster1" then
> Fenster1.control_A.visible =true
> elseif stAktivesFenster ="Fenster2" then
> ...
>
> Es ist vielleicht naiv von mir, aber ist es möglich, die Variable
> stAktivesFenster nicht als String, sondern als Reverenz auf auf das Fenster
> zu deklarieren, der globalen Routine diese Reverenz als Parameter zu
> übergeben und so mit nur einer Code-Zeile auszukommen?:
> ReverenzDesFensters.Control_A.visible =true
Da arbeitest Du normalerweise mit einem Zwischenlayer. Z.B. könntest Du eine
Listener-Klasse machen, an der sich die Objekte/Controls anmelden können.
Bei einem anstehenden Update sagst Du nur der ListenerClass, dass etwas
aktualisiert werden muß und der Rest geschieht automatisch. Ungefähr so:
Klasse: ListenerManagerClass
property myListeners(-1) as CListener
Dann fügst du eine Methode hinzu mit der Du die Listeners an das Array
anhängst:
sub AddListener( thisListener )
myListeners.append( thisListener)
end
Und eine Funktion, die die angehängten Listeners aktualisiert:
sub UpdateListeners ( theTypeOfListener )
if theTypeOfListener isa CListener then
do whatever is required
end if
oder aber (falls die CListener eine Namens-Property (oder so) haben )_
if theTypeOfListener.name = "MeineControl" then
...
end if
end
und so weiter. Dann kannst Du später alles mit einer Zeile machen:
gListenerManagerClass.update
Grüße
andy