PDA

Просмотр полной версии : Помогите дописать компонент...


eXplozive
24.10.2006, 20:08
Вот написал я сегодня такой компонент


<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" initialize="initApp()">
<mx:states>
<mx:State name="open">
<mx:RemoveChild target="{icn}"/>
<mx:AddChild position="lastChild">
<mx:TitleWindow width="420" height="250" layout="absolute" id="win" title="Feedback" showCloseButton="true">
<mx:Label text="Кому:" x="10" y="10"/>
<mx:Label text="Тема:" x="10" y="36"/>
<mx:TextInput y="8" text="Кто-то там" enabled="false" textAlign="left" left="55" right="10"/>
<mx:TextInput left="55" right="10" height="22" y="34" textAlign="left" id="subject"/>
<mx:TextArea bottom="40" left="55" right="10" top="64" textAlign="left" id="content"/>
<mx:LinkButton label="Отправить" click="send_status()" right="10" bottom="10" themeColor="#c0c0c0"/>
</mx:TitleWindow>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Script>
<![CDATA[
import flash.events.*;
import mx.controls.Alert;

private function alrt(txt:String):void{
Alert.show(txt);
}


public function initApp():void {
this.doubleClickEnabled = true;
this.icn.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
this.icn.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
this.icn.addEventListener(MouseEvent.DOUBLE_CLICK, double);

}

public function start_drag(e:Event):void {
this.icn.startDrag();
}
public function stop_drag(e:Event):void {
this.icn.stopDrag();
}
public function win_start_drag(e:Event):void {
this.win.startDrag();
}
public function win_stop_drag(e:Event):void {
this.win.stopDrag();
}



public function double(e:Event):void {
zoomIn.play([icn], false);
}

public function double_win(e:Event):void {
zoomIn_win.play([win], false);
}

public function perehod():void{
currentState = "open";
this.win.x = this.mouseX-win.width/2;
this.win.y = this.mouseY-win.height/2;
zoomOut.play([win], false);
this.win.addEventListener(MouseEvent.MOUSE_DOWN, win_start_drag);
this.win.addEventListener(MouseEvent.MOUSE_UP, win_stop_drag);
this.win.addEventListener(MouseEvent.DOUBLE_CLICK, double_win);
}
public function perehod2():void{
currentState = "";
this.icn.x = this.mouseX-icn.width/2;
this.icn.y = this.mouseY-icn.height/2;
zoomOut.play([icn], false);
}

private function send_status():void {
if(subject.text == ""){
alrt('Введите тему сообщения');
}else{
if(content.text == ""){
alrt("Сообщение не должно быть пустым");
}else{
if(subject.text != "" && content.text != ""){
send_feedback.send();
subject.text = "";
content.text = "";
}
}

}

}
]]>
</mx:Script>
<mx:HTTPService result="alrt('Письмо отправлено');" id="send_feedback" url="http://www.fla.aa/adm_actions/send_feedback.php" useProxy="false" method="POST">
<mx:request xmlns="">
<subject>{subject.text}</subject>
<content>{content.text}</content>
</mx:request>
</mx:HTTPService>

<mx:Zoom zoomHeightTo=".0" zoomWidthTo=".0" zoomHeightFrom="1" zoomWidthFrom="1" id="zoomIn" effectEnd="perehod()" duration="200" />
<mx:Zoom zoomHeightTo="1" zoomWidthTo="1" zoomHeightFrom=".0" zoomWidthFrom=".0" id="zoomOut" duration="300" />
<mx:Zoom zoomHeightTo=".0" zoomWidthTo=".0" zoomHeightFrom="1" zoomWidthFrom="1" id="zoomIn_win" effectEnd="perehod2()" duration="200" />

<mx:Image x="151" y="117" source="images/icn_feedback.png" id="icn"/>

</mx:Canvas>




просто делайте даблклик по иконке и окну для перехода между ними... но после второго разворачивания окна все слова в компоненте уменьшаются до первой буквы и "..." после нее... вобщем попробуйте скомпилировать у себя и сами увидите ... теперь собственно вопрос... в чем причина ?

eXplozive
24.10.2006, 20:09
Я прошу прощения ... помоему это нужно было напиать в форум по АС3

etc
24.10.2006, 20:18
Исходник нужно выкладывать, вместе с картинками.

eXplozive
24.10.2006, 20:26
ок ... сейчас выложу

eXplozive
24.10.2006, 20:28
Вот...

etc
24.10.2006, 20:41
Для начала неплохо было бы устранить ошибки в нём.
TypeError: Error #1010: A term is undefined and has no properties.
at mx.styles::StyleManager$/http://www.adobe.com/2006/flex/mx/internal::initProtoChainRoots()[C:\dev\GMC\sdk\frameworks\mx\styles\StyleManager.as:231]
at New_feedback/http://www.adobe.com/2006/flex/mx/internal::_New_feedback_StylesInit()[C:\FlexProjects\New_feedback\New_feedback.mxml:0]
at New_feedback$iinit()[C:\FlexProjects\New_feedback\New_feedback.mxml:0]

