ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ThaiFlashDev.com « Tutorials « Tutorial - Developer « หัวข้อ: Flash+AIR NativeDragDrop : ลากไฟล์ใส่แฟรช(AIR)
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: Flash+AIR NativeDragDrop : ลากไฟล์ใส่แฟรช(AIR)  (อ่าน 1657 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
 คี
Echo Two Zero Wisky Romio India
พี่ใหญ่ปอหก
*

คะแนน: 79
ออฟไลน์ ออฟไลน์

กระทู้: 3954


เซ็ตอัพ ไอดี โค้ดเออร์เรอร์


« เมื่อ: 09 พ.ค. 09, 16:39:49 »

วันนี้ลองเขียน AIR กับโจทย์ที่เคยเห็นมีคนถามถึง นั่นคือ
การลากไอคอนไฟล์ บน desktop มาใส่ใน Flash(AIR)

เอาแบบง่ายๆล่ะกัน เพราะผมเองก็เพิ่งเคยทำ
ไม่ขอพูดถึงการติดตั้ง AIK บน flash นะ เพราะที่ผมทำก็มั่วๆจนใช้งานได้

เริ่มที่ สร้างเอกสารใหม่
File->new...
เลือก Flash File (ActionScript 3.0)
กด ctrl+shift+F12 เพื่อเปิด Publish Settings
ที่แทบ Flash บรรทัดแรก หัวข้อ Version เลือกเป็น Adobe AIR 1.0
เลือก OK
แล้ว save as เป็นชื่อที่ต้องการ ในที่นี้ผมตั้งชื่อว่า dragdrop.fla

ลองกด ctrl+Enter ทดสอบดู จะได้หน้าต่างที่มุมบนซ้ายเป็น icon ของ AIR
ลองลาก icon บน desktop ไปลอยอยู่บนหน้าต่างนี้จะเห็นเป็น เครื่องหมายห้ามคาดอยู่
ปิดหน้าต่างนี้ไป

พิมพ์ script ในเฟรมแรกดังนี้

โค๊ด:
// ดึงเอา package ที่เกี่ยวกับการทำ DragDrop มารวมในงานของเรา
import flash.desktop.NativeDragManager;
import flash.events.NativeDragEvent;

// สร้าง InteractiveObject มาเพื่อเป็นพื้นที่สำหรับวาง
var dropArea:Sprite = new Sprite();
dropArea.graphics.beginFill(0xff0000,0.1);
dropArea.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
dropArea.graphics.endFill();
addChild(dropArea);

// หากมีการลากเข้ามาใน stage ให้ทำ onDragIn
dropArea.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragIn);
function onDragIn(e:NativeDragEvent):void
{
// ยอมให้มีการลากมาใส่
NativeDragManager.acceptDragDrop(dropArea);
}

ลองกด ctrl+Enter ทดสอบลาก icon จากบน desktop มาใส่ใน หน้าต่างนี้ จะมีเครื่องหมาย + ปรากฏขึ้นมาแทน เครื่องหมายห้าม
ปิดหน้าต่างนี้ไป แล้วลองทำความเขาใจกับ script ข้างบน (มี comment ให้แล้ว)

จากนั้นพิมพ์ script เพิ่มเข้าไปอีก

โค๊ด:
import flash.desktop.NativeDragManager;
import flash.events.NativeDragEvent;

// เราจะรับข้อมูลที่ลากเข้ามาผ่านทาง clipboard เราก็ต้องเพิ่ม package นี้เข้ามา
import flash.desktop.Clipboard;
import flash.desktop.ClipboardFormats;

var dropArea:Sprite = new Sprite();
dropArea.graphics.beginFill(0xff0000,0.1);
dropArea.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
dropArea.graphics.endFill();
addChild(dropArea);

dropArea.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragIn);
function onDragIn(e:NativeDragEvent):void
{
NativeDragManager.acceptDragDrop(dropArea);
}

// เพิ่มให้รอเหตุการ เมื่อวางไอคอนที่ลากเข้ามา ให้ทำ onDragDrop
dropArea.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,onDragDrop);
function onDragDrop(e:NativeDragEvent):void
{
// ดึงข้อมูลที่ลากเขามา ผ่านทาง clipboard เป็นรายการของไฟล์
var files:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
for(var i:int = 0; i < files.length; i++) // วนรอบตามจำนวนไฟล์ที่ลากเข้ามา
{
// โหลดไฟล์ เหล่านั้นเข้ามาแสดงใน stage
var req:URLRequest = new URLRequest(files[i].nativePath);
var ldr:Loader = new Loader();
ldr.load(req);
addChild(ldr);
}
}

ลองกด ctrl+Enter ทดลองลากไฟล์เข้ามาแล้ววางในหน้าต่างนี้
ถ้าเป็นไฟล์รูปภาพ jpg gif png หรือ swf ก็จะโหลดเข้ามา แสดงแบบง่ายๆ ไม่มีปัญหาอะไร
แต่ถ้าเป็นไฟล์ อย่างอื่นที่ไม่ใช่รูป เช่น .txt .mp3 ก็จะ Error ต้องเขียนป้องกันกันอีกที
อ้างถึง
Error #2044: Unhandled IOErrorEvent:. text=Error #2124: Loaded file is an unknown type.

ตอนนี้ก็สามารถลาก ไฟล์รูปเข้ามาเพื่อโหลดแสดงผลได้แล้ว ลองเอาไปประยุกต์ต่อดูนะครับ
« แก้ไขครั้งสุดท้าย: 09 พ.ค. 09, 17:06:33 โดย keerotic » แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

 นายก่อสตูดิโอ
Administrator
พี่ปอสี่
*****

คะแนน: 20
ออฟไลน์ ออฟไลน์

กระทู้: 1977


22 แล้วเหรอเนี่ย T^T


« ตอบ #1 เมื่อ: 10 พ.ค. 09, 02:09:20 »

 25 กรี๊ดด ขอบคุณครับพี่คี บวกให้เลย
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า
 ฮาร์ท
Administrator
พี่ใหญ่ปอหก
*****

คะแนน: 35
ออฟไลน์ ออฟไลน์

กระทู้: 2689


อะโชะ


เว็บไซต์
« ตอบ #2 เมื่อ: 10 พ.ค. 09, 05:46:47 »

ปักไว้
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

ตอบแรง แทงใจดำ โดนใจใคร  ถูกก็ว่าถูก ดีก็ว่าดี ไม่ดีก็ว่าไม่ดี แต่รักจริงนะตัวเอง

http://www.howdoflash.net/ บล็อกส่วนตั๊ว ส่วนตัว มาอ่านเร้ววว
 คี
Echo Two Zero Wisky Romio India
พี่ใหญ่ปอหก
*

คะแนน: 79
ออฟไลน์ ออฟไลน์

กระทู้: 3954


เซ็ตอัพ ไอดี โค้ดเออร์เรอร์


« ตอบ #3 เมื่อ: 10 พ.ค. 09, 13:08:34 »

เอา icon ของไฟล์ที่ลากเข้ามา แสดงในโปรแกรมของเรา

จากตัวอย่างข้างบน เปลี่ยน function onDragDrop เป็นอย่างนี้
โค๊ด:
function onDragDrop(e:NativeDragEvent):void
{
var files:Array = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
var X:int = 0;
for(var i:int = 0; i < files.length; i++)
{
for(var j:int = 0; j < files[i].icon.bitmaps.length; j++)
{
var icon:Bitmap = new Bitmap(files[i].icon.bitmaps[j]);
addChild(icon);
icon.x = X;
X+= icon.width;
}
}
}

