identifier not found

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

identifier not found

Beitrag von niederrheiner »

Hallo an Alle,
Ich möchte ein Programm schreiben, wo über Menüeinträge Forms aufgerufen werden.
Das Hauptprogramm sieht wie folgt aus:

Code: Alles auswählen

unit ernaehrung;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Menus, erfass;
 
type
 
  { Tfrmernaehrung }
 
  Tfrmernaehrung = class(TForm)
    btnClose: TButton;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    mnuErfassen: TMenuItem;
    mnuErfassen_Lebensmittel: TMenuItem;
    mnuBeenden: TMenuItem;
    procedure btnCloseClick(Sender: TObject);
    procedure mnuBeendenClick(Sender: TObject);
    procedure mnuErfassen_LebensmittelClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  frmernaehrung: Tfrmernaehrung;
 
implementation
 
{ Tfrmernaehrung }
 
procedure Tfrmernaehrung.btnCloseClick(Sender: TObject);
begin
  frmernaehrung.Close;
end;
 
procedure Tfrmernaehrung.mnuBeendenClick(Sender: TObject);
begin
  frmernaehrung.btnCloseClick(Sender);
end;
 
procedure Tfrmernaehrung.mnuErfassen_LebensmittelClick(Sender: TObject);
begin
  lebensmittel();
end;
 
initialization
  {$I ernaehrung.lrs}
 
end.
Das entsprechende "Unterprogramm" wie folgt

Code: Alles auswählen

unit erfass;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls;
 
type
 
  { TfrmErfassen_Lebensmittel }
 
  TfrmErfassen_Lebensmittel = class(TForm)
    btnclose: TButton;
    procedure btncloseClick(Sender: TObject);
 
  private
    { private declarations }
  public
    { public declarations }
    procedure lebensmittel();
  end; 
 
var
  frmErfassen_Lebensmittel: TfrmErfassen_Lebensmittel;
 
implementation
 
{ TfrmErfassen_Lebensmittel }
 
procedure TfrmErfassen_Lebensmittel.lebensmittel();
begin
  frmErfassen_Lebensmittel.Show;
end;
 
procedure TfrmErfassen_Lebensmittel.btncloseClick(Sender: TObject);
begin
  frmErfassen_Lebensmittel.Close;
end;
 
initialization
  {$I erfass.lrs}
 
end.
Ich habe die Unit "erfass" im Hauptprogramm unter Uses deklariert. Aber die Procedure "lebensmittel" wird nicht gefunden. "identifier not found 'lebensmittel'"

Wenn ich das ganze ohne Form mache, also nur eine Unit, so klappt der Aufruf, Anzeige eines Sendmessage('lebensmittel')

Irgendwo habe ich einen Fehler gemacht, aber wo?

Kann mir jemand helfen?

Bis dann ...
MfG
Günter

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: identifier not found

Beitrag von shokwave »

Hallo,

da die Prozedur "lebensmittel" zur Klasse "TfrmErfassen_Lebensmittel" gehört, musst du das außerhalb der Klasse explizit angeben. Der Aufruf der Prozedur muss also korrekt lauten:

Code: Alles auswählen

TfrmErfassen_Lebensmittel.lebensmittel;
Hoffe das hilft dir weiter.
Schöne Pfingsten!
mfg Ingo

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: identifier not found

Beitrag von Dets »

Hallo Günter,
niederrheiner hat geschrieben: Irgendwo habe ich einen Fehler gemacht, aber wo?

Kann mir jemand helfen?
Ich probier's mal:

Deine Prozedur lebensmittel() ist eine Methode der Klasse TfrmErfassen_Lebensmittel (sie ist in deren Klassenabschnitt deklariert) - um sie aus anderen Objekten aufrufen zu können, musst du die Instanz referenzieren, also:

Code: Alles auswählen

frmErfassen_Lebensmittel.lebensmittel();
have fun,
Dets ...

niederrheiner
Beiträge: 87
Registriert: Sa 19. Jan 2008, 17:21
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Rheinberg

Re: identifier not found(solved)

Beitrag von niederrheiner »

Hallo an Alle,
@shokwave und @Dets,

danke für Eure schnelle Hilfe. Jetzt klappt es so wie ich es mir vorgestellt habe. Problem gelöst

Allseits Frohe Pfingsten

Bis dann ...
MfG
Günter

Antworten