Belefogtam egy olyan alkalmazás készítésébe, amelynél van egy görgethető kép és ezen lennének a kirajzolandó objektumok. Nem tudom, hogy ez-e a jó módszer ennek megvalósítására, de úgy csinálom, hogy a főablak létrehoz egy új TBitmap-et, amely nagyobb mint az, és ezt a TBitmap-et lehet mozgatni, ennek egy részletét mutatja a főablak a maga FormPaint eseményében.
Nagyon kezdetleges állapotban van még és az a fő gondom vele, hogy amit a TBitmap-on kirajzolok (jelen esetben egy szöveget), az a görgetés során csíkot húz, mintha nem törlődne az előző helyéről.
Rosszul használom az
Invalidate utasítást? Esetleg rossz helyen rajzoltatom ki a szöveget a
palyakep.canvas.textout()-tal?
Íme a kódrészlet:
var
Form1: TForm1;
palyakep: TBitmap;
palyakepx,palyakepy: integer;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
width:=Screen.width;
height:=Screen.height;
palyakep:=TBitmap.Create;
palyakep.SetSize(width*2,height*2);
palyakepx:=0;
palyakepy:=0;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
palyakep.Free;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
);
begin
if Key=VK_LEFT then
begin
if (palyakepx+palyakep.canvas.width)-4>=width then
begin
dec(palyakepx,4);
invalidate;
end;
end;
if Key=VK_RIGHT then
begin
if palyakepx+4<=0 then
begin
inc(palyakepx,4);
invalidate;
end;
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
canvas.draw(palyakepx,palyakepy,palyakep);
palyakep.canvas.textout(palyakepx+(palyakep.canvas.width div 2),20,'Ez itt a közepe.');
end;