จากตัวอย่างก่อนหน้านี้ เราเอาข้อมูล nativePath จาก object File ที่ได้จาก clipboard เพื่อโหลด รูปภาพมาแสดง
นอกจาก nativePath แล้วยังมีข้อมูลอย่างอื่นอีก ในที่นี้เราหยิบ icon มาใช้
เออ.. ไม่รู้จะอธิบายยังไงดี
โค้ดไม่ยากครับ ลองทำความเข้าใจกันดู
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

 เซนบะ สตูดิโอ ฮิฟิ
เซนบะ 's Experiments
เด็กอนุบาลสามกำลังโต
****

คะแนน: 6
ออฟไลน์ ออฟไลน์

กระทู้: 446


The Boy With No Name


เว็บไซต์
« ตอบ #4 เมื่อ: 10 พ.ค. 09, 13:21:14 »

good la
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

I'd do anything,
Just to hold you in my arms,
Cuz I know I won't forget you
 นายก่อสตูดิโอ
Administrator
พี่ปอสี่
*****

คะแนน: 20
ออฟไลน์ ออฟไลน์

กระทู้: 1977


22 แล้วเหรอเนี่ย T^T


« ตอบ #5 เมื่อ: 11 พ.ค. 09, 12:29:51 »

 07 กรี๊ดดด เรียกใช้ไอคอนได้ด้วย กรี๊ดดดด
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า
 FL
น้องอนุบาลสองทับสาม
***

คะแนน: 2
ออฟไลน์ ออฟไลน์

กระทู้: 167



« ตอบ #6 เมื่อ: 11 พ.ค. 09, 15:46:05 »

อ้างถึง
ถ้าเป็นไฟล์รูปภาพ jpg gif png หรือ swf ก็จะโหลดเข้ามา แสดงแบบง่ายๆ ไม่มีปัญหาอะไร
แต่ถ้าเป็นไฟล์ อย่างอื่นที่ไม่ใช่รูป เช่น .txt .mp3 ก็จะ Error ต้องเขียนป้องกันกันอีกที

โค๊ด:
addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onDragEnter);

function onDragEnter(e:NativeDragEvent):void {
var file:Object = e.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT);
if (file[0].extension == "jpg" || file[0].extension == "png") {
NativeDragManager.acceptDragDrop(this);
}
}


ถ้าไฟล์ที่ drag มาเป็นไฟล์ "jpg" หรือ "png"
ก็จะยอมให้ Drop ลงได้(สังเกตที่ไอคอนเล็กๆตรงข้างเม้าส์จะเป็นเครื่องหมายบวก)
แต่ถ้าไม่ใช่ก็จะไม่สามารถ Drop ได้(สังเกตไอคอน)

(ใช้สำหรับตรวจสอบไฟล์ที่ลากมาเพื่อป้องกันความผิดพลาด)
« แก้ไขครั้งสุดท้าย: 11 พ.ค. 09, 15:54:54 โดย FL » แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

"Stay in Background ...."
 คี
Echo Two Zero Wisky Romio India
พี่ใหญ่ปอหก
*

คะแนน: 79
ออฟไลน์ ออฟไลน์

กระทู้: 3954


เซ็ตอัพ ไอดี โค้ดเออร์เรอร์


« ตอบ #7 เมื่อ: 11 พ.ค. 09, 15:50:26 »

ขอบคุณ FL ครับ
กะว่าเดี๋ยวกลับมาเพิ่มให้อยู่เชียว เอา .gif ด้วยสิ 
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

 FL
น้องอนุบาลสองทับสาม
***

คะแนน: 2
ออฟไลน์ ออฟไลน์

กระทู้: 167



« ตอบ #8 เมื่อ: 11 พ.ค. 09, 15:58:02 »

จะเป็นอะไรก็ได้ครับ (ที่แฟลชรองรับ)
เราก็แค่ไปแก้ที่นามสกุล(extension)ของไฟล์คับ

file[0].extension == "jpg"
« แก้ไขครั้งสุดท้าย: 11 พ.ค. 09, 15:59:49 โดย FL » แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

"Stay in Background ...."
 คี
Echo Two Zero Wisky Romio India
พี่ใหญ่ปอหก
*

คะแนน: 79
ออฟไลน์ ออฟไลน์

กระทู้: 3954


เซ็ตอัพ ไอดี โค้ดเออร์เรอร์


« ตอบ #9 เมื่อ: 11 พ.ค. 09, 16:03:53 »

 43
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

 matanume
เด็กเตรียมอนุบาล
*

คะแนน: -1
ออฟไลน์ ออฟไลน์

กระทู้: 33



« ตอบ #10 เมื่อ: 13 พ.ค. 09, 06:56:41 »

อ่า ผมไปอยู่หลังเขาไหนมาเนี่ยพึ่งรุ้ว่ามันทำได้ = ="
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า
 นายก่อสตูดิโอ
Administrator
พี่ปอสี่
*****

คะแนน: 20
ออฟไลน์ ออฟไลน์

กระทู้: 1977


22 แล้วเหรอเนี่ย T^T


« ตอบ #11 เมื่อ: 13 พ.ค. 09, 17:20:05 »

เอาไปทำตามแล้วได้มาเป็นตัวนี้ครับเย้

Drag-and-Drop Picture Gallery Example


ลากไฟล์ png, jpg, gif, swf มาใส่ในช่องแล้วแสดงเป็น Thumbnail ด้านซ้าย
ดับเบิ้ลคลิกแล้วจะแสดงภาพใหญ่ครับ

ตัวนี้เขียนคร่าวๆ เพื่อทดสอบโค้ด + ลองทำตาม Tutorial ดูครับ สนุกมากๆ
เวลาโหลด swf มันจะแปลกๆ หน่อยนะครับ ถ้าจะใช้งานจริงค่อยปรับอีก

ไฟล์ fla: http://tutorials.korstudioxd.com/airdragdrop/airdragdrop.rar
ไฟล์ AIR: http://tutorials.korstudioxd.com/airdragdrop/AIRDragAndDropExample.air
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า
 พล
น้องอนุบาลสองทับสาม
***

คะแนน: 0
ออฟไลน์ ออฟไลน์

กระทู้: 239



« ตอบ #12 เมื่อ: 15 พ.ค. 09, 09:34:57 »

 02 02 02

เยี่ยมเลย ขอบคุณครับ
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

หากแต่เพียงเราตอนนี้เป็นกายเนื้อ แต่สักวันมันก็ต้องดับไป
 คุณชาย
รับทำเว็บไซต์ ครบวงจร ราคากันเอง ^^
เด็กเตรียมอนุบาล
*

คะแนน: 0
ออฟไลน์ ออฟไลน์

กระทู้: 33



เว็บไซต์
« ตอบ #13 เมื่อ: 24 ก.ย. 09, 06:23:06 »

 04
เดี๋ยวจะลองเด้อ
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

http://www.imi.in.th
========================================

>>http://web.imi.in.th รับทำเว็บไซต์ ครบวงจร ราคากันเองครับ ^^
>> http://3d.imi.in.th โปรเจคนักศึกษา สามมิติ
>>http://network.imi.in.th วางระบบร้านเกมส์ร้านอินเตอร์เน็ตจ้า
 Tlecoco
รุ่นพี่ปอหนึ่ง
*****

คะแนน: 7
ออฟไลน์ ออฟไลน์

กระทู้: 774



« ตอบ #14 เมื่อ: 24 ก.ย. 09, 07:08:00 »

ไรกัน ไรกันนนน  18


นู๋ไม่รู้เรื่องเลย  05
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

หน้า: [1]   ขึ้นบน
  พิมพ์  
ThaiFlashDev.com « Tutorials « Tutorial - Developer « หัวข้อ: Flash+AIR NativeDragDrop : ลากไฟล์ใส่แฟรช(AIR)
 
กระโดดไป: