แก้สระลอย

ปัญหาที่พบบ่อยมากๆในการใช้ฟอนต์ในทุกประเภทคือ สระลอย (ถึงแม้ว่าสมัยนี้สระจมจะเท่กว่า) โดยเฉพาะในโปรแกรมกราฟิกใหญ่ๆเก๋าๆ (?) อย่างโปรแกรมในเครือ Adobe และ Macromedia

รู้สึกอะไรแปลกๆมั้ยครับ ว่าคำว่า Macromedia มันคุ้นๆ
อ้าว ก็ sIFR วางรากฐานบน Macromedia Flash นี่ครับ (แหม ทำเป็นเรื่องคาดไม่ถึงเสียเกือบเนียน)
และแน่นอน สระมันจะต้องลอย เนื่องจากเราใช้ภาษาไทยในโปรแกรม Flash นี่

แล้วทำไมสระใน sIFR ของที่นี่ไม่ลอยล่ะ
เพราะว่าที่นี่ใช้วิธีแก้ปัญหาน่ะสิครับ
อยากรู้หรือเปล่าว่าวิธีที่ว่านั่นคืออะไร (อยากรู้เหอะ นะครับ นะ นะ)

ก่อนอื่นต้องทำความรู้จักกับ class ในแฟลชกันก่อน
class เป็นเหมือนกับการกำหนดฟังก์ชั่นในแอคชั่นสคริปต์
ต่างกันตรงที่ว่ามันพกพาสะดวกกว่า (?) และใช้ง่ายกว่าเท่านั้นเองครับ

และแล้วก็มีคนใจดี (?) เขียนสคริปต์ class ไว้ใช้แก้สระลอยอเนกประสงค์สำหรับฟอนต์ภาษาไทยขึ้น
เฮียคนนี้ชื่อ katopz ครับ เป็นคนพัฒนา SleepyDesign Typetool ให้เรานำมาใช้อย่างถ้วนหน้า (หรือถือว่าถ้วนหน้านั่นแหละ)
สามารถหาสคริปต์แก้สระลอยได้จากที่ SleepyDesign.com
โดยไปที่เมนู exp และหาๆดูแถวนั้นแหละครับ (แกมีให้ donate ด้วยนะครับ แต่สารภาพว่าไม่ได้โดเนทเพราะไม่มีตังค์)

หาสับโฟลเดอร์ที่เป็นชื่อภาษาในโฟลเดอร์ที่เก็บตัวโปรแกรมแฟลชเวอร์ชั่นของคุณ (ต้อง 7 ขึ้นไป) ซึ่งมักจะเป็น C:\Program Files\Macromedia\Flash X ในที่นี้จะเป็น en เพราะไม่มีแฟลชภาษาไทยครับ แล้วเข้าต่อไปที่ ..\en\First Run\Classes\SleepyDesign\string (ถ้าไม่มีให้สร้างเองนะครับ -- และระวังเรื่องตัวใหญ่ตัวเล็กด้วย) จากนั้นแตกซิป นำไฟล์ Thai.as ไปไว้ที่โฟลเดอร์นั้นแหละครับ

จากนั้นเปิด sifr.fla ขึ้นมา และต่อจากนั้นอีก ก็เปิดไฟล์ที่เราไม่ควรจะแก้ไข (แต่เราต้องแก้ไขในกรณีนี้) คือไฟล์ dont_customize_me.as ขึ้นมาอีก แนะนำให้เปิดไฟล์ *.as นี้ในแฟลชครับ

หาไปจนถึงบรรทัดที่ 101 จะพบสคริปต์ดังข้างล่าง
holder.txtF.htmlText = txt;
ให้เติมเครื่องหมาย // ไว้ข้างหน้าครับ จะกลายเป็น
// holder.txtF.htmlText = txt;
สังเกตว่าข้อความจะกลายเป็นสีเทานะครับ จากนั้นทำการบันทึกครับ

จากนั้น สลับไปดูที่ sifr.fla บ้าง
001
ไปที่ Layer ที่ชื่อ actions น่ะครับ (คลิกเลย) แล้วเปิด Actions Panel (ใช้วิธีคลิกอีกเหมือนกัน)
จากนั้น ที่ Action Panel ให้เขียนสคริปต์ดังต่อไปนี้ลงไป
import SleepyDesign.string.Thai; // อิมพอร์ต Class
var resultString:Thai = new Thai(txt, {fontFamily:"psl_sp"}); // กำหนดตัวแปรใหม่ โดยมีค่าเป็นข้อความที่แก้สระลอยแล้ว
holder.txtF.htmlText = resultString; // ข้อความที่เป็น html ของ txtF ที่อยู่ใน MC Holder คือตัวแปรใหม่ที่กำหนดบรรทัดบน
จากนั้น กำหนดฟอนต์และ Embed Character ลงไปตามปกติ พอตอนจะ Export Movies จะขึ้นหน้าต่างคล้ายๆภาพข้างล่างนี่
002
ให้เลือกเป็น ActionScript 2.0

หลังจากนั้นก็นำไปใช้ตามปกติครับ แต่มันมีข้อจำกัดอยู่ตรงที่ว่าจะใช้ได้เฉพาะเบราว์เซอร์ที่มีแฟลชเพลเยอร์ตั้งแต่เวอร์ชั่น 7 ขึ้นไปเท่านั้น ซึ่งในบาง OS ไม่มี ดังนั้น หากต้องการให้เครื่องที่มีแฟลชเพลเยอร์ต่ำกว่า 7 (แต่มากกว่า 6) สามารถเห็นได้ -- แต่สระยังลอย ให้ทำดังนี้ครับ

เปิดไฟล์ sifr.js ขึ้นมา จะพบสคริปต์เรียงกันอยู่ในลักษณะนี้
if(typeof sIFR == "function" && !sIFR.UA.bIsIEMac){
// replacement statements
};
ให้แก้ให้อยู่ในลักษณะนี้ครับ
if(typeof sIFR == "function" && !sIFR.UA.bIsIEMac && !sIFR.UA.bFlashVersion<7 ){ // เครื่องที่มี Flash ต่ำกว่าเวอร์ชั่น 7 จะไม่เห็น
// replacement statements
};
if(typeof sIFR == "function" && !sIFR.UA.bIsIEMac && !sIFR.UA.bFlashVersion>=7 ){ // เครื่องที่มี Flash เวอร์ชั่น 7 ขึ้นไปจะไม่เห็น
// replacement statements unfixed vowel
};
โดย replacement statements unfixed vowel นี้ จะกำหนดให้เป็นไฟล์แฟลชที่ไม่ได้มีการแก้สระลอย (* อย่าลืมแก้ไฟล์ dont_customize_me.as ให้เป็นเหมือนเดิมก่อน export ใหม่)

อย่างไรก็ตาม หากผู้ใช้นั้นใช้ IE บน Windows แล้วแฟลชเพลเยอร์ที่ใช้เป็นเวอร์ชั่นต่ำกว่า 7 ลงไป ก็จะไม่เห็นนะครับ แต่ค่อนข้างหายาก -- หายากมากๆด้วยซ้ำไป ช่างเหอะครับ ใครจะไปแคร์ไออีมัน

จบแล้วครับ บทความแก้สระลอย หวังว่าจะใช้มันอย่างมีประสิทธิภาพนะครับ ขอบคุณครับ
by Zafire06 -- You're free to use any information in this page in anyway but plz link back to me see About page for more detail