Vytvořila jsem objekt TObrazek, který bych ráda posouvala po ploše Image1 pomocí šipek na klávesnici. Když však spustím program, zobrazí se mi níže uvedená chybová zpráva: Error: identifier idents no member “Left“… Error: identifier idents no member “Top“… Můžete mi vysvětlit, co přesně to hlášení znamená a jak chybu opravit.
Fórum › Pascal
Error: identifier idents no member 'left'
![](img/forum_vlakno_help_vyreseno.png)
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key=VK_LEFT then TObrazek.Left:=TObrazek.Left-1;
if Key=VK_RIGHT then TObrazek.Left:=TObrazek.Left+1;
if Key=VK_UP then TObrazek.Top:=TObrazek.Top-1;
if Key=VK_DOWN then TObrazek.Top:=TObrazek.Top+1;
end;
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
const vk_Left=37;
vk_Right=39;
vk_Up=38;
vk_Down=40;
type
TObrazek = class
obr: TBitmap;
c: TCanvas;
constructor Create(cc: TCanvas);
procedure Kresli;
destructor Destroy; override;
end;
{ TForm1 }
var o: TObrazek;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
o.Kresli;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
o:=TObrazek.Create(Image1.Canvas); o.Kresli;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
);
begin
if Key=VK_LEFT then TObrazek.Left:=TObrazek.Left-1;
if Key=VK_RIGHT then TObrazek.Left:=TObrazek.Left+1;
if Key=VK_UP then TObrazek.Top:=TObrazek.Top-1;
if Key=VK_DOWN then TObrazek.Top:=TObrazek.Top+1;
end;
constructor TObrazek.Create(cc: TCanvas);
begin
c:=cc;
obr:=TBitmap.Create;
obr.LoadFromFile('obrazek.bmp');
obr.Transparent:=true;
end;
procedure TObrazek.Kresli;
begin
c.Draw(0, 0, obr);
end;
destructor TObrazek.Destroy;
begin
obr.Free;
end;
end.
TObrazek je jen datovy typ... pracovat musis s promennou... jestli sem postrehl spravne tak je to "o" (a to jeste mozna ne primo left/top ale pres ten parametr obr...)
Ok, tak potom si dej na form 2 x TImage. Jeden pro pozadí (pojmenuj ho třeba imgBackground) a jeden pro postavičku (pojmenuj ho třeba imgFigure).
Pohyb pak můžeš simulovat změnou souřadnic přes vlastnosti imgFigure.
Pohyb vlevo:
imgFigure.Left := imgFigure.Left - 5;
Pohyb vpravo:
imgFigure.Left := imgFigure.Left + 5;
atd...
Obrázky do těch TImage by mělo jít nahrát přes vlastnost Picture. (Aspoň tak se to jmenuje v Delphi, v Lazarusu to bude nejspíš stejné, nemám ho momentálně k dispozici.)
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Error C2439: member could not be initialized — založil Sarge
Error C2065: undeclared identifier — založil Sarge
Error C3861: 'strcomp': identifier not found — založil Tundra
Alternativa k left join? — založil VelkyBubak
Složitější LEFT JOIN — založil David Plšek
Moderátoři diskuze