兄弟,我是个过路人,哎……,早知DELPHI高手少,你何不投入我们VC/C++门下,前途无量啊,不过现在也不晚,我们那儿可高手如云,快来吧!

解决方案 »

  1.   

    Delphi 的高手非要回答你的问题吗?
    不回答就不是高手吗?
    高手有回答简单问题的吗?
    好好想想吧,别把高手们得罪了!
      

  2.   

    OleContainer1.CreateObjectFromFile(...);
    OleContainer1.DoVerb(ovShow);
      

  3.   

    好象不对吗?执行后能否不出现编辑模式?我觉得olecontainer控件背景颜色总是该不掉.
      

  4.   

    真搞不懂,你有没有了解olecontainer控件,看看HELP就OK了,这么简单的问题,也不怕丢人
      

  5.   

    承蒙sulin010(苏林)将中国软件业的重担防在我们delphi阵营,
    别的阵营会吐血的!!!!
      

  6.   

    procedure TOleContainer.Paint;
    var
      W, H: Integer;
      S: TPoint;
      R, CR: TRect;
      Flags: Integer;
    begin
      if FDocObj and FUIActive then Exit;
      CR := Rect(0,0,Width,Height);
      if FBorderStyle = bsSingle then
      begin
        if NewStyleControls and Ctl3D then
          Flags := BF_ADJUST or BF_RECT
        else
          Flags := BF_ADJUST or BF_RECT or BF_MONO;
      end
      else
        Flags := BF_FLAT;  Canvas.Brush.Style := bsSolid;
      Canvas.Brush.Color := clWhite;
      DrawEdge(Canvas.Handle, CR, EDGE_SUNKEN, Flags or BF_MIDDLE);
      if FOleObject <> nil then
      begin
        W := CR.Right - CR.Left;
        H := CR.Bottom - CR.Top;
        S := HimetricToPixels(FViewSize);
        if (FDrawAspect = DVASPECT_CONTENT) and (FSizeMode = smScale) then
          if W * S.Y > H * S.X then
          begin
            S.X := S.X * H div S.Y;
            S.Y := H;
          end else
          begin
            S.Y := S.Y * W div S.X;
            S.X := W;
          end;
        if (FDrawAspect = DVASPECT_ICON) or (FSizeMode = smCenter) or
          (FSizeMode = smScale) then
        begin
          R.Left := (W - S.X) div 2;
          R.Top := (H - S.Y) div 2;
          R.Right := R.Left + S.X;
          R.Bottom := R.Top + S.Y;
        end
        else if FSizeMode = smClip then
        begin
          SetRect(R, CR.Left, CR.Top, S.X, S.Y);
          IntersectClipRect(Canvas.Handle, CR.Left, CR.Top, CR.Right, CR.Bottom);
        end
        else
          SetRect(R, CR.Left, CR.Top, W, H);
        OleDraw(FOleObject, FDrawAspect, Canvas.Handle, R);
        if FObjectOpen then ShadeRect(Canvas.Handle, CR);
      end
    {    注意一下部分                              }
      else begin                  //none object
        Canvas.Brush.Color := clWhite ;
        Canvas.Brush.Style := bsSolid ;
        Canvas.FillRect(rect(0,0,Width,Height)) ;
      end ;
      if FFocused then Canvas.DrawFocusRect(CR);
    end;
      

  7.   

    将unit OleCtnrs修改后,赋值一份到Lib目录中,然后选Build All。
    不过目前只是将Olecontainer的初始背景设为白色,添加完之后背景要显示白色我在试试。
    其他兄弟有没有更好的办法?
      

  8.   

    解决了,在刚才的Paint过程中把DrawEdge函数屏蔽掉就可以了。咦,人呢?不给分了?
      

  9.   

    呵呵,没关系了,我来这里不是拿分的,主要是看看弟兄们。
    我不是高手,这里比我高的手很多。
    另外,以后可不要真么写了,有的高手最讨厌别人这么写,说不定最后适得其反,反而没人回答了。
    上面几句,虽然是催分,因为是CSDn规定不许只写“关注”之类的,否则属于“灌水”,所以就多写几句了,^_^
      

  10.   

    呵呵,不好意思,我又把简单问题复杂话了。
    其实在Form的OnCreate事件里(Onshow或其他的事件也行)
    写上:stole.Ctl3d := False 就行了。