eXplozive
25.10.2006, 16:42
Вот выложил полностью ... просто скомпилируйте tab_test.mxml

eXplozive
25.10.2006, 16:55
отпишите если не получится запустить

etc
25.10.2006, 17:10
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" initialize="initApp()">
<mx:states>
<mx:State name="open">
<mx:RemoveChild target="{icn}"/>
<mx:AddChild position="lastChild">
<mx:TitleWindow width="420" height="250" layout="absolute" id="win" title="Feedback" showCloseButton="true">
<mx:Label text="Кому:" x="10" y="10" width="100" id="toLabel"/>
<mx:Label text="Тема:" x="10" y="36" id="topicLabel"/>
<mx:TextInput y="8" text="Кто-то там" enabled="false" textAlign="left" left="55" right="10"/>
<mx:TextInput left="55" right="10" height="22" y="34" textAlign="left" id="subject"/>
<mx:TextArea bottom="40" left="55" right="10" top="64" textAlign="left" id="content"/>
<mx:LinkButton label="Отправить" click="send_status()" right="10" bottom="10" themeColor="#c0c0c0" id="sendButton"/>
</mx:TitleWindow>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Script>
<![CDATA[
import flash.events.*;
import mx.controls.Alert;

private function alrt(txt:String):void{
Alert.show(txt);
}


public function initApp():void {
this.doubleClickEnabled = true;
this.icn.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
this.icn.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
this.icn.addEventListener(MouseEvent.DOUBLE_CLICK, double);

}

public function start_drag(e:Event):void {
this.icn.startDrag();
}
public function stop_drag(e:Event):void {
this.icn.stopDrag();
}
public function win_start_drag(e:Event):void {
this.win.startDrag();
}
public function win_stop_drag(e:Event):void {
this.win.stopDrag();
}



public function double(e:Event):void {
zoomIn.play([icn], false);
}

public function double_win(e:Event):void {
zoomIn_win.play([win], false);
}

public function perehod():void{
currentState = "open";
zoomOut.play([win], false);
this.win.x = this.mouseX-win.width/2;
this.win.y = this.mouseY-win.height/2;
this.win.addEventListener(MouseEvent.MOUSE_DOWN, win_start_drag);
this.win.addEventListener(MouseEvent.MOUSE_UP, win_stop_drag);
this.win.addEventListener(MouseEvent.DOUBLE_CLICK, double_win);
}
public function perehod2():void{
currentState = "";
this.icn.x = this.mouseX-icn.width/2;
this.icn.y = this.mouseY-icn.height/2;
zoomOut.play([icn], false);
}

private function zoomEnd():void {
this.win.scaleX = 1;
this.win.scaleY = 1;
}

private function zoomUpdate():void {
this.win.x = this.mouseX-win.width/2;
this.win.y = this.mouseY-win.height/2;
}

private function send_status():void {
if(subject.text == ""){
alrt('Введите тему сообщения');
}else{
if(content.text == ""){
alrt("Сообщение не должно быть пустым");
}else{
if(subject.text != "" && content.text != ""){
send_feedback.send();
subject.text = "";
content.text = "";
}
}

}

}
]]>
</mx:Script>
<mx:HTTPService result="alrt('Письмо отправлено');" id="send_feedback" url="http://www.fla.aa/adm_actions/send_feedback.php" useProxy="false" method="POST">
<mx:request xmlns="">
<subject>{subject.text}</subject>
<content>{content.text}</content>
</mx:request>
</mx:HTTPService>

<mx:Zoom zoomHeightTo=".0" zoomWidthTo=".0" zoomHeightFrom="1" zoomWidthFrom="1" id="zoomIn" effectEnd="perehod()" duration="200" />
<mx:Zoom zoomHeightTo="1" zoomWidthTo="1" zoomHeightFrom=".0" zoomWidthFrom=".0" id="zoomOut" tweenUpdate="zoomUpdate()" effectEnd="zoomEnd()" duration="300" />
<mx:Zoom zoomHeightTo=".0" zoomWidthTo=".0" zoomHeightFrom="1" zoomWidthFrom="1" id="zoomIn_win" effectEnd="perehod2()" duration="200" />

<mx:Image x="151" y="117" source="images/icn_feedback.png" id="icn"/>

</mx:Canvas>

Это решение, но кривое.
Разберись, какой и когда у тебя должен работать зум. У тебя конфликт зумов.

eXplozive
25.10.2006, 19:56
__etc спасибо ... вот я только что нашел решение ...
если интересно посмотри:


<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" initialize="initApp()">
<mx:states>
<mx:State name="open">
<mx:RemoveChild target="{icn}"/>
<mx:AddChild position="lastChild">
<mx:TitleWindow width="420" height="250" layout="absolute" id="win" title="Feedback" showCloseButton="true">
<mx:Label text="Кому:" x="10" y="10"/>
<mx:Label text="Тема:" x="10" y="36"/>
<mx:TextInput y="8" text="Кто-то там" enabled="false" textAlign="left" left="55" right="10"/>
<mx:TextInput left="55" right="10" height="22" y="34" textAlign="left" id="subject"/>
<mx:TextArea bottom="40" left="55" right="10" top="64" textAlign="left" id="content"/>
<mx:LinkButton label="Отправить" click="send_status()" right="10" bottom="10" themeColor="#c0c0c0"/>
</mx:TitleWindow>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Script>
<![CDATA[
import flash.events.*;
import mx.controls.Alert;

private function alrt(txt:String):void{
Alert.show(txt);
}


public function initApp():void {
this.doubleClickEnabled = true;
this.icn.addEventListener(MouseEvent.MOUSE_DOWN, start_drag);
this.icn.addEventListener(MouseEvent.MOUSE_UP, stop_drag);
this.icn.addEventListener(MouseEvent.DOUBLE_CLICK, double);

}

public function start_drag(e:Event):void {
this.icn.startDrag();
}
public function stop_drag(e:Event):void {
this.icn.stopDrag();
}
public function win_start_drag(e:Event):void {
this.win.startDrag();
}
public function win_stop_drag(e:Event):void {
this.win.stopDrag();
}



public function double(e:Event):void {
zoomIn.play([icn], false);
}

public function double_win(e:Event):void {
zoomIn_win.play([win], false);
}

public function perehod():void{
currentState = "open";
this.win.x = this.mouseX-win.width/2;
this.win.y = this.mouseY-win.height/2;
zoomOut.play([win], false);
this.win.addEventListener(MouseEvent.MOUSE_DOWN, win_start_drag);
this.win.addEventListener(MouseEvent.MOUSE_UP, win_stop_drag);
this.win.addEventListener(MouseEvent.DOUBLE_CLICK, double_win);
}
public function perehod2():void{
currentState = "";
this.icn.x = this.mouseX-icn.width/2;
this.icn.y = this.mouseY-icn.height/2;
zoomOut.play([icn], false);
}

private function send_status():void {
if(subject.text == ""){
alrt('Введите тему сообщения');
}else{
if(content.text == ""){
alrt("Сообщение не должно быть пустым");
}else{
if(subject.text != "" && content.text != ""){
send_feedback.send();
subject.text = "";
content.text = "";
}
}

}

}
]]>
</mx:Script>
<mx:HTTPService result="alrt('Письмо отправлено');" id="send_feedback" url="http://www.fla.aa/adm_actions/send_feedback.php" useProxy="false" method="POST">
<mx:request xmlns="">
<subject>{subject.text}</subject>
<content>{content.text}</content>
</mx:request>
</mx:HTTPService>

<mx:Zoom zoomHeightTo=".0" zoomWidthTo=".0" zoomHeightFrom="1" zoomWidthFrom="1" id="zoomIn" effectEnd="perehod()" duration="200" />
<mx:Zoom zoomHeightTo="1" zoomWidthTo="1" zoomHeightFrom=".0" zoomWidthFrom=".0" id="zoomOut" duration="300" />
<mx:Zoom zoomHeightTo=".0" zoomWidthTo=".0" zoomHeightFrom="1" zoomWidthFrom="1" id="zoomIn_win" effectEnd="perehod2()" duration="200" />

<mx:Image x="151" y="117" source="images/icn_feedback.png" id="icn"/>

</mx:Canvas>

eXplozive
25.10.2006, 20:01
только вот теперь проблемка... если хочу выделить текст в любом поле то окно тянется ... как мне сделать так чтобы стартдраг не применялся на текстовых полях ?

etc
25.10.2006, 20:05
__etc спасибо ... вот я только что нашел решение ...

Не работает ваше решение.

etc
25.10.2006, 20:25
только вот теперь проблемка... если хочу выделить текст в любом поле то окно тянется ... как мне сделать так чтобы стартдраг не применялся на текстовых полях ?
<mx:TextInput left="55" right="10" height="22" y="34" textAlign="left" id="subject" focusIn="this.focusHandler(event)" focusOut="this.blurHandler(event)"/>
<mx:TextArea bottom="40" left="55" right="10" top="64" textAlign="left" id="content" focusIn="this.focusHandler(event)" focusOut="this.blurHandler(event)"/>


private function focusHandler(e:FocusEvent):void {
this.doubleClickEnabled = false;
}

private function blurHandler(e:FocusEvent):void {
this.doubleClickEnabled = true;
}

Дальше разбирайтесь сами, я не могу всю дорогу дописывать за вас ваш компонент.

eXplozive
25.10.2006, 20:57
Огромное спасибо