2013-09-29 7 views
4

TGraphicControl에 배경 이미지를 추가하려고합니다.TgraphicControl에서 비트 맵으로 jpg 설정

TCard (TGraphicControl의)

Private 
    BitMap1:TBitMap;  {Used to store a card image} 
Public 
    procedure SetBitmap(image: TBitmap); 

...... 양식 1 버튼 클릭에

procedure TCard.SetBitmap(image: TBitmap); 
begin 
    bitmap1 := Tbitmap.create(); 
    bitmap1.Assign(image); 
    canvas.draw(0,0,bitmap1); 
end; 

, 나는 tcard 구성 요소

procedure TForm1.Button1Click(Sender: TObject); 
var 
    image : Tbitmap; 
    jpg: TJpegImage; 
begin 
    image := TBitmap.create(); 
    jpg := Tjpegimage.Create(); 
    jpg.LoadFromFile(dir+'\pics\backcard.jpg'); 
    image.Assign(jpg); 
    card1.setbitmap(image); 
    card1.Repaint; 
    image.Destroy; 
    jpg.Destroy; 
end; 
에 이미지를 추가 할

나는 이것을 실행할 때 아무 일도 일어나지 않는다. 이 이미지를 TCard 구성 요소의 백그라운드로 어떻게 가져 옵니까?

+0

'SetBitmap' 코드는 비트 맵을 생성하고 무언가를 지정합니다. 'bitmap1'은 무엇이고, 어디에서 선언되며, 무엇을합니까? 해당 정보를 포함하지 않았습니다. 또한,'bitmap1'이'TCard'의 속성이라고 가정하면, 이전 내용에 어떤 일이 일어 났습니까? –

+0

bitmap1이 TCard의 비공개로 선언됩니다. 나는 그것을 Tcard의 배경으로 설정하는 방법을 모른다. 네가 말했듯이 지금은 아무것도하지 않는다. 그것을 bitmap1에 할당합니다. –

+0

나는 canvas.draw를 뒤범벅하려고했지만 올바른 방향이라고 생각하지 않았다. 그래서 그것은 비트 맵 1을 할당 한 후에 예제를 남겼습니다.'canvas.draw (0,0, bitmap1);와 같은 것들을 시도했습니다. –

답변

5

여기 TGraphicControl 자손 배경 이미지의 설정 예 및 (이 형태의 OnCreateTBitmap를 사용하고 Button1Click에서 TJpegImage 모두를 입증)을 사용한 예이다. 시작하기 위해 하나의 TButton이있는 새로운 빈 VCL 양식 응용 프로그램 만 있으면됩니다.

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, Jpeg, StdCtrls; 

type 
    TCard = class(TGraphicControl) 
    private 
    FBackGround: TBitmap; 
    procedure SetBackground(Value: TBitmap); overload; 
    public 
    constructor Create(AOwner: TComponent); override; 
    destructor Destroy; override; 
    procedure Paint; override; 
    published 
    property BackGround: TBitmap read FBackGround write SetBackground; 
    end; 

    TForm1 = class(TForm) 
    Button1: TButton; 
    procedure FormCreate(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    FCard: TCard; 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

{ TCard } 

constructor TCard.Create(AOwner: TComponent); 
begin 
    inherited; 
    FBackGround := TBitmap.Create; 
end; 

destructor TCard.Destroy; 
begin 
    FBackground.Free; 
    inherited; 
end; 

procedure TCard.Paint; 
begin 
    inherited; 
    Self.Canvas.StretchDraw(Self.ClientRect, FBackGround); 
end; 

procedure TCard.SetBackground(Value: TBitmap); 
begin 
    FBackGround.Assign(Value); 
    //Self.SetBounds(Left, Top, FBackGround.Width, FBackGround.Height); 
    Invalidate; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Image: TJPEGImage; 
    Bmp: TBitmap; 
begin 
    Image := TJPEGImage.Create; 
    Bmp := TBitmap.Create; 
    try 
    Image.LoadFromFile(PathToSomeJPEGFile); 
    Bmp.Assign(Image); 
    FCard.BackGround := Bmp; 
    finally 
    Bmp.Free; 
    Image.Free; 
    end; 
end; 

procedure TForm4.FormCreate(Sender: TObject); 
var 
    Bmp: TBitmap; 
begin 
    FCard := TCard.Create(Self); 
    FCard.Parent := Self; 
    Bmp := TBitmap.Create; 
    try 
    // Load a standard image from the backgrounds folder (D2007). 
    Bmp.LoadFromFile('C:\Program Files (x86)\Common Files\CodeGear Shared\Images\BackGrnd\GREENBAR.BMP'); 
    FCard.BackGround := Bmp; 
    finally 
    Bmp.Free; 
    end; 
end; 


end. 
+0

정확히 내가 무엇을 찾고 있었는지. 나는 폼과 버튼, 그리고 tcard 컴포넌트를 가지고 있지 않다. 나는 내가 놓친 몇 가지 것을 본다. 지금이 작업을 시도하고 있습니다. –

관련 문제