Bitmaps som baggrund

Tags:    delphi
Skrevet af Bruger #123 @ 17.06.2001
Bitmap som baggrund på en form

Denne artikel vil kort gennemgå hvordan man sætter et bitmap ind som baggrund på en form. Den nemme måde som vi sikkert alle samme har prøvet indbefatter en TImage som er sat til at aligne til alClient. Vi ved så sikkert også at det ser faktisk ret dårligt ud, og formen ser ikke særlig godt ud når man flytter eller resizer den.

Man kan derimod sætte et bitmap direkte ind i formens baggrund, og med meget få linier kode sikre sig at dette bitmap følger formen størrelse uden at der er nævneværdig eller synlig forsinkelse eller forstyrrelser.

Man gør som følger :

  • Start med at lave dit bitmap. Hvis du vil bruge et fra internettet, så husk at der kan være copyright på.
  • Start Image Editor som følger med Delphi. Vælg "File|New|Resource File(.res)"
    • Lav et nyt bitmap, ved at højre-klikke på Contents Vælg New|Bitmap. Husk at give det et sigende navn.
    • Du får nu en dialog boks op, hvori du indstiller værdierne for dit bitmap. F.eks. 400 x 300 pixel i 256 farver.
    • Når du er færdig med dit bitmap, så lukker du bitmappet og gemmer .res filen som f.eks. background.res.

Her er mit eksempel bitmap :
Den færdige form

I Delphi starter du nu et nyt projekt. Du skal tilføje følgende :
  • Tilføj din resource fil. Under Implementation skal du tilføje
    {$R background.res}
  • En FormCreate event.
  • En FormDestroy event.
  • En FormResize event.
  • En FormPaint event.
  • En private variable af typen TBitmap. F.eks. BackgroundBitmap : TBitmap;

Selve koden

Nu er vi nået til at vi skal til at kode. Vi starter med koden til FormCreate eventen.
procedure TForm1.FormCreate(Sender: TObject);
begin
  BackgroundBitmap := TBitmap.Create;  // Opret objekt til bitmap
  BackgroundBitmap.LoadFromResourceName(hInstance,'BACKGROUND'); // Indlæs bitmap
  DoubleBuffered := TRUE; // Sørg for at doublebuffering er sat til
end;
I denne del oprettes et objekt til at indholde bitmappet. Dette objekt henter så bitmappet ind fra resource filen.
Endelig sættes formen at benytte Doublebuffering. Dette bevirker at formen gentegner sig selv i hukommelse inden den vises på skærmen. Dette medvirker til at forhindre at skærmbilledet har forstyrrelser under resize/flytning. Prøv at undlade linien og se forskellen.

I FormDestroy skal vi have nedlagt bitmap objektet, så vi rydder pænt op efter os.
procedure TForm1.FormDestroy(Sender: TObject);
begin
  BackgroundBitmap.Free; // Ryd op
end;
I FormPaint tegner vi så bitmappen på formen.
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.StretchDraw(ClientRect, BackgroundBitmap);
  // Tegn bitmap i "stretch", så det fylder hele vinduet
end;
Det vi gør her er at vi strækker bitmappen udover hele ClientArea, altså det område på formen hvor vi kan sætte kontroller og tegne. F.eks. så er titlen baren på en form ikke en del af ClientArea.

Endelig skal vi sørge for at baggrunden på formen bliver gentegnet når vi resizer, så den forbliver pæn. Dette kan gøre på en af to måder, som ses herunder i FormResize.
procedure TForm1.FormResize(Sender: TObject);
begin
// Metode et
  Invalidate;
// Metode to
  Refresh;
// Husk : brug kun den ene af de to.
end;
Der er tilsyneladende ingen forskel på resultatet af de to, men hvis du får problemer med antallet af komponenter på formen, f.eks. at det hele hopper når du gentegner, så prøv at bruge den anden metode.

Det var det

Nu har du så indsat et bitmap i baggrunden på din form. Herfra er det så op til dig at gøre dit program brugbart.

Til slut kan du så se hvordan min lille eksempel form kom til at se ud i færdig tilstand.

Den færdige form


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (0)

Du skal være logget ind for at skrive en kommentar.
t