【问题标题】:How do I show the Windows photo-printing wizard on windows XP?如何在 Windows XP 上显示 Windows 照片打印向导?
【发布时间】:2013-03-27 11:00:21
【问题描述】:

您好,我使用的是Delphi 2010 + Windows XP,您可以在Delphi的Windows XP中调用照片打印向导。

How do I show the Windows photo-printing wizard?

以上提示仅适用于 Windows 7

谢谢。

【问题讨论】:

    标签: windows delphi


    【解决方案1】:

    MSDN 包含示例代码:

    static const CLSID CLSID_PrintPhotosDropTarget = 
      {0x60fd46de, 0xf830, 0x4894, {0xa6, 0x28, 0x6f, 0xa8, 0x1b, 0xc0, 0x19, 0x0d}};
    
    // A data object that contains the list of photos to print.
    IDataObject* pDataObject;
    
    // Create the Photo Printing Wizard drop target.
    CComPtr<IDropTarget> spDropTarget;
    
    hr = CoCreateInstance(CLSID_PrintPhotosDropTarget,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_PPV_ARGS(&spDropTarget));
    
    // Drop the data object onto the drop target.
    POINTL pt = {0};
    DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY;
    
    spDropTarget->DragEnter(pDataObject, MK_LBUTTON, pt, &dwEffect);
    
    spDropTarget->Drop(pDataObject, MK_LBUTTON, pt, &dwEffect);
    

    Delphi 代码是这样的:

    uses
      ActiveX, ComObj;
    
    const
      CLSID_PrintPhotosDropTarget: TGUID = '{60FD46DE-F830-4894-A628-6FA81BC0190D}';
    
    procedure InvokePhotoPrintingWizard;
    var
      Effect: LongInt;
      Position: TPoint;
      DataObject: IDataObject;
      DropTarget: IDropTarget;
    begin
      // create the Photo Printing Wizard drop target
      OleCheck(CoCreateInstance(CLSID_PrintPhotosDropTarget, nil,
        CLSCTX_INPROC_SERVER, IDropTarget, DropTarget));
      // drop the data object onto the drop target
      Position.X := 0;
      Position.Y := 0;
      Effect := DROPEFFECT_LINK or DROPEFFECT_MOVE or DROPEFFECT_COPY;
      OleCheck(DropTarget.DragEnter(DataObject, MK_LBUTTON, Position, Effect));
      OleCheck(DropTarget.Drop(DataObject, MK_LBUTTON, Position, Effect));
    end;
    

    【讨论】:

    • 感谢朋友,因为我传递的文件路径不正确的字符串可以帮助我传递完整路径,例如 C:\photo.jpg 可以创建一个函数,因此 ShowPrinteWizard 程序( aFilePath:字符串);再次感谢您的帮助。
    • 您必须将文件名填充到 IDataObject 中。这超出了这个问题的范围。有关创建实现 IDataObject 的东西的一些建议,请参阅 How can I create a IDataObject instance with Delphi?。您可以自己实现接口,也可以按照the link 的一些示例代码构建文件列表,然后调用GetUIObjectOf 来获取代表所有文件的数据对象。
    • 谢谢朋友,我会尝试,但我知道我做不到,因为它对我来说太先进了,一个大大的拥抱。
    • Hello TLama 不幸的是在 Windows XP 上运行,我如何在 InvokePhotoPrintingWizard 过程中传递文件路径;例如文件下面的路径。 C:\picture.jpeg in Function
    • Wesley,你所要做的就是填写DataObject,我已经给你链接证明了这一点。我知道你说这很难,但生活就是这样。 Windows API 的这个特定部分并非微不足道。坐下,仔细阅读,遇到没见过的功能,咨询一下MSDN,你就学会了。如果您仍然迷路,请在此处发布一个新问题,询问您不了解的特定部分。
    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多