Zurück   Flashforum > Flash > Flash erweitern > Komponenten und SmartClips

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-08-2008, 10:45   #1 (permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.354
Question Kann FocusManager nur mit UIComponent?

Hallo zusammen,

ich arbeite gerade an einer Komponente, die der InputTextField Komponente nicht ganz unähnlich wird aber aus der MovieClip Klasse extended werden soll, damit ich die Klasse mit einem Bibliothekssymbol verknüpfen kann.
Damit ich die Komponente ordentlich in die Fokusschleife einbinden kann, habe ich die IFocusManagerComponent Schnittstelle implementiert:

Code:
package de.framework.controls{
	
	import flash.display.MovieClip;
	import flash.text.TextField;
	import fl.managers.IFocusManagerComponent;
	
	public class InputField extends MovieClip implements IFocusManagerComponent {
		
		public static const STATUS_NORMAL :String = 'inputfield_status_normal';
		public static const STATUS_DISABLED :String = 'inputfield_status_disabled';
		public static const STATUS_SELECTED :String = 'inputfield_status_selected';
		public static const STATUS_ERROR :String = 'inputfield_status_error';
		
		private var _status :String = STATUS_NORMAL;
		private var _ifEnabled :Boolean = true;
		private var _textField :TextField;
		private var _focusEnabled :Boolean
		public function InputField() {
		}
		
		// IMPLEMENTATION INTERFACE IFocusManagerComponent
		public function get mouseFocusEnabled() :Boolean { return (_textField.mouseEnabled && _ifEnabled); }
		public function get focusEnabled() :Boolean { return _focusEnabled; }
		public function set focusEnabled( newValue:Boolean ) :void {
			_focusEnabled = (newValue==true);
		}
		
		public function drawFocus( focused:Boolean ) :void {
			if ( _focusEnabled && _ifEnabled ) {
				_status = STATUS_SELECTED;
			}
		}
		
		public function setFocus() :void {//only on tab focus
			if ( _focusEnabled && _ifEnabled ) {
				_textField.stage.focus = _textField;
				_textField.setSelection(_textField.length, _textField.length);
			}
		}
		// IMPLEMENTATION INTERFACE IFocusManagerComponent
}
... wenn ich allerdings versuche, inputFieldInstanz.focusEnabled einen Wert zuzuweisen, bekomme ich einen Runtime Error vom FocusManager:

Code:
TypeError: Error #1034: Typumwandlung fehlgeschlagen: de.framework.controls::InputField@3404041 kann nicht in fl.core.UIComponent umgewandelt werden.
	at fl.managers::FocusManager/getTopLevelFocusTarget()
	at fl.managers::FocusManager/mouseDownHandler()
ich dachte immer, der FocusManager wurde nur InteractiveObjects mit IFocusManagerComponent Implementierung erwarten, intern scheint da aber doch eine UIComponent vorausgesetzt zu werden.
Muss ich jetzt die alle UIComponent Eigenschaften einbauen oder sogar aus UIComponent extenden?
Dann kann ich das nämlich vergessen und muss mir einen eigenen FocusManager schreiben.

Oder passiert mir da irgendwo ein ganz anderer Denkfehler?

Geändert von T.Decay (13-08-2008 um 10:49 Uhr)
T.Decay ist offline   Mit Zitat antworten
Alt 13-08-2008, 17:47   #2 (permalink)
Klugscheisser
 
Registriert seit: Jun 2001
Ort: Düsseldorf
Beiträge: 1.354
die Function in fl.managers.FocusManager, die den Error verursacht, sieht so aus:
Code:
private function getTopLevelFocusTarget(o:InteractiveObject):InteractiveObject {
	while (o != InteractiveObject(form)) {
		if (o is IFocusManagerComponent &&
			IFocusManagerComponent(o).focusEnabled &&
			IFocusManagerComponent(o).mouseFocusEnabled &&
			UIComponent(o).enabled) {
			return o;
		}
		o = o.parent;
		if (o == null) {
			break;
		}
	}
	return null;
}
Gibt es irgendeine Möglichkeit, dem UIComponent Cast vorzugaukeln, meine MovieClip Extension sei eine UIComponent?
Sonst eine Idee dazu?
T.Decay ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele