Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-09-2008, 23:06   #1 (permalink)
Flash addicted
 
Benutzerbild von pejot
 
Registriert seit: Apr 2004
Ort: Luxembourg-Trier-Berlin
Beiträge: 486
[Stuff] Pimp my TextArea-Component

Der Pejot war länger nicht mehr hier also kann er nicht mit leeren Händen hier angekrochen kommen.

Ich habe mir mal die TextArea-Komponente vorgeknüpft und sie mit einem Resizing, Drag and Drop und der Option, eigene Schaltflächen als Templates einzubinden, versehen.


Konstruktive Kritik ausdrücklich erwünscht; da es sicherlich nicht perfekt ist. Stehe noch am Anfang in Sachen AS3.


Die Klasse TextfieldResizer.as

PHP-Code:
package de.pejot.backend.tools.core{

    
import flash.display.*;

    
import flash.events.MouseEvent;
    
import flash.events.Event;

    
import flash.utils.Timer;
    
import flash.net.URLRequest;

    
import fl.controls.ScrollPolicy;
    
import fl.controls.TextArea;

    
//
    
public class TextfieldResizer extends MovieClip {

        private var 
TRheight:Number;
        private var 
TRwidth:Number;
        private var 
TRposX:Number;
        private var 
TRposY:Number;
        private var 
TRscrollH:String;
        private var 
TRscrollV:String;
        private var 
htmlTextArea:TextArea;
        private var 
_defaultBtn:Sprite;
        private var 
_customBtn:Loader;
        private var 
_customDrag:Loader;
        private var 
_btnContainer:Sprite;
        private var 
_dragContainer:Sprite;
        private var 
_defaultDragBar:Sprite;
        private var 
TRresizer:String;
        private var 
TRgraphicPathBtn:String;
        private var 
TRgraphicPathDrag:String;
        private var 
pWordWrap:Boolean;


        public function 
TextfieldResizer(posX:Number=0,posY:Number=0,width:Number=100,height:Number=100,pWordWrap:Boolean=true,scrollH:String="auto",scrollV:String="auto",resizer:String="default",pathBtn:String="",pathDrag:String="") {
            
TRheight=height;
            
TRwidth=width;
            
TRposX=posX;
            
TRposY=posY 10;
            
TRscrollH=scrollH;
            
TRscrollV=scrollV;
            
TRresizer=resizer;
            
TRgraphicPathBtn=pathBtn;
            
TRgraphicPathDrag=pathDrag;

            
createTextArea();
        }
        
//
        //
        /* Anfang --> Methode zur Erstellung der eigentlichen TextArea */
        
private function createTextArea() {
            
htmlTextArea=new TextArea();
            switch (
TRscrollH) {
                case 
"true" :
                    
htmlTextArea.horizontalScrollPolicy=ScrollPolicy.ON;
                    break;
                case 
"false" :
                    
htmlTextArea.horizontalScrollPolicy=ScrollPolicy.OFF;
                    break;
                case 
"auto" :
                    
htmlTextArea.horizontalScrollPolicy=ScrollPolicy.AUTO;
                    break;
            }
            switch (
TRscrollV) {
                case 
"true" :
                    
htmlTextArea.verticalScrollPolicy=ScrollPolicy.ON;
                    break;
                case 
"false" :
                    
htmlTextArea.verticalScrollPolicy=ScrollPolicy.OFF;
                    break;
                case 
"auto" :
                    
htmlTextArea.verticalScrollPolicy=ScrollPolicy.AUTO;
                    break;
            }
            
htmlTextArea.condenseWhite=true;
            
htmlTextArea.setSize(TRwidth,TRheight);
            
htmlTextArea.x=TRposX;
            
htmlTextArea.y=TRposY;
            
htmlTextArea.wordWrap=pWordWrap;
            
addChild(htmlTextArea);

            
createResizer();
        }
        
        public function 
setText(pText:String){
            
htmlTextArea.htmlText pText;
            
        }
        
/* Ende --> Methode zur Erstellung der eigentlichen TextArea */
        //
        //
        /* Anfang --> Methode zur Bestimmung der Resize-Schaltfläche (Default/Custom) */
        
private function createResizer() {
            
_btnContainer=new Sprite();
            
_dragContainer=new Sprite();
            
addChild(_btnContainer);
            
addChild(_dragContainer);

            switch (
TRresizer) {
                case 
"custom" :
                    
createCustomResizeBtn();
                    break;
                case 
"default" :
                    
createDefaultDragBar();
                    
createDefaultResizeBtn();
                    break;
            }
        }
        
/* Ende --> Methode zur Bestimmung der Resize-Schaltfläche (Default/Custom) */
        //
        //
        /* Anfang --> benutzerdefinierter Button */
        
private function createCustomResizeBtn() {
            
_customBtn=new Loader();
            
_btnContainer.addChild(_customBtn);
            
_customBtn.contentLoaderInfo.addEventListener(Event.INIT,handleResizerHelper);
            
_customBtn.load(new URLRequest(TRgraphicPathBtn));
            
//
            
_customDrag=new Loader();
            
_dragContainer.addChild(_customDrag);
            
_customDrag.contentLoaderInfo.addEventListener(Event.INIT,handleDragerHelper);
            
_customDrag.load(new URLRequest(TRgraphicPathDrag));
        }
        private function 
handleResizerHelper(event:Event) {
            
handleResizer();
        }
        private function 
handleDragerHelper(event:Event) {
            
handleDragBar();
        }
        
/* Ende --> benutzerdefinierter Button */
        //
        //
        /* Anfang --> Default-Button */
        
private function createDefaultResizeBtn() {
            
_defaultBtn=new Sprite();
            
_defaultBtn.graphics.beginFill(0x333333,1);
            
_defaultBtn.graphics.drawRect(0,0,15,15);
            
_defaultBtn.graphics.endFill();
            
_btnContainer.addChild(_defaultBtn);

            
handleResizer();
        }
        
/* Ende --> Default-Button */
        //
        //
        /* Anfang --> Default-DragBar */
        
private function createDefaultDragBar() {
            
_defaultDragBar=new Sprite();
            
_defaultDragBar.graphics.beginFill(0x333333,1);
            
_defaultDragBar.graphics.drawRect(0,0,40,10);
            
_defaultDragBar.graphics.endFill();
            
_dragContainer.addChild(_defaultDragBar);

            
handleDragBar();
        }
        
/* Ende --> Default-DragBar */
        //
        //
        
private function handleDragBar() {
            
_dragContainer.x=htmlTextArea.x;
            
_dragContainer.y=htmlTextArea._dragContainer.height;
            
_dragContainer.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownDragBar);
            
_dragContainer.addEventListener(MouseEvent.MOUSE_UP,mouseReleaseDragBar);
        }
        
//
        //
        
private function mouseDownDragBar(event:MouseEvent):void {
            
this.startDrag();
            
htmlTextArea.setFocus();
        }
        private function 
mouseReleaseDragBar(event:MouseEvent):void {
            
this.stopDrag();
        }
        
//
        //
        /* Anfang --> Definition der Position und des Verhaltens des Resize-Buttons */
        
private function handleResizer() {
            
_btnContainer.x=TRposX TRwidth _btnContainer.width 2;
            
_btnContainer.y=TRposY TRheight _btnContainer.height 2;
            
_btnContainer.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
            
_btnContainer.addEventListener(MouseEvent.MOUSE_UP,mouseReleased);
        }
        
//
        //
        
private function btnMove(event:Event) {
            
htmlTextArea.width=_btnContainer.TRposX _btnContainer.width 2;
            
htmlTextArea.height=_btnContainer.TRposY _btnContainer.height 2;
            if (
_btnContainer.TRposX || _btnContainer.TRposY) {
                
_btnContainer.x=TRposX htmlTextArea.width;
                
_btnContainer.y=TRposY htmlTextArea.height;
                
_btnContainer.stopDrag();
            }
        }
        
//
        //
        
private function mouseDown(event:MouseEvent):void {
            
_btnContainer.startDrag();
            
htmlTextArea.setFocus();

            
this.addEventListener(Event.ENTER_FRAME,btnMove);
        }
        
//
        //
        
private function mouseReleased(event:MouseEvent):void {
            
_btnContainer.stopDrag();
            
_btnContainer.removeEventListener(Event.ENTER_FRAME,btnMove);
        }
        
/* Ende --> Definition der Position und des Verhaltens des Resize-Buttons */
    
}

Der Aufruf

PHP-Code:
TR1 = new TextfieldResizer(0,0100100true"auto""auto""custom""../bin/graphicFiles/resizer.swf""../bin/graphicFiles/drager.swf"); 
… oder einfach die Defaultwerte benutzen

PHP-Code:
TR1 = new TextfieldResizer(); 


Ich weiß, der Konstruktor ist etwas lang.



Aufruf wie im Beispiel

PHP-Code:
import de.pejot.backend.tools.core.TextfieldResizer;

var 
TR1:TextfieldResizer;

this.addField.addEventListener(MouseEvent.MOUSE_DOWNaddFields);
this.addText.addEventListener(MouseEvent.MOUSE_DOWNaddTexts);



function 
addFields(event:MouseEvent):void {
    
TR1 = new TextfieldResizer(0,0100100true"auto""auto""custom""../bin/graphicFiles/resizer.swf""../bin/graphicFiles/drager.swf");

    
addChild(TR1);
}

function 
addTexts(event:MouseEvent):void {
    var 
textfield:String this.insertText.text;
    
TR1.setText(textfield);





###################


Beispiel anschauen

Beispiel herunterladen


Liebe Grüße
PJ
__________________
… wortkarge Signatur
pejot ist offline   Mit Zitat antworten
Alt 03-09-2008, 23:43   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Coole Sache!
Zwei Verbesserungsvorschläge hätte ich:
- die gedraggte Instanz sollte irgendwie in den Vordergrund rücken
- custom-Buttons per Skin / Style konfigurierbar (ich kenn das nur aus Flex, wird aber auch mit Flash gehen, denke ich)
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 04-09-2008, 00:12   #3 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
nice,

was mir generell schon lang fehlt ist strg+z/y zum rückgängig machen und wiederherstellen. warum zum teufel gibts das nur für air?

mfg
sx
shin10 ist offline   Mit Zitat antworten
Alt 04-09-2008, 08:22   #4 (permalink)
Flash addicted
 
Benutzerbild von pejot
 
Registriert seit: Apr 2004
Ort: Luxembourg-Trier-Berlin
Beiträge: 486
Zwei gute Ansätze, um das erste werde ich mich die Tage mal kümmern.

Danke schon mal soweit
__________________
… wortkarge Signatur
pejot ist offline   Mit Zitat antworten
Alt 07-09-2008, 22:07   #5 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.500
hab mal ein wenig daran gefummelt...

wenn euch fehler auffallen mach ich nen neuen thread auf, aber ich denke das müsste soweit schon ganz gut hinhauen.

mfg
sx

Geändert von shin10 (20-08-2009 um 01:30 Uhr)
shin10 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 an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele