上一篇 | 下一篇

与Mui Dialog Xtra一起使用Imaging Lingo(下)

发布: 2007-1-25 16:19 | 作者: Robert Wingate | 来源: 译自director-online.com | 查看: 87次

  原著:Robert Wingate奥古多媒体dR.C$h6UQG
  翻译:alphachi奥古多媒体;X4DD2|+i"FrAJ

:o8Kd*t*kg   二、输入Imaging Lingo
6{:|E)P!e.jc
3_ y%mHu;O5K   这个程序只需要使用一点Imaging Lingo的知识,因为copyPixels一个函数几乎就可以完成所有的工作。这个函数将一个图像中指定区域的像素复制到另一个图像的指定区域,其中的“区域”既可以是一个rect,也可以是一个quad,此外还可以给复制的像素使用颜色、油墨、混色、抖动和遮罩。copyPixels的语法如下:奥古多媒体 BrPMw*e h9V
  destinationImage.copyPixels (sourceImage, destinationRect, sourceRect {paramList})
_EL)I jRP
*bO3?/xP   让我们来看看UpdateDialogImage是如何使用copyPixels创建空白面板图像的:
r1O`9z4N} v:P7D
_\y$wgYf on UpdateDialogImage ()奥古多媒体6\.z*`[U"b P~
  w = member ("BlankSlate").width奥古多媒体mk9S `O tC
  h = member ("BlankSlate").height
N'JP;`+T(~.s   r = member ("BlankSlate").rect
"Q&D"dBh SMlP -- 1. 在内存中创建一个图像,然后将空白面板演员的图像复制进去奥古多媒体$T.J9k!Q/\?*xQ
  newImage = image (w, h, 16)奥古多媒体Z;~W? t$?CgEd
  newImage.copyPixels (member("BlankSlate").image, r, r)奥古多媒体\ lj9P~
奥古多媒体v0l*a{}~ X
  接着,UpdateDialogImage根据目前单选按钮的状态进行上色:奥古多媒体%t'q qUA%\{

LcE2p+D U~&] -- 2. 使用单选按钮指定的的颜色填充newImage
"v B5v;PAQm!{   rFillArea = r
E7w]9g;m   if (lsWidgetStates.color = "White Background") then
TuYaAQ d6{     newImage.fill (rFillArea, rgb( 255,255,255)) -- white
+Q5fEM:M   else奥古多媒体~Q.}p8Bk}-kY
    newImage.fill (rFillArea, rgb( 180,220,240 )) -- light blue奥古多媒体eJ;vvAh;s)J1Y
  end if 奥古多媒体Si5yx5O;Wp
奥古多媒体z'`5N%Qw)K%}
  如果复选框被选中,则添加相应的图形:奥古多媒体F{y O)?3jtWg ~
奥古多媒体_.l6{%@p1u9[2F-O/p G q
-- 3. 根据复选框的当前状态添加相应的元素
!MPOg_C/^   if lsWidgetStates.publisher then -- Publisher奥古多媒体\ wJ2}c#QA5`M:~#B.J
    CompositeElement( newImage, member ("publisher"), 9, 6 )
.M*fd|gkB/o   end if奥古多媒体*_*b7iV;`/VA\1}9^ q
  if lsWidgetStates.title then -- Title奥古多媒体}%L;kqq7g
    CompositeElement( newImage, member ("bookTitle"), 9, 50 )奥古多媒体&vj#a,i!{?E
  end if
!dS+c2}DA/\
奥古多媒体NyX@n1B.o
  CompositeElement处理程序首先计算出destRect的值,然后将这些像素置于相应的位置。
S7f&f#\+W2l `I
u0D!J4Uk\`M on CompositeElement (imgPtr, mElement, nLft, nTop)奥古多媒体 i7{Wn[,Bwk9Ve
  sourceImage = mElement.image
Pf"cK#|)R6c2_M   destRect = rect (nLft, nTop, nLeft+mElement.width, nTop+mElement.height)
FxL0K @ ^A3_`   imgPtr.copyPixels (sourceImage, destRect,sourceImage.rect, [#ink:1])奥古多媒体kM0}'kM5Y
end
[y@O+DbW b
奥古多媒体6M"t6c\$L4D nRl
  还要注意,和别的对象一样,Lingo通过指针引用图像对象。这意味着如果将一个图像对象作为参数传递给一个函数的话,此函数能够更改这个对象本身,以代替此对象的一个复本。UpdateDialogImage通过指针将这个图像对象传递给了CompositeElement,让其对原始的图像对象进行相应的调整。奥古多媒体el g sXRl
奥古多媒体xsEW.X [0v
  最后,一旦我们完成了图像的合成,还需要将其覆盖存储到对话框使用的位图演员处:奥古多媒体$z*k/q,h+{?3X

Y-F(P^ sYv%r -- 4. 现在更新位图演员
E8]Gp"r%Zxv5M8_   member ("dialogGraphic").image = newImage
;DS_0w#bu+U ~Q:} d
奥古多媒体UR8J(x"YH4EwUJj
  到此为止,我们已经看到了MyDialogCallback是如何判定鼠标在复选框中的点击并保存其状态的,也已经看到了UpdateDialogImage是如何创建一个新的图形并为每个状态为“TRUE”窗口组件调用CompositeElement的。剩下的唯一一步就是在对话框中显示新的图形。
%l)]^NS)p,{%lsQ!V
"s8`'t%@ GZT:_   三、更新对话框图形
Rq3w&Hu
s4] K(iPBT/e   像updateState一样,Mui Dialog Xtra的ItemUpdte命令根据用户交互更新窗口组件,唯一的区别在于它只能处理Mui对话框中窗口组件的变化。幸运的是,Mui Dialog Xtra认为图形也是窗口组件,这意味着能够在对话框运行时对其进行更新。
K1v/{%u5pA3a
0TY%]i%VI1mk   UpdateDialogImage首先调用ItemUpdate命令,此命令的语法如下:奥古多媒体 y U;g!?H3s b
  dialogObject.ItemUpdate (intItemNumber, itemInputPropList)奥古多媒体u%P&X5D}:L
奥古多媒体n/hm5^$WyV4H2}!yN
  ItemUpdate使用属性列表记录需要更新的元素。由于这个图形是用来定义对话框的线性列表中的第18个元素,因此只需先复制并根据指定的名称就可将其传递给ItemUpdate:奥古多媒体Xx?c_j:kac

K+w{+d J&r3@v -- 5. 在对话框中显示合成后的图像 奥古多媒体0O%v0N-{6J8QR%Qb
  lsNewGraphicWidget = lsDialog[18].duplicate()
.Q IW g4[!^DB-bfp5w   lsNewGraphicWidget.value = member ("dialogGraphic") 奥古多媒体S8wU:VQA4jG5N V
  oDialog.ItemUpdate (18, lsNewGraphicWidget)
\6T X]9s;s
奥古多媒体6A'{#uj|Qh/h1G
  四、用途
_ V u2HQ.TnU5~
6^u e^n   大多数应用程序向导和许多打印选项对话框都需要根据对话框的当前设置更新显示内容,而通过与Mui Dialog Xtra一起使用Imaging Lingo,便能够达到这个目的。现在这项技巧已经被广泛用于各种商业程序中。
_&PE3FaqT{]
ttx C3]f2b1` 相关附件

字号: | 推荐给好友

 

评分:0

我来说两句

seccode