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">
...

뭔가 맞지 않는 느낌이지만 일단 동작은 정상!!
크리에이티브 커먼즈 라이센스
Creative Commons License
2009/02/13 12:09 2009/02/13 12:09

http://ph0ebus.net/trackback/80