• Registrati
Benvenuto su codeinvaders.net la community italiana dedicata agli sviluppatori!
Puoi partecipare alle discussioni anche attraverso facebook, twitter e google+.
JS Day
  • google plus
  • facebook
  • twitter
Codeinvaders.net, domande e risposte per sviluppatori!
Partecipa a questa community rispettando tutti i suoi membri che, per il puro piacere di condividere, forniscono risposte e suggerimenti.
Classifica migliori utenti del mese 05/2017
  1. 4240 Punti

  2. 3980 Punti

  3. 3480 Punti

  4. Luca Rainone

    2400 Punti

I premi del mese
Posizione 1: Buono Amazon da 10 euro
Posizione 2: Sconto 40% su un libro O'Reilly

Applicazione AIR AS3 - Problema con DataGrid annidata e word-wrap

Salve a tutti,
stò sviluppando una applicazione AIR con Adobe Flash CS6 e uso actionscript 3 come linguaggio.
La struttura della applicazione è un filmato principale in cui ho un clip filmato che mi và a caricare le applicazioni. Il mio problema è riuscire ad avere la funzione word-wrap sulle datagrid caricate dentro alla mia clip contenitore, se provo a lanciare le applicazioni singolarmente funzionano, quindi mi manca un passaggio da qualche parte ma non sò dove, nel filmato principale ho semplicemente importato nella libreria un datagrid e la funzione che mi permette di fare il word-wrap è una classe esterna che richiamo (non dal filmato principale) nel seguente modo:
var col3:DataGridColumn = new DataGridColumn("oggetto"); data_dg.addColumn(col3); col3.headerText = "Oggetto"; col3.cellRenderer = wordWrapCellRenderer;

ho provato ad inserire la classe esterna nel pannello proprietà del filmato principale ma dà il seguente errore:
1152: A conflict exists with inherited definition fl.controls:LabelButton.icon in namespace protected.

dove sbaglio???

Grazie per l'aiuto

quesito posto 22 Marzo 2013 in actionscript da anonimo
ri-taggati 24 Marzo 2013 da giorgio.natili
   

2 Risposte

0 voti

Quando assegni wordWrapCellRenderer come valore della prorieta' cellRenderer stai facendo riferimento alla classe? Di solito le classi iniziano con la maiuscola quindi la sintassi appropriata dovrebbe essere

col3.cellRenderer = CustomCell;

In questo articolo http://www.adobe.com/devnet/flash/quickstart/datagrid_pt3.html#section14 trovi molte info aggiuntive sui custom cell renderers.
Il tuo problema ritengo derivi da un conflitto dovuto alle classi che hai usato in una della applicazioni figlie che probabilmente non e' importata all'interno del FLA principale.

Con i FLA davanti potrei essere sicuramente piu' preciso.

risposta inviata 24 Marzo 2013 da giorgio.natili (2,660 punti)
0 voti

Ciao Giorgio e grazie per la risposta, io sono sicuro di richiamare la classe, ora dopo vari tentativi ottengo un altro errore che è questo:

TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/drawBackground()
at wordWrapCellRenderer/drawBackground()[K:\GESTIONALE UT\wordWrapCellRenderer.as:27]
at fl.controls::LabelButton/draw()
at fl.core::UIComponent/callLaterDispatcher()

attualmente stavo tentando non solo di avere il wordwrap su una colonna ma anche di avere le righe di colore alternato, ho notato che funziona ma solo sulle colonne a cui non ho associato il wordwrap, per ottenerlo anche su quelal colonna ho modificato le classi, allego i due file:

wordWrapCellRenderer.as

`package {

import fl.controls.listClasses.CellRenderer;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;

public class wordWrapCellRenderer extends CellRenderer{
private var tf:TextFormat;

public function wordWrapCellRenderer(){
tf = new TextFormat();
tf.align = TextFormatAlign.LEFT;
}

override protected function drawLayout():void{
textField.setTextFormat(tf);
textField.wordWrap = true;
textField.autoSize = "left";
super.drawLayout();
}
override protected function drawBackground():void
{
setStyle("upSkin", CellRendererupSkin);
if(listData.index % 2 == 0){
setStyle("upSkin", CellRenderer_upSkin2);
}
super.drawBackground();
}
} // public class wordWrapCellRenderer
} // fine package`

alterCellRenderer.as

`package
{

import fl.controls.listClasses.CellRenderer;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;

public class alterCellRenderer extends CellRenderer
{
private var tf:TextFormat;

public function alterCellRenderer()
{
}

override protected function drawBackground():void
{
setStyle("upSkin", CellRendererupSkin);
if(listData.index % 2 == 0){
setStyle("upSkin", CellRenderer_upSkin2);
}
super.drawBackground();
}

}
}`
Praticamente sembra che la classe wordwrap mi vada a sovrascrivere anche dei parametri del componente button e non mi fà più funzionare niente, anche nelle applicazioni caricate dopo aver ricevuto l'errore i pulsanti non li vedo più, vedo solo il testo.

risposta inviata 25 Marzo 2013 da anonimo

L'errore che ottieni e' dovuto ad una interazione con un oggetto ancora non rednerizzato sulla DisplayList. In soldoni stai manipolando qualcosa che esiste come oggetto in memoria ma che ancora non e' renderizzato nel Flash Player.

Nella funzione

override protected function drawBackground():void
{
setStyle("upSkin", CellRendererupSkin);
if(listData.index % 2 == 0){
setStyle("upSkin", CellRenderer_upSkin2);
}
super.drawBackground();
}
} // public class wordWrapCellRenderer

 

io proverei a chiamare prima il super e poi a settare gli stili.

Puoi partecipare alle discussioni anche attraverso facebook e twitter.
...