Identifier not found "OpenDialog1"

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
rich
Beiträge: 3
Registriert: Mo 4. Aug 2025, 17:33

Identifier not found "OpenDialog1"

Beitrag von rich »

unit1.pas
(267 Bytes) 120-mal heruntergeladen
Bei der Kompilierung des mit-geposteten Test Programmes bekomme ich folgende Fehlermeldung, die ich einfach nicht verstehe bzw. lösen kann:

unit1.pas(31,7) Error: Identifier not found "OpenDialog1"

Lazarus 4.2 auf LinuxMint 21.1

Das TOpenDialog1 - Symbol habe ich auf Form1 gezogen und von dort lässt sich der Dialog anstandslos ausprobieren. Sobald ich mit dem grünen Pfeil das Programm starten will, kommt die Fehlermeldung.

Was habe ich falsch gemacht?

wennerer
Beiträge: 633
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Identifier not found "OpenDialog1"

Beitrag von wennerer »

Hallo,
bei mir funktionert es ohne Probleme (Linux Mint+Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-gtk2). Teste mal das beigefügte Projekt.

Viele Grüße
Bernd
Dateianhänge
project1.zip
(139.02 KiB) 103-mal heruntergeladen

wp_xyz
Beiträge: 5238
Registriert: Fr 8. Apr 2011, 09:01

Re: Identifier not found "OpenDialog1"

Beitrag von wp_xyz »

Schon mal "Start" > "Neu kompilieren" oder gar "Start" > "Aufräumen und kompilieren" probiert?

rich
Beiträge: 3
Registriert: Mo 4. Aug 2025, 17:33

Re: Identifier not found "OpenDialog1"

Beitrag von rich »

Ich scheine etwas nicht richtig gesendet zu haben denn bei wennerer (übrigens danke für Deine Mühe!) fehlt der offenbar schwierige Teil in der kleinen Beispiel-Souce:

Nach

implementation
{$R *.lfm}

// folgt noch:

var filename : string[30];
begin
if OpenDialog1.Execute then
begin
filename := OpenDialog1.Filename;
ShowMessage(filename);
end;

end.



...und dann streikt die IDE mit der Fehlermeldung ... Error: Identifier not found "OpenDialog1"
übrigens nützt es nichts neu zu kompilieren bzw. aufräumen und neukompilieren zu wählen .... was mache ich falsch?

Benutzeravatar
theo
Beiträge: 10967
Registriert: Mo 11. Sep 2006, 19:01

Re: Identifier not found "OpenDialog1"

Beitrag von theo »

Schick mal den ganzen Code (.pas, .lfm, .lpr).
Dein Schnippsel kann nicht funktionieren (end; end.).

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 287
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Identifier not found "OpenDialog1"

Beitrag von h-elsner »

30 Zeichen beim Dateinamen scheint mir etwas gewagte, denn der .FileName enthält auch den Pfadnamen. Nur so nebenbei...

OpenDialog1 wird so nicht erkannte, denn es gehört zu TForm1

Code: Alles auswählen

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.btnTestClick(Sender: TObject);
begin
  if Opendialog1.Execute then begin
    Caption:=OpenDial
  end;
end;

end.
Dies würde dann gehen.

rich
Beiträge: 3
Registriert: Mo 4. Aug 2025, 17:33

Re: Identifier not found "OpenDialog1"

Beitrag von rich »

Jau, Dein Vorschlag geht tatsächlich (h-elsner). Bleibt mir allerdings die Frage: im Objektinspektor wird ja OpenDialog1 wie BitBtn1 zu Form1 gehörig gelistet, aber BitBtn1 wird als Teil von Form1 erkannt und OpenDialog1, dessen Icon auf Form1 direkt daneben steht, wird nicht erkannt. Ich kann das so lernen, aber gibt es dafür eine nachvollziehbare Begründung?Mir scheint das unlogisch.... Trotzdem vielen Dank für die kompetente Hilfe!

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1668
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Identifier not found "OpenDialog1"

Beitrag von fliegermichl »

Ich vermute auch, dass der Zugriff auf Opendialog1 ausserhalb der Form geschieht.

Code: Alles auswählen

type
  TForm1 = class ( TForm )
   Bitbtn1 : TBitBtn;
   Opendialog1 : TOpenDialog;
   procedure BitBtn1Click(Sender : TObject)
  end;
  
 implementation
  procedure Test1;
  begin
   if OpenDialog1.Execute then // Fehler, da Test1 keine Methode von TForm1 ist.
    ...
  end;
  
 procedure TForm1.BitBtn1Click(Sender : TObject);
 begin
  Test1;
  if OpenDialog1.Execute then // Geht, da BitBtn1Click eine Methode von TForm1 ist.
   ...
 end;
 

Antworten