04. april 2001 - 13:35
Der er
7 kommentarer og
1 løsning
Delphi 5 baggrundsbillede
Jeg savner en rutine der kan repeat\'e et billede, der fylder mindre end den form hvor det skal vises. Umiddelbart kan jeg i Delphi kun bruge streched:=True, men det forvrænger billedet.
Hilsen Johnny
04. april 2001 - 13:52
#1
Jeg tror det har noget med billedet at gør... tror ikke det kan fikes... *sorry* ( jeg er IKKE 100% sikker ) hvis du f.eks åbner billedet i en browser og sætter målene til at være det sammen kommer det vel til at se ens ud ik\' ?!
04. april 2001 - 14:35
#3
så må vi skrive et hack ....
burde optimeres, men gidder ikke :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
BitMap : TBitMap;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
BitMap := TBitMap.Create;
BitMap.LoadFromFile(\'task.bmp\');
end;
procedure TForm1.FormPaint(Sender: TObject);
var
xOff,yOff,xSize,ySize : Integer;
bmXSize,bmYSize : LongInt;
ps : PAINTSTRUCT;
wr : TRECT;
bCountX,bCountY,cw,ch : Integer;
begin
BeginPaint(Handle,ps);
wr := GetClientRect();
xOff := 0;
yOff := 0;
xSize := wr.Right;
ysize := wr.Bottom;
bmXSize:=BitMap.Width;
bmYSize:=BitMap.Height;
bCountX:=Trunc((xSize / bmXSize)+1);
bCountY:=Trunc((ysize / bmYSize)+1);
for cw :=0 to bCountX-1 do
for ch:=0 to bCountY-1 do
BitBlt(Canvas.Handle,xOff+(cw*bmXSize),yOff+(ch*bmYSize),bmXSize,bmYSize,BitMap.Canvas.Handle,0,0,SRCCOPY);
EndPaint(Handle,ps);
end;
end.
Jens B
06. april 2001 - 11:13
#5
Borris:
Hvad er din begrundelse til at bruge BeginPaint/EndPaint?
SÅ vidt jeg umiddelbart kan se gør de ingen nytte. I online hjælpen står der endda:
\"An application should not call BeginPaint except in response to a WM_PAINT message.\"
FormPaint er da netop en event der sker som respons til WM_PAINT messages (hvis jeg ellers husker rigtigt).
Peter
06. april 2001 - 11:18
#7
Peter >> Du har fuldstendig ret ..... Den bedste grund jeg har for at bruge BeginPaint/EndPaint : Koden er portet fra noget C++ kode som jeg en gang havde skrevet .. Så portede jeg blot det unde at tænke det helt store ... DET er da en god grund !?!
Jens B