起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 380|回复: 10

delphi代码怎么转换到X3里面?**

[复制链接]
发表于 2009-3-5 11:11:33 | 显示全部楼层 |阅读模式
这是Delphi代码
procedure TForm1.Button1Click(Sender: TObject);
Var
  FExcel :OleVariant; //excel应用程序
  FWorkBook :OleVariant; //工作表
  FWorksheet:OleVariant; //工作薄
  FPicture:OleVariant;
  TmpStr:String;
begin
  FExcel:= CreateoleObject( 'excel.Application');
  FWorkBook:=FExcel.WorkBooks.Add; //新的工作表
  FWorksheet:=FWorkBook.Worksheets[1];
  FWorksheet.Select;

  //插入图象并设置位置与大小
  tmpstr:= 'D:\1.jpg';
  FPicture:=FWorksheet.Pictures.Insert(tmpstr);
  FPicture.Left:=10;
  FPicture.Top:=10;
  FPicture.width:=200;
  FPicture.height:=200;
  FPicture:=null;
  FExcel.visible:=true;
end;
回复

使用道具 举报

 楼主| 发表于 2009-3-5 11:13:34 | 显示全部楼层
下面是我参考论坛写的代码
procedure TTPDCZCT.btnExportClick(Sender: TObject);
var
  o: object;
  app, Workbooks, sheet,FPicture,FPictures: DispatchHelper;
  sFileName:string;
begin
  inherited;
  if SaveDialog1.Execute then
  begin
    sFileName:=SaveDialog1.FileName;
    DataGrid1.SaveToXLS(sFileName,true);
    o := ComObj.CreateOleObject('Excel.Application');
    app := DispatchHelper.Create(o);
    app.PropertyPut('Visible', [true]);
    Workbooks := DispatchHelper.Create(app.PropertyGet('Workbooks', []));
    sheet := DispatchHelper.Create(Workbooks.InvokeMethod('Open', [sFileName]));
    sheet.InvokeMethod('Activate', []);
    FPictures:=DispatchHelper.Create(sheet.PropertyGet('Pictures', []));
    FPicture:=DispatchHelper.Create(FPictures.InvokeMethod('Insert', ['D:\1.jpg']));
    FPicture.PropertyPut('Left', [10]);
    FPicture.PropertyPut('Top', [10]);
    FPicture.PropertyPut('width', [200]);
    FPicture.PropertyPut('height', [200]);
  (o as System.IDisposable).Dispose;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-5 11:15:15 | 显示全部楼层
运行到这句报错:
FPictures:=DispatchHelper.Create(sheet.PropertyGet('Pictures', []));
回复 支持 反对

使用道具 举报

发表于 2009-3-5 11:26:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2009-3-5 11:32:01 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-12 09:42:19 | 显示全部楼层
这是一段关于从文件流判断图片格式的代码。
procedure TForm1.Button1Click(Sender: TObject); //Button1的单击事件
var   //声明变量
   MyImage:TMemoryStream;   //内存流对象
   Buffer:Word;
   i:integer;
begin
   if OpenDialog1.Execute then   //OpenDialog1是一个文件打开对话框,在Delphi组件面版的Dialog页中可以找到。
   begin
     MyImage:=TMemoryStream.Create; //建立内存流对象

try
     MyImage.LoadFromFile(OpenDialog1.FileName); //把刚刚用户选择的文件载入到内存流中
     MyImage.Position := 0;   //移动指针到最开头的位置
     if MyImage.Size = 0 then   //如果文件大小等于0,那么
     begin
       //错误
       ShowMessage('错误');
       Exit;
     end;
     MyImage.ReadBuffer(Buffer,2); //读取文件的前2个字节,放到Buffer里面

     if Buffer=$4D42 then //如果前两个字节是以4D42[低位到高位]
     begin
       ShowMessage('BMP'); //那么这个是BMP格式的文件
     end
     else if Buffer=$D8FF then //如果前两个字节是以D8FF[低位到高位]
    begin
         //JPEG
       ShowMessage('JPEG'); //........一样 下面不注释了
     end
     else if Buffer=$4947 then
     begin
         //GIF
       ShowMessage('GIF');
     end
     else if Buffer=$050A then
     begin
         //PCX
       ShowMessage('PCX');
     end
     else if Buffer=$5089 then
     begin
         //PNG
       ShowMessage('PNG');
     end
     else if Buffer=$4238 then
     begin
        //PSD
       ShowMessage('PSD');
     end
     else if Buffer=$A659 then
     begin
        //RAS
       ShowMessage('RAS');
     end
     else if Buffer=$DA01 then
     begin
         //SGI
       ShowMessage('SGI');
     end
     else if Buffer=$4949 then
     begin
         //TIFF
       ShowMessage('TIFF');
     end
     else   //如是其他类型的文件的话,直接显示错误
     begin
         //ERR
       ShowMessage('ERR');
     end; //if
   end; //if

finally

MyImage.Free;   //释放内存流对象

end;
end;

很郁闷的是在X3里面的ReadBuffer返回的是Object,麻烦告知一下要怎么转换
X3:
procedure ReadBuffer(Buffer: TObject; Count: Longint);
Delphi:
procedure ReadBuffer(var Buffer; Count: Longint);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-12 09:46:53 | 显示全部楼层
或者是告知一下怎么判断图片格式也行
回复 支持 反对

使用道具 举报

发表于 2009-3-12 10:32:45 | 显示全部楼层
楼主,我建议你用delphi做一个第三方控件的方式,引入到平台中来吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-12 10:48:05 | 显示全部楼层
我想问一下二进制流字段显示形式设成图像,运行时在图像上点右击另存为,在另存为的对话框里面默认的保存类型是怎么判断的?
回复 支持 反对

使用道具 举报

发表于 2009-3-12 11:29:04 | 显示全部楼层
稍等,正在处理。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-24 11:53 , Processed in 0.042781 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表