مدیریت کنترلهای ActiveX در ارائهها بر روی اندروید
مقدمه
کنترلهای ActiveX در ارائهها استفاده میشوند. Aspose.Slides برای Android از طریق Java به شما امکان افزودن و مدیریت کنترلهای ActiveX را میدهد، اما نسبت به اشکال معمولی ارائه، مدیریت آنها کمی پیچیدهتر است. ما پشتیبانی از افزودن کنترل Active Media Player را در Aspose.Slides پیادهسازی کردهایم. توجه داشته باشید که کنترلهای ActiveX شکل نیستند؛ آنها بخشی از IShapeCollection نیستند. بلکه بخشی از IControlCollection جداگانه هستند. در این موضوع، نحوه کار با آنها را به شما نشان میدهیم.
افزودن کنترل ActiveX پلیر رسانهای به اسلاید
برای افزودن کنترل ActiveX Media Player، این کارها را انجام دهید:
- یک نمونه از کلاس Presentation ایجاد کنید و یک ارائه خالی تولید کنید.
- اسلاید هدف را در Presentation دسترسی پیدا کنید.
- کنترل ActiveX Media Player را با استفاده از متد addControl که توسط IControlCollection ارائه میشود، اضافه کنید.
- به کنترل ActiveX Media Player دسترسی پیدا کنید و مسیر ویدیو را با استفاده از ویژگیهای آن تنظیم کنید.
- ارائه را به عنوان فایل PPTX ذخیره کنید.
این کد نمونه، بر اساس مراحل فوق، نحوه افزودن کنترل ActiveX Media Player به یک اسلاید را نشان میدهد:
// یک نمونه ارائه خالی ایجاد کنید
Presentation pres = new Presentation();
try {
// افزودن کنترل ActiveX پخشکننده رسانه
pres.getSlides().get_Item(0).getControls().addControl(ControlType.WindowsMediaPlayer, 100, 100, 400, 400);
// دسترسی به کنترل ActiveX پخشکننده رسانه و تنظیم مسیر ویدیو
pres.getSlides().get_Item(0).getControls().get_Item(0).getProperties().set_Item("URL", "Wildlife.wmv");
// ذخیره ارائه
pres.save("Output.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
ویرایش یک کنترل ActiveX
برای مدیریت یک کنترل ساده ActiveX مانند جعبه متن و دکمه فرمان ساده در یک اسلاید، این کارها را انجام دهید:
- یک نمونه از کلاس Presentation ایجاد کنید و ارائه را که شامل کنترلهای ActiveX است، بارگذاری کنید.
- یک مرجع اسلاید را بر اساس شاخص آن دریافت کنید.
- کنترلهای ActiveX موجود در اسلاید را با دسترسی به IControlCollection بدست آورید.
- کنترل ActiveX TextBox1 را با استفاده از شیء IControl دسترسی پیدا کنید.
- ویژگیهای کنترل ActiveX TextBox1 که شامل متن، قلم، ارتفاع قلم و موقعیت فریم است را تغییر دهید.
- کنترل دسترسی دوم به نام CommandButton1 را دسترسی پیدا کنید.
- عنوان دکمه، قلم و موقعیت آن را تغییر دهید.
- موقعیت فریمهای کنترلهای ActiveX را جابهجا کنید.
- ارائه اصلاحشده را به یک فایل PPTX بنویسید.
این کد نمونه، بر اساس مراحل فوق، نحوه مدیریت یک کنترل ساده ActiveX را نشان میدهد:
// دسترسی به ارائه با کنترلهای ActiveX
Presentation pres = new Presentation("ActiveX.pptm");
try {
// دسترسی به اولین اسلاید در ارائه
ISlide slide = pres.getSlides().get_Item(0);
// تغییر متن TextBox
IControl control = slide.getControls().get_Item(0);
if (control.getName().equalsIgnoreCase("TextBox1") && control.getProperties() != null) {
String newText = "Changed text";
control.getProperties().set_Item("Value", newText);
// تغییر تصویر جایگزین. PowerPoint این تصویر را هنگام فعالسازی ActiveX جایگزین میکند،
// بنابراین گاهیاوقات میتوان تصویر را بدون تغییر باقی گذاشت.
BufferedImage image = new BufferedImage((int) control.getFrame().getWidth(), (int) control.getFrame().getHeight(),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics graphics = image.getGraphics();
graphics.setColor(SystemColor.window);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
java.awt.Font font = new java.awt.Font(control.getProperties().get_Item("FontName"), java.awt.Font.PLAIN, 16);
graphics.setColor(SystemColor.windowText);
graphics.setFont(font);
graphics.drawString(newText, 10, 20);
graphics.setColor(SystemColor.controlShadow);
graphics.drawLine(0, image.getHeight() - 1, 0, 0);
graphics.drawLine(0, 0, image.getWidth() - 1, 0);
graphics.setColor(SystemColor.controlDkShadow);
graphics.drawLine(1, image.getHeight() - 2, 1, 1);
graphics.drawLine(1, 1, image.getWidth() - 2, 1);
graphics.setColor(SystemColor.controlHighlight);
graphics.drawLine(1, image.getHeight() - 1, image.getWidth() - 1, image.getHeight() - 1);
graphics.drawLine(image.getWidth() - 1, image.getHeight() - 1, image.getWidth() - 1, 1);
graphics.setColor(SystemColor.controlLtHighlight);
graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight());
graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0);
graphics.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(baos.toByteArray()));
}
// تغییر عنوان دکمه
control = pres.getSlides().get_Item(0).getControls().get_Item(1);
if (control.getName().equalsIgnoreCase("CommandButton1") && control.getProperties() != null) {
String newCaption = "Show MessageBox";
control.getProperties().set_Item("Caption", newCaption);
// تغییر جایگزین
BufferedImage image = new BufferedImage((int) control.getFrame().getWidth(), (int) control.getFrame().getHeight(),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics graphics = image.getGraphics();
graphics.setColor(SystemColor.control);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
java.awt.Font font = new java.awt.Font(control.getProperties().get_Item("FontName"), java.awt.Font.PLAIN, 16);
graphics.setColor(SystemColor.windowText);
graphics.setFont(font);
FontMetrics metrics = graphics.getFontMetrics(font);
graphics.drawString(newCaption, (image.getWidth() - metrics.stringWidth(newCaption)) / 2, 20);
graphics.setColor(SystemColor.controlLtHighlight);
graphics.drawLine(0, image.getHeight() - 1, 0, 0);
graphics.drawLine(0, 0, image.getWidth() - 1, 0);
graphics.setColor(SystemColor.controlHighlight);
graphics.drawLine(1, image.getHeight() - 2, 1, 1);
graphics.drawLine(1, 1, image.getWidth() - 2, 1);
graphics.setColor(SystemColor.controlShadow);
graphics.drawLine(1, image.getHeight() - 1, image.getWidth() - 1, image.getHeight() - 1);
graphics.drawLine(image.getWidth() - 1, image.getHeight() - 1, image.getWidth() - 1, 1);
graphics.setColor(SystemColor.controlDkShadow);
graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight());
graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0);
graphics.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(baos.toByteArray()));
}
// جابهجایی 100 پوینت به سمت پایین
for (IControl ctl : pres.getSlides().get_Item(0).getControls()) {
IShapeFrame frame = ctl.getFrame();
ctl.setFrame(new ShapeFrame(frame.getX(), frame.getY() + 100,
frame.getWidth(), frame.getHeight(), frame.getFlipH(), frame.getFlipV(), frame.getRotation()));
}
pres.save("withActiveX-edited_java.pptm", SaveFormat.Pptm);
// حذف کنترلها
pres.getSlides().get_Item(0).getControls().clear();
pres.save("withActiveX-cleared_java.pptm", SaveFormat.Pptm);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
سؤالات متداول
آیا Aspose.Slides کنترلهای ActiveX را هنگام خواندن و ذخیره مجدد حفظ میکند اگر نتوانند در زمان اجرا Java اجرا شوند؟
بله. Aspose.Slides آنها را به عنوان بخشی از ارائه در نظر میگیرد و میتواند ویژگیها و فریمهای آنها را بخواند/ویرایش کند؛ اجرای خود کنترلها برای حفظ آنها لازم نیست.
کنترلهای ActiveX چگونه با اشیاء OLE در یک ارائه متفاوت هستند؟
کنترلهای ActiveX کنترلهای تعاملی مدیریتشده هستند (دکمهها، جعبههای متن، پخشکننده رسانه)، در حالی که OLE به اشیاء برنامهنویسی داخلی (مثلاً یک شیت کاری Excel) اشاره دارد. اینها بهصورت متفاوتی ذخیره و مدیریت میشوند و مدل ویژگیهای متفاوتی دارند.
آیا رویدادهای ActiveX و ماکروهای VBA در صورتی که فایل توسط Aspose.Slides اصلاح شود، کار میکنند؟
Aspose.Slides نشانگذاری و متادیتای موجود را حفظ میکند؛ با این حال، رویدادها و ماکروها فقط در PowerPoint در ویندوز و زمانی که امنیت اجازه دهد اجرا میشوند. این کتابخانه VBA را اجرا نمیکند.