Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Undeclared identifier (https://www.delphipraxis.net/30566-undeclared-identifier.html)

maximus Caesar 26. Sep 2004 15:38


Undeclared identifier
 
Hallo!
Hab schon die Suchfunktion benutzt, aber keine Lösung gefunden.
Ich versuche eine Eigene komponente zu schreiben, die auf TImage basiert.
Bis jetzt sieht sie folgender maßen aus:


Delphi-Quellcode:
unit ImageMovereg;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;
var x,z:String;
    y,a:Integer;
    zeit1,zeit2:longint;

type
  TImageMove = class(TImage)
  private
        FMoveTo:String;
        FGeschwindigkeit:longint;
        FZahl1:Integer;
        FZahl2:Integer;
        FStatus:Boolean;
    { Private declarations }
  protected
    { Protected declarations }
  public

    { Public declarations }
  published
        property Zahl1 : Integer Read FZahl1 Write FZahl1;
        property Zahl2 : Integer Read FZahl2 Write FZahl2;
        property MoveTo : String Read FMoveTo Write FMoveTo;
        property Geschwindigkeit : longint Read FGeschwindigkeit Write FGeschwindigkeit;
        property Status : Boolean Read FStatus Write FStatus;
    { Published declarations }
  end;

procedure Register;

implementation




procedure Register;
begin
  RegisterComponents('Eigene Komponenten', [TImageMove]);
end;

procedure Move;
begin
a:=0;
x:=FMoveTo;
Delphi-Quellcode:
delete(x,3,999);
z:=FMoveTo;
delete(z,1,2);
y:=StrToInt(z);
if x='t+'then begin
        repeat
        a:=a+1;
        FTop:=FTop-1;
                zeit1:=GetTickCount;
        zeit2:=FGeschwindigkeit;
                repeat
                        Application.Processmessages
                if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
                until (GetTickCount-Zeit1>zeit2)
        if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
        until a>=y;
end;
if x='t-' then begin
        repeat
        a:=a+1;
        FTop:=FTop+1;
                zeit1:=GetTickCount;
        zeit2:=FGeschwindigkeit;
                repeat
                        Application.Processmessages
                if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
                until (GetTickCount-Zeit1>zeit2)
        if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
        until a>=y;
end;
if x='l+'then begin
        repeat
        a:=a+1;
        FLeft:=FLeft-1;
                zeit1:=GetTickCount;
        zeit2:=FGeschwindigkeit;
                repeat
                        Application.Processmessages
                if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
                until (GetTickCount-Zeit1>zeit2)
        if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
        until a>=y;
end;
if x='l-' then begin
        repeat
        a:=a+1;
        FLeft:=FLeft+1;
                zeit1:=GetTickCount;
        zeit2:=FGeschwindigkeit;
                repeat
                        Application.Processmessages
                if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
                until (GetTickCount-Zeit1>zeit2)
        if (GetAsyncKeyState(VK_ESCAPE))<>0 then break;
        until a>=y;
end;

end;
end;



end.

Wenn ich sie jetzt Compiliere erscheint folgende Fehlermeldung:

Delphi-Quellcode:
[Error] ImageMovereg.pas(48): Undeclared identifier: 'FMoveTo'
(Zeile oben rot markiert)

Wie kann ich dafür sorgen, dass ich an dieser Stelle auf die Eigenschaft "MoveTo" zugreifen kann?

PS: Die Absnitte gehören natürlich zusammen, sie sind nur getrennt, um die Zeile Rot zu markieren!

Sanchez 26. Sep 2004 15:46

Re: Undeclared identifier
 
Hallo,

Zitat:

Zitat von maximus Caesar
Delphi-Quellcode:
type
  TImageMove = class(TImage)
  private
        FMoveTo:String;
        FGeschwindigkeit:longint;
        FZahl1:Integer;
        FZahl2:Integer;
        FStatus:Boolean;
    { Private declarations }
  protected
    { Protected declarations }
  public
        procedure Move; <---
  published
        property Zahl1 : Integer Read FZahl1 Write FZahl1;
        property Zahl2 : Integer Read FZahl2 Write FZahl2;
        property MoveTo : String Read FMoveTo Write FMoveTo;
        property Geschwindigkeit : longint Read FGeschwindigkeit Write FGeschwindigkeit;
        property Status : Boolean Read FStatus Write FStatus;
    { Published declarations }
  end;

...

procedure TImageMove.Move;
begin
...
end;
...

Ich habe oben die Prozedur Move in deine Klasse TImageMove verschoben. Vorher war sie eine globale Prozedur, die nichts mit deiner Komponente zu tun hatte.

grüße, daniel

maximus Caesar 26. Sep 2004 15:55

Re: Undeclared identifier
 
Das heißt also, dass ich eine Prozedur (oder eine Funktion), die auf eine Eigenschaft der Komponente zugreift, immer im
public abschnitt ankündigen muss. Oder?
PS: Danke, Daniel! :thumb:

maximus Caesar 26. Sep 2004 16:03

Re: Undeclared identifier
 
Habs jetzt ausprobiert.
Die Fehlermeldung kommt leider weiterhin! :coder2:

Sanchez 26. Sep 2004 16:39

Re: Undeclared identifier
 
Zitat:

Zitat von maximus Caesar
Das heißt also, dass ich eine Prozedur (oder eine Funktion), die auf eine Eigenschaft der Komponente zugreift, immer im
public abschnitt ankündigen muss. Oder?

Nein, eben nicht. Sie muss lediglich zur Klasse gehören. Bei dir war die Prozedur nicht in der Klasse, nur in der selben Unit. Du könntest die Prozedur genauso private, protected oder published definieren. Das ist nur eine Frage der Sichtbarkeit von außen.

Hast du auch auf das "TImageMove." bei der Prozedur-Implementierung geachtet?
Delphi-Quellcode:
procedure TImageMove.Move; <---
begin
...
end;
grüße, daniel

maximus Caesar 26. Sep 2004 16:52

Re: Undeclared identifier
 
Thanks, Daniel :thumb:
Jetzt Funzts!
Noch ne Frage: Wie kann ich auf die Eigenschaften Top und Left zugreifen, die ja beim TImage Standart sind?


HABS RAUS:
self.top
self.left

Einen Fehler gibts noch:
bei
Delphi-Quellcode:
Application.Processmessages
kommt
Delphi-Quellcode:
[Error] ImageMovereg.pas(62): Undeclared identifier: 'Application'
PS: hab ich aus nem Delphi-Buch

Lösung hier!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz