Comments on: UIComponent http://llun.in.th/2008/07/uicomponent/ /īm/ /ə/ /prōgræmər/ Sun, 26 Feb 2012 02:23:00 +0000 hourly 1 http://wordpress.org/?v=3.3.1 By: Benz034 http://llun.in.th/2008/07/uicomponent/#comment-333 Benz034 Mon, 31 Jan 2011 14:15:00 +0000 http://llun.info/?p=453#comment-333 เป็นเหมือนกันเลยตอนแรก ก็มั่วๆ พอเล่นไปเล่นมา กว่าจะจับทางได้ ... เป็นเหมือนกันเลยตอนแรก ก็มั่วๆ พอเล่นไปเล่นมา กว่าจะจับทางได้ …

]]>
By: Benz034 http://llun.in.th/2008/07/uicomponent/#comment-576 Benz034 Mon, 31 Jan 2011 14:15:00 +0000 http://llun.info/?p=453#comment-576 เป็นเหมือนกันเลยตอนแรก ก็มั่วๆ พอเล่นไปเล่นมา กว่าจะจับทางได้ ... เป็นเหมือนกันเลยตอนแรก ก็มั่วๆ พอเล่นไปเล่นมา กว่าจะจับทางได้ …

]]>
By: แนท » Blog Archive » measure() http://llun.in.th/2008/07/uicomponent/#comment-332 แนท » Blog Archive » measure() Tue, 08 Jul 2008 02:51:41 +0000 http://llun.info/?p=453#comment-332 [...] คราวที่แล้วเขียนไปแค่สี่ขั้นตอน แต่ถ้าใครลองโหลดไฟล์ที่ @iporsut แนบมาใน comment คงเห็นรายละเอียดที่มากกว่านั้นเยอะแยะเลย แต่ผมก็ได้แค่อ่านผ่านๆ นะ ยังไม่ได้ดูละเอียดเท่าไหร่ แหะๆ แต่วันนี้จะมาเขียนถึงขั้นลึกลับอีกขั้นนึงนั่นคือ measure() เพราะต้องใช้มันเข้าพอดี -_-” ปกติฟังก์ชั่นนี้จะไม่ค่อยต้องเขียนเองเท่าไหร่เพราะหน้าที่ของมันคือใช้บอกว่า component เรามีขนาดเท่าไหร่ แล้วให้ขั้นถัดไปคือ updateDisplayList เป็นคนวาด ซึ่งวิธีทำปกตินั้นก็ง่ายแสนง่ายคือเรียก component ลูกให้วัดค่าออกมาให้ แล้วก็จับมันบวกๆ ลบๆ กันแล้วส่งออกไป แต่มีปัญหากับผมอีกและ -_-” เพราะว่าถ้าหากเราตั้งขนาดของ component ลูกเป็น % แล้วหละก็มันก็มีบางอย่างที่คำนวนออกมาให้พลาดเหมือนกัน(จริงๆ ก็ไม่พลาดหรอกแต่ผลลัพธ์ที่ต้องการมันไม่ไช่อย่างนั้นหนะ) เช่น List ลองมาดูโจทย์ผมละกัน โจทย์ก็แสนจะง่ายดาย มี List ย่อยๆ หลายๆ List ที่แต่ละ List มีข้อมูลไม่เท่ากัน โดยต้องเอา List เหล่านั้นมารวมกันให้เป็น List ใหญ่ๆ ก้อนนึง อ๊ะ เหมือนธรรมดา ยังไม่หมดๆ แต่ละ List มีสองแบบคือ List ที่เป็นแบบแถวเรียงลงมา กับ List ที่เป็นแบบกล่องไอคอน แบบที่เห็นใน Nautilus หรือ My computer นั่นแหละ ซับซ้อนดีมะ ซึ่งแต่ละ List ก็ต้องโชว์ขนาดทั้งหมดอีก เอาเป็นว่าคงไม่เห็นภาพกันแน่นอน ไปดูของจริงเลยดีกว่า อ่ะคราวนี้จากด้านบนถ้าตั้ง List แต่ละอันว่าให้ขนาดเป็น 100% มันก็จะไม่สามารถรู้ได้อีกว่ามันควรจะให้ความสูงมันเป็นเท่าไหร่ ผลก็คือมันจะให้กล่องแต่ละกล่องมีขนาดเท่ากันหมด และย่อเหลือแสดงแค่สองแถวเท่านั้น (จริงๆ ข้อมูลด้านบนมันไม่ดีนะเนี๊ยะ ช่องบนกับช่องล่างข้อมูลมีขนาดเท่ากัน -_-”) วิธีแก้คือไป override measure() ซะโดยคำนวนขนาดของแต่ละแถวของ List ว่ามีความสูงเท่าไหร่ จับบวกลบคูณหารนิดหน่อยยัดใส่ตัวแปรชื่อ measuredHeight ก็เป็นอันจบ พอไปถึงขั้นถัดไปคือ updateDisplayList มันจะวาดกล่องต่างๆ ตามขนาดที่เรากำหนดใน measuredWidth กับ measuredHeight protected override function measure():void { super.measure()   if (stack.selectedChild == listCanvas) { measuredHeight = titleBar.measuredHeight + list.measureHeightOfItems(0, provider.length + 1) } else { if (providerLength != provider.length || tileRowCount < 0) { providerLength = provider.length tileRowCount = tile.rowCount + 1 }   measuredHeight = titleBar.measuredHeight + tileRowCount * tile.rowHeight } } [...] [...] คราวที่แล้วเขียนไปแค่สี่ขั้นตอน แต่ถ้าใครลองโหลดไฟล์ที่ @iporsut แนบมาใน comment คงเห็นรายละเอียดที่มากกว่านั้นเยอะแยะเลย แต่ผมก็ได้แค่อ่านผ่านๆ นะ ยังไม่ได้ดูละเอียดเท่าไหร่ แหะๆ แต่วันนี้จะมาเขียนถึงขั้นลึกลับอีกขั้นนึงนั่นคือ measure() เพราะต้องใช้มันเข้าพอดี -_-” ปกติฟังก์ชั่นนี้จะไม่ค่อยต้องเขียนเองเท่าไหร่เพราะหน้าที่ของมันคือใช้บอกว่า component เรามีขนาดเท่าไหร่ แล้วให้ขั้นถัดไปคือ updateDisplayList เป็นคนวาด ซึ่งวิธีทำปกตินั้นก็ง่ายแสนง่ายคือเรียก component ลูกให้วัดค่าออกมาให้ แล้วก็จับมันบวกๆ ลบๆ กันแล้วส่งออกไป แต่มีปัญหากับผมอีกและ -_-” เพราะว่าถ้าหากเราตั้งขนาดของ component ลูกเป็น % แล้วหละก็มันก็มีบางอย่างที่คำนวนออกมาให้พลาดเหมือนกัน(จริงๆ ก็ไม่พลาดหรอกแต่ผลลัพธ์ที่ต้องการมันไม่ไช่อย่างนั้นหนะ) เช่น List ลองมาดูโจทย์ผมละกัน โจทย์ก็แสนจะง่ายดาย มี List ย่อยๆ หลายๆ List ที่แต่ละ List มีข้อมูลไม่เท่ากัน โดยต้องเอา List เหล่านั้นมารวมกันให้เป็น List ใหญ่ๆ ก้อนนึง อ๊ะ เหมือนธรรมดา ยังไม่หมดๆ แต่ละ List มีสองแบบคือ List ที่เป็นแบบแถวเรียงลงมา กับ List ที่เป็นแบบกล่องไอคอน แบบที่เห็นใน Nautilus หรือ My computer นั่นแหละ ซับซ้อนดีมะ ซึ่งแต่ละ List ก็ต้องโชว์ขนาดทั้งหมดอีก เอาเป็นว่าคงไม่เห็นภาพกันแน่นอน ไปดูของจริงเลยดีกว่า อ่ะคราวนี้จากด้านบนถ้าตั้ง List แต่ละอันว่าให้ขนาดเป็น 100% มันก็จะไม่สามารถรู้ได้อีกว่ามันควรจะให้ความสูงมันเป็นเท่าไหร่ ผลก็คือมันจะให้กล่องแต่ละกล่องมีขนาดเท่ากันหมด และย่อเหลือแสดงแค่สองแถวเท่านั้น (จริงๆ ข้อมูลด้านบนมันไม่ดีนะเนี๊ยะ ช่องบนกับช่องล่างข้อมูลมีขนาดเท่ากัน -_-”) วิธีแก้คือไป override measure() ซะโดยคำนวนขนาดของแต่ละแถวของ List ว่ามีความสูงเท่าไหร่ จับบวกลบคูณหารนิดหน่อยยัดใส่ตัวแปรชื่อ measuredHeight ก็เป็นอันจบ พอไปถึงขั้นถัดไปคือ updateDisplayList มันจะวาดกล่องต่างๆ ตามขนาดที่เรากำหนดใน measuredWidth กับ measuredHeight protected override function measure():void { super.measure()   if (stack.selectedChild == listCanvas) { measuredHeight = titleBar.measuredHeight + list.measureHeightOfItems(0, provider.length + 1) } else { if (providerLength != provider.length || tileRowCount < 0) { providerLength = provider.length tileRowCount = tile.rowCount + 1 }   measuredHeight = titleBar.measuredHeight + tileRowCount * tile.rowHeight } } [...]

]]>
By: llun http://llun.in.th/2008/07/uicomponent/#comment-331 llun Tue, 01 Jul 2008 08:27:34 +0000 http://llun.info/?p=453#comment-331 @iporsut อ่าอ่านสไลด์แล้วละเอียดสุดๆ ~ ~" แต่ผมมั่วไปก่อนเยอะแล้วแฮะ เจอสไลด์นี้อาจแก้ได้เร็วกว่านี้ @iporsut อ่าอ่านสไลด์แล้วละเอียดสุดๆ ~ ~” แต่ผมมั่วไปก่อนเยอะแล้วแฮะ เจอสไลด์นี้อาจแก้ได้เร็วกว่านี้

]]>
By: iporsut http://llun.in.th/2008/07/uicomponent/#comment-330 iporsut Tue, 01 Jul 2008 06:49:01 +0000 http://llun.info/?p=453#comment-330 มีสไดล์อธิบายเรื่องนี้อยู่ครับ ลองดูครับ http://www.axelscript.com/wp-content/360flex.zip มีสไดล์อธิบายเรื่องนี้อยู่ครับ ลองดูครับ
http://www.axelscript.com/wp-content/360flex.zip

]]>