各位大虾:
    请问,在panel上怎样贴一张BMP图?
谢谢!

解决方案 »

  1.   

    放一个image,在上面 将image的对齐属性设为client;
      

  2.   

    好像nicrosoft的书上有一个做新的panel控件。是他可以帖图象的例子
    源码是
    ////////////////////////////////////////////////////////////////////////////////////
    //
    //
    //  FileName    :   ImagePanel.pas
    //  Creater     :   Shen Min
    //  Date        :   2001-10-15
    //  Comment     :
    //
    //
    ////////////////////////////////////////////////////////////////////////////////////
    unit ImagePanel;interfaceuses windows, extctrls, graphics, classes, controls;type
        TImagePanel = class(TCustomPanel)
        private
            FPicture : TPicture;
            FTransparent : Boolean;
            FAutoSize : Boolean;        procedure PictureChanged(Sender: TObject);
            procedure SetPicture(const Value: TPicture);
            procedure SetAutoSize(const Value: Boolean); reintroduce;
            procedure SetTransparent(const Value: Boolean);
            procedure SetFont(const Value : TFont);
            procedure SetCaption(const Value : TCaption);
            procedure SetAlignment(const Value : TAlignment);    protected
            procedure Paint(); override;    public
            constructor Create(AOwner: TComponent); override;
            destructor Destroy(); override;    published
            property Picture : TPicture read FPicture write SetPicture;
            property Transparent : Boolean Read FTransparent Write SetTransparent default false;
            property AutoSize : Boolean Read FAutoSize Write SetAutoSize;        property Font write SetFont;
            property Caption write SetCaption;
            property Alignment write SetAlignment;
        end;procedure Register;implementation{ TImagePanel }constructor TImagePanel.Create(AOwner: TComponent);
    begin
        inherited Create(AOwner);    FPicture := TPicture.Create();
        FPicture.OnChange := PictureChanged;    Repaint();
    end;destructor TImagePanel.Destroy;
    begin
        FPicture.Free();
        FPicture := nil;    inherited;
    end;procedure TImagePanel.Paint;
    const
        Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
    var
        Flags: Longint;
        Rect: TRect;
        FontHeight: Integer;
    begin
        Canvas.Brush.Style := bsClear;
        Canvas.Font := Font;    if Assigned(FPicture.Graphic) then
        begin
            if FAutoSize then
            begin
                Width := FPicture.Width;
                Height := FPicture.Height;
            end;        if FPicture.Graphic.Transparent <> FTransparent then
                FPicture.Graphic.Transparent := FTransparent;
            Canvas.StretchDraw(ClientRect, FPicture.Graphic);
        end
        else
        begin
            Canvas.Brush.Color := Color;
            Canvas.FillRect(ClientRect);
        end;    if Caption <> '' then
        begin
            Rect := GetClientRect;
            FontHeight := Canvas.TextHeight('W');
            Rect.Top := ((Rect.Bottom + Rect.Top) - FontHeight) div 2;
            Rect.Bottom := Rect.Top + FontHeight;        Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[Alignment];
            Flags := DrawTextBiDiModeFlags(Flags);
            DrawText(Canvas.Handle, PChar(Caption), -1, Rect, Flags);
        end;
    end;procedure TImagePanel.PictureChanged(Sender: TObject);
    begin
        RePaint();
    end;procedure TImagePanel.SetAlignment(const Value: TAlignment);
    begin
        inherited Alignment := Value;    Repaint();
    end;procedure TImagePanel.SetAutoSize(const Value: Boolean);
    begin
        FAutoSize := Value;    RePaint();
    end;procedure TImagePanel.SetCaption(const Value: TCaption);
    begin
        inherited Caption := Value;    Repaint();
    end;procedure TImagePanel.SetFont(const Value: TFont);
    begin
        inherited Font := Value;    Repaint();
    end;procedure TImagePanel.SetPicture(const Value: TPicture);
    begin
        FPicture.Assign(Value);    Repaint();
    end;procedure TImagePanel.SetTransparent(const Value: Boolean);
    begin
        FTransparent := Value;    Repaint();
    end;procedure Register;
    begin
        RegisterComponents('Sunisoft', [TImagePanel]);
    end;end.
      

  3.   

    可以采用楼上继承panel控件的方法
      

  4.   

    unit TilePanel;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls;type
      TTilePanel = class(TPanel)
      private
        FTile: TPicture;
        procedure TileChanged(Sender: TObject);
        procedure SetTile(Value: TPicture);
      protected
        procedure Paint; override;
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        property Tile: TPicture read FTile write SetTile;
      end;procedure Register;implementationconstructor TTilePanel.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);  FTile := TPicture.Create;
      FTile.OnChange := TileChanged;
    end;destructor TTilePanel.Destroy;
    begin
      FTile.Free;  inherited Destroy;
    end;procedure TTilePanel.TileChanged(Sender: TObject);
    begin
      Invalidate;
    end;procedure TTilePanel.SetTile(Value: TPicture);
    begin
      FTile.Assign(Value);
    end;procedure TTilePanel.Paint;
    var
      x, y: Integer;
    begin
      inherited Paint;  if (FTile.Graphic <> nil) and (FTile.Width > 0) and (FTile.Height > 0) then
      begin
        y := 0;
        while y < Height do
        begin
          x := 0;
          while x < Width do
          begin
            Canvas.Draw(x, y, FTile.Graphic);
            Inc (x, FTile.Width);
          end;
          Inc (y, FTile.Height);
        end;
      end;
    end;procedure Register;
    begin
      RegisterComponents('Croco', [TTilePanel]);
    end;end.
      

  5.   

    unit TilePanel;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls;type
      TTilePanel = class(TPanel)
      private
        FTile: TPicture;
        procedure TileChanged(Sender: TObject);
        procedure SetTile(Value: TPicture);
      protected
        procedure Paint; override;
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      published
        property Tile: TPicture read FTile write SetTile;
      end;procedure Register;implementationconstructor TTilePanel.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);  FTile := TPicture.Create;
      FTile.OnChange := TileChanged;
    end;destructor TTilePanel.Destroy;
    begin
      FTile.Free;  inherited Destroy;
    end;procedure TTilePanel.TileChanged(Sender: TObject);
    begin
      Invalidate;
    end;procedure TTilePanel.SetTile(Value: TPicture);
    begin
      FTile.Assign(Value);
    end;procedure TTilePanel.Paint;
    var
      x, y: Integer;
    begin
      inherited Paint;  if (FTile.Graphic <> nil) and (FTile.Width > 0) and (FTile.Height > 0) then
      begin
        y := 0;
        while y < Height do
        begin
          x := 0;
          while x < Width do
          begin
            Canvas.Draw(x, y, FTile.Graphic);
            Inc (x, FTile.Width);
          end;
          Inc (y, FTile.Height);
        end;
      end;
    end;procedure Register;
    begin
      RegisterComponents('Croco', [TTilePanel]);
    end;end.
      

  6.   

    看看GDI的资料,其实很简单,不管怎么做,方法万变不离其宗!var Canvas:TCanvas;Canvas:=TCanvas.Create;
    Canvas.Handle:=GetDC(Panel.Handle);Canvas就是对GDI的封装!有时候学学VC处理问题的方法,用起DELPHI来会更加得心应手!
      

  7.   

    用DC画getdc(handle);
    rele***(dc)
      

  8.   

    要在PANEL上贴图,就象CANVAS一样,请举个简单的例子,谢谢