Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Flex]Al Click eseguire la funzione una sola volta

    Buongiorno,

    da dichiarato niubbo chiedo consiglio su un qualcosa che potrà apparir banale, ma per la quale mi sto scervellando da un paio di giorni, senza risultato.

    Sto creando una applicazione di prova che mi consenta di disegnare una linea su di un Panel, inserendo le coordinate del secondo punto. Il problema è che ogni volta che viene richiamata la funzione di disegno ( il click su un pulsante ) viene disegnata un altra linea, più in basso della precedente.

    Vorrei invece che una volta premuto il bottone, non sia più possibile disegnare rette.

    questo il codice:
    Codice PHP:
    <mx:Script>
        <![
    CDATA[
            
    import flash.display.Sprite;
            
    import mx.core.UIComponent;
            private function 
    disegna(x:int,y:int):void {
                var 
    retta:Sprite = new Sprite();
                
    retta.graphics.lineStyle(10x000000100);
                
    retta.graphics.moveTo(0,210);
                
    retta.graphics.lineTo(x,y);

                var 
    c:UIComponent = new UIComponent();
                
    c.addChild(retta);
                
    pannello.addChild(c);
            }
        ]]>
    </
    mx:Script>

        <
    mx:Panel id="pannello" height="250" width="300" verticalScrollPolicy="off"/>

        <
    mx:Button id="myButton" label="Cliccami" click="disegna(10,60);"/> 
    per il momento è tutto, sicuramente mi toccherà richiedere nel momento in cui passerò alla fase 2 del progetto

  2. #2
    primo passo risolto con un semplice if...

    Codice PHP:
    <mx:Script>
        <![
    CDATA[
            
    import flash.display.Sprite;
            
    import mx.core.UIComponent;
            public var 
    a:int 1;
            private function 
    disegna(x:int,y:int):void {
                if (
    == 1){
                var 
    retta:Sprite = new Sprite();
                
    retta.graphics.lineStyle(10x000000100);
                
    retta.graphics.moveTo(0,210);
                
    retta.graphics.lineTo(x,y);

                var 
    c:UIComponent = new UIComponent();
                
    c.addChild(retta);
                
    pannello.addChild(c);
                }
            }
        ]]>
        </
    mx:Script>

        <
    mx:Panel id="pannello" height="250" width="300" verticalScrollPolicy="off"/>

        <
    mx:Button id="myButton" label="Cliccami" click="disegna(10,60);a = 2;"/> 

  3. #3
    bene, procedo ancora.

    ora mi si pone un altro problema, do i valori di coordinata x e y ( peraltro al contrario in quanto vengono contati dall'angolo in alto a sinistra del panel ) e creo la linea, tutto bene.

    ah, ho fatto della linea un oggetto, anche se non sono sicuro di aver fatto tutto a dovere, ecco la classe:
    Codice PHP:
    package prova
    {
        
    import flash.display.Sprite;
        
    import mx.core.UIComponent;
        public class 
    linea
        
    {
            public function 
    disegna(x:Number,y:Number):void
            
    {
                var 
    linea:Sprite = new Sprite();
                
    linea.graphics.lineStyle(20x000000100);
                
    linea.graphics.moveTo(1,360);
                
    linea.graphics.lineTo(x,y);
                
                var 
    c:UIComponent = new UIComponent();
                
    c.addChild(linea);
                
    pannello.addChild(c);
            }
        }

    per creare la linea istanzio un oggetto linea(). Per eliminarla avevo pensato ad un delete, ma succede una cosa strana. una volta eliminata la linea se ne vado a fare un altra, vengono visualizzate due linee: la precedente e la attuale.

    questo il codice:
    Codice PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" horizontalAlign="center">
        <mx:Script>
            <![CDATA[
            import prova.linea;
            function crealinea():void
            {
                    var nuova:linea = new linea();
                    nuova.disegna(valorex.value, valorey.value);
            }
            function distruggilinea():void
            {
                    delete nuova;
            }
            ]]>
        </mx:Script>
        
        <mx:VBox width="10%" height="100%">
        
            <mx:Label text="Coordinata x:"/>
            <mx:NumericStepper id="valorex" width="100%" maximum="300"/>
            <mx:Label text="Coordinata y:"/>
            <mx:NumericStepper id="valorey" width="100%" maximum="300"/>
            <mx:HBox width="100%">
            
                <mx:Button id="crea" label="Disegna" width="50%" click="crealinea();"/>
                <mx:Button id="elimina" width="50%"  label="Elimina" click="distruggilinea();"/>
            
            </mx:HBox>
            
        </mx:VBox>
        
        <mx:VBox width="80%" height="100%">
        
        <mx:Panel id="pannello" title="Disegna retta" height="400" width="500" verticalScrollPolicy="off" horizontalAlign="left"/>
        
        </mx:VBox>
        
    </mx:Application>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.