Error: identifier idents no member 'left' – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Error: identifier idents no member 'left' – Pascal – Fórum – Programujte.comError: identifier idents no member 'left' – Pascal – Fórum – Programujte.com

 

Dane0
Newbie
15. 3. 2013   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 193.85.21.–
Dane0
Newbie
15. 3. 2013   #2
-
0
-

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;

Nahlásit jako SPAM
IP: 193.85.21.–
mjseven0
Návštěvník
15. 3. 2013   #3
-
0
-

A TObrázek je instance nějaké třídy nebo co to je? Přidej sem kód jak a z čeho jsi jej vytvořila.

Nahlásit jako SPAM
IP: 213.151.83.–
Dane0
Newbie
16. 3. 2013   #4
-
0
-

   

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.
Nahlásit jako SPAM
IP: 193.85.21.–
KIIV
~ Moderátor
+43
God of flame
16. 3. 2013   #5
-
0
-

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...)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Dane0
Newbie
16. 3. 2013   #6
-
0
-

#5 KIIV
Jak by to asi mělo vypadat?

Nahlásit jako SPAM
IP: 193.85.21.–
mjseven0
Návštěvník
17. 3. 2013   #7
-
0
-

Uf, to je nějaký divoký.

1. Definice třídy TObrazek patří do sekce interface.
2. Třída TObrazek nemá vlastnosti Left, Top, atd. takže ani správný přístup přes proměnnou "O" ti nepomůže. 
3. Jaké je zadání tohoto úkolu?

Nahlásit jako SPAM
IP: 213.220.235.–
Dane0
Newbie
17. 3. 2013   #8
-
0
-

Vlastně se musím dobelhat k vytvoření jednoduché hry. Zatím se pokuším pochopit, jak rozpohybovat obrázek pomocí šipek na klávesnici.

Nahlásit jako SPAM
IP: 193.85.21.–
mjseven0
Návštěvník
17. 3. 2013   #9
-
0
-

Hra je poměrně široký pojem.Předpokládám, že jde o projekt do školy. Pokud není zadáno, že se musí řešit hra s pohybem postaviček, tak bych být tebou řešil pexeso nebo nějakou deskovou hru. 
 

Nahlásit jako SPAM
IP: 213.220.235.–
Dane0
Newbie
17. 3. 2013   #10
-
0
-

právě, že jde o pohyb postaviček

Nahlásit jako SPAM
IP: 193.85.21.–
mjseven0
Návštěvník
18. 3. 2013   #11
-
0
-

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.)
 

Nahlásit jako SPAM
IP: 213.151.83.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Podobná vlákna

Alternativa k left join? — založil VelkyBubak

Složitější LEFT JOIN — založil David Plšek

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý