最好附上源码!
急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!

解决方案 »

  1.   

    这是我临时写的,d5下测试通过:
    1,新建一个工程
    2,放上2个Label,和1个Button将Unit1全部替换以下代码:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  {获得flash影片的宽度和高度的函数组群的定义}
      TSWFParser = class
      private
        SWFBuffer: DWORD;
        SWFBufPos: Integer;
        SWFFile:   TFileStream;
        procedure InitBuffer();
        procedure GetByte();
        function GetBits(n:Integer):DWORD;
        function GetSBits(n:Integer):Longint;  public
        function GetSWFRect(FileName:String):TRect;
      end;var
      Form1: TForm1;implementation{$R *.DFM}{读取影片的宽度和高度的函数群}
    procedure TSWFParser.InitBuffer;
    begin
      SWFBuffer:=0;
      SWFBufPos:=0;
    end;procedure TSWFParser.GetByte();
    var
      b:Byte;
    begin
      SWFFile.Read(b, 1);
      SWFBuffer:=b;
      SWFBufPos:=8;
    end;function TSWFParser.GetBits(n: Integer): DWORD;
    var
      s:Integer;
      v:DWORD;
    begin
      v:=0;
      while true do
      begin
        s:=n-SWFBufPos;
        if s>0 then
        begin
          v:=v or (SWFBuffer shl s);
          n:=n-SWFBufPos;
          GetByte;
        end
        else
        begin
          v:=v or (SWFBuffer shr -s);
          SWFBufPos:=SWFBufPos-n;
          SWFBuffer:=SWFBuffer and ($ff shr (8-SWFBufPos));
          break;
        end;
      end;
      Result:=v;
    end;function TSWFParser.GetSBits(n: Integer): Longint;
    var
      v: Integer;
      l: Longint;
    begin
      v:=Longint(GetBits(n));
      l:=1;
      if(v and (l shl (n-1))<>0) then
      begin
        l:=-1;
        v:=v or (l shl n);
      end;
      Result:=v;
    end;function TSWFParser.GetSWFRect(FileName:String):TRect;
    var
      r: TRect;
      nBits: Integer;
      SwfFileSize: Cardinal;
    begin
      SWFFile:=TFileStream.Create(FileName,fmOpenRead);
      if ExtractFileExt(FileName) = '.exe' then
      begin
        SWFFile.Seek(- 2 * sizeof(integer), soFromEnd);
        SWFFile.ReadBuffer(SwfFileSize, sizeof(integer));
        SWFFile.ReadBuffer(SwfFileSize, sizeof(SwfFileSize));
        SWFFile.Seek(- SwfFileSize - 2 * sizeof(integer), soFromEnd);
      end;
      SWFFile.Seek(8, soFromCurrent);
      InitBuffer();
      nBits:=GetBits(5);
      r.Left:=GetSBits(nBits);
      r.Right:=GetSBits(nBits);
      r.Top:=GetSBits(nBits);
      r.Bottom:=GetSBits(nBits);
      SWFFile.Free;
      Result:=r;
    end;//结束{按钮点击事件}
    procedure TForm1.Button1Click(Sender: TObject);
    var
      SWFRect: TRect;
      p: TSWFParser;
    begin
      p:=TSWFParser.Create;
      SWFRect:=p.GetSWFRect('F:\aaa.swf');//这里swf和exe文件都可以
      Label1.Caption := IntToStr((SWFRect.Right-SWFRect.Left) div 20); //影片宽度
      Label2.Caption := IntToStr((SWFRect.Bottom-SWFRect.Top) div 20); //影片高度
      p.Free;
    end;end.