private function itemFocusInHandler(event:DataGridEvent):void {
System.setClipboard((event.target.itemEditorInstance as TextInput).text);
}
<mx:DataGrid width="300" height="200" itemFocusIn="itemFocusInHandler(event)" editable="true">
...
Flash Player 9 시절에는 이게 가능했다.
그러나 한층 업그레이드된 Flash Player 10의 보안 정책을 따르면,
itemFocusIn 등의 User Interaction과 관계없는 이벤트 핸들러에서는 클립보드와 같은 로컬 리소스로의 접근을 제한한다.
(실제로 #2147 런타임 에러가 발생한다.)
결국, 클립보드에 값을 넣기 위해서는 클릭이나 키입력 이벤트를 타고 처리해야 한다는 얘긴데..
Flash Player 10에서 작동하기 위해서는 아래와 같은 꼼수가 필요하다.
private function itemClickHandler(event:ListEvent):void {
var dg:DataGrid = event.target as DataGrid;
var col:DataGridColumn = dg.columns[event.columnIndex] as DataGridColumn;
System.setClipboard(event.itemRenderer.data[col.dataField]);
}
<mx:DataGrid width="300" height="200" itemClick="itemClickHandler(event)" editable="true">
...
뭔가 맞지 않는 느낌이지만 일단 동작은 정상!!
백골이 진토되어 넋이라도 쫀득쫀득.. [사고뭉치 엉클쪼]