That depends..
If you have a component-heavy application with your own custom styles for 
instance, it might be better to use a TextArea.
Or you could take it a step further and make this into a new component (and 
even make it an mxp for distribution).

Then again, if all you need is one (and one only) non-selectable textfield, 
sure grab a TextField and ScrollBar and move on :)

I mearly wanted to present a better solution (IMO) than overlaying a TextArea with a shape, which is to actually fix what seems to be broke.

regards,
Muzak

----- Original Message ----- From: "Cor" <c...@chello.nl>
To: "'Flash Coders List'" <flashcoders@chattyfig.figleaf.com>
Sent: Sunday, March 29, 2009 1:00 PM
Subject: RE: [Flashcoders] ?: how to prevent users to copy text from aTextArea?


Just interested.
Is all this worth the hassle?
I mean instead using a TextArea, I would go for a normal TextField and a
custom scrollbar all in 1 movieclip.
And set the needs.

Cor.


-----Original Message-----
From: flashcoders-boun...@chattyfig.figleaf.com
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of Muzak
Sent: zondag 29 maart 2009 1:20
To: Flash Coders List
Subject: Re: [Flashcoders] ?: how to prevent users to copy text from
aTextArea?


The problem seems to be that TextArea uses the "enabled" value to set the
inner textField's selectable property value.

 protected function updateTextFieldType():void {
  textField.type = (enabled && _editable) ? TextFieldType.INPUT :
TextFieldType.DYNAMIC;
  textField.selectable = enabled;
  textField.wordWrap = _wordWrap;
  textField.multiline = true;
 }

So each time the updateTextFieldType() method is called, no matter what you
set TextArea.textField.selectable to, it will revert to
the TextArea.enabled value.
That's why :

   details_ta.textField.selectable = false;

doesn't really work.

So it's not really a bug, just a (very) bad decision.
Why it was done that way, who knows..

To get the TextArea to work the way you want, you can extend it and override
the updateTextFieldType() method and add a selectable
property, like so:

package {

import fl.controls.TextArea;
import flash.text.TextFieldType;

public class TextArea2 extends TextArea {

 private var _selectable:Boolean = true;

 override protected function updateTextFieldType():void {
  textField.type = (enabled && _editable) ? TextFieldType.INPUT :
TextFieldType.DYNAMIC;
  textField.selectable = _selectable;
  textField.wordWrap = _wordWrap;
  textField.multiline = true;
 }

 public function get selectable():Boolean {
  return _selectable;
 }
 public function set selectable(value:Boolean):void {
  _selectable = value;
  super.textField.selectable = value;
  updateTextFieldType()
 }

}
}


Tested with the code you provided earlier (normal TextArea on stage):

package {

import flash.display.Sprite;
import fl.controls.TextArea;
import flash.text.TextField;
import flash.events.Event;
import TextArea2;

public class TestTextArea extends Sprite {

 public var details_ta:TextArea;
 public var details2_ta:TextArea2;

 public function TestTextArea() {
  addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
  init();
 }

 private function init():void {
  trace("TestTextArea ::: init");
  details2_ta = new TextArea2();
  details2_ta.selectable = false;
  details2_ta.x = 220;
  details2_ta.y = 10;
  details2_ta.width = 200;
  details2_ta.height = 100;
  addChild(details2_ta);
 }

 private function addedToStageHandler(evt:Event):void {
  trace("TestTextArea ::: addedToStageHandler");
  var msg:String = "<b>Lorem ipsum dolor sit amet,</b> consectetuer
adipiscing elit.";
  details_ta.htmlText = msg;
  details2_ta.htmlText = msg;
 }

}
}

regards,
Muzak


_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to