![]() |
Identifier not found -- Wo steckt der Fehler
Hallo zusammen,
Ich bin neu in diesem Forum, daher packt diesen Threat bitte an eine andere Stelle, wenn die aktuelle platzierung nicht passt.# Auch bin ich neu in Pascal und daher wird dies bestimmt ein ,Aanfängerfehler sein, wo ihr euch denkt och man ist der doooooof :lol: (Bitte seht über diese Felerchen hinweg. Zu meinem Compiler: Ich benutze Lazarus (hoffe ich bin hier im Delphi-Forum richtig) und es ist mein aller erstes Projekt damit. So genug gequatsch hier kommt der Code:
Delphi-Quellcode:
Jetzt zum Problem: In Zeile 63 also in der Fallunterscheidung zeigt er mir "Indentifier not found "Hintergrund"" an. So wie ich Pascal bis jetzt verstehe hab ich das doch aber oben denfiniert :?: .
unit DetektivwalterKohl;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons; type { TForm1 } TForm1 = class(TForm) Hintergrund: TSpeedButton; RechterPfeil: TSpeedButton; LinkerPfeil: TSpeedButton; StartKnopf: TSpeedButton; StartBildschirm: TSpeedButton; procedure LinksPfeilKlick(Sender: TObject); procedure Start(Sender: TObject); procedure StartBildschirmClick(Sender: TObject); procedure StartClick(Sender: TObject); procedure WelcherHintergrund(HintergrundZaehler:Integer); private public end; var Form1: TForm1; HintergrundZaehler : Integer; implementation {$R *.lfm} { TForm1 } procedure TForm1.StartBildschirmClick(Sender: TObject); begin HintergrundZaehler := 100 ; StartBildschirm.Glyph.loadfromfile('Startbildschirm.bmp'); // wechsel Bild zu TrippleD-production StartKnopf.Visible := True; end; procedure TForm1.Start(Sender: TObject); begin end; procedure TForm1.LinksPfeilKlick(Sender: TObject); begin HintergrundZaehler := HintergrundZaehler +1 ; WelcherHintergrund(HintergrundZaehler); end; procedure WelcherHintergrund(HintergrundZaehler:Integer); begin if HintergrundZaehler = 99 then; Hintergrund.Glyph.loadfromfile('99.bmp'); end; procedure TForm1.StartClick(Sender: TObject); begin Hintergrund.Visible := True; RechterPfeil.Visible := True; LinkerPfeil.Visible := True; StartKnopf.Visible := False; StartBildschirm.Visible := False; end; end. Ich hoffe jemand kann mir helfen und ich kann das Programm fertigmachen. Für eure Mühe und Zeit schon eimal vielen Dank. Schönen Tag euch Schwalbe.Pilot PS.: Das Programm wir ein Spiel, genauer gesagt ein PointAndClickAdventuere, wenn ihr dafür weitere Tipps habt, ich nehme sie immer gerne :-D |
AW: Identifier not found -- Wo steckt der Fehler
Willkommen...:dp:
Delphi-Quellcode:
procedure WelcherHintergrund(HintergrundZaehler:Integer);
begin if HintergrundZaehler = 99 then; // das ; ist zu viel :-) Hintergrund.Glyph.loadfromfile('99.bmp'); end; |
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
An dem ; liegt es leider nicht, das hab ich da hin gesetzt um zu testen, ob es funktioniert.:( Denn mir wurde mal gesagt das die meisten fehler mit dem fehlenden ';' zusammenhängen.:? |
AW: Identifier not found -- Wo steckt der Fehler
Im Methodenkopf fehlt das "TForm1." vor dem Methodenname.
So ist es nur eine Prozedur, die nichts mit dem Formular und den Komponenten darauf zu tun hat. Dementsprechend kennt er den Hintergrund auch nicht. Ach ja: Das Semikolon hinter dem "then" muss trotzdem/auch weg |
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
Dankeschön :thumb: Auf sowas sind wir zu dritt nach 2 Stunden suchen nicht gekommen :lol: Ist das ein typische Anfängerfehler? Auf jeden Fall danke für die Hilfe. Ps: Ich lasse den Threat mal offen, falls noch solche Fehler kommen. :stupid: |
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
Mich wundert nur, dass dein Compiler keinen Fehler gemeldet hatte, da du oben die procedure bereits bekannt gemacht, sie aber nicht implementiert hattest. (Weil das TForm1 fehlte) Zitat:
|
Dieses Thema wurde am "31. Jan 2019, 10:41 Uhr" von "Luckie" aus dem Forum "Programmieren allgemein" in das Forum "Object-Pascal / Delphi-Language" verschoben.
|
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
Wenn das Bild im EXE-Ordner ist kannst du mit ParamStr(0) bzw. Application.Exename darauf zugreifen.
Delphi-Quellcode:
// Pfad + Dateiname der EXE ermitteln (z. B. C:\Programme\meineapp.exe)
FileName := Application.ExeName; // ODER FileName := ParamStr(0); // Den Pfad aus FileName extrahieren. Ergibt dann C:\Programme\ Path := ExtractFilePath(FileName);
Delphi-Quellcode:
Wenn du den Pfad zu anderen Verzeichnissen ermitteln möchtest, kannst du die Funktionen SpecialDirectory, SHGetFolderPath oder GetKnownFolderPath verwenden. Diese geben dann Pfade wie z. B. Windows-Ordner, Video-Ordner, .... zurück.
procedure WelcherHintergrund(HintergrundZaehler:Integer);
var FileName: String; Path: String; begin FileName := Application.ExeName; Path := ExtractFilePath(FileName); if HintergrundZaehler = 99 then; Hintergrund.Glyph.loadfromfile(Path + '99.bmp'); end;
Delphi-Quellcode:
function GetSpecialDirectory(ACSIDL: Integer; AHandle: Cardinal = 0): String;
const SHGFP_TYPE_CURRENT = 0; var APIResult: HRESULT; Buffer: Array[0 .. MAX_PATH - 1] of WCHAR; begin Result := ''; APIResult := SHGetFolderPathW(AHandle, ACSIDL, 0, SHGFP_TYPE_CURRENT, Buffer); if APIResult = S_OK then begin Result := WideString(Buffer); Result := IncludeTrailingPathDelimiter(Result); Result := Trim(Result); end; end;
|
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
Wichtiger finde ich jetzt dass er Spass dabei hat und der Lehrer zufrieden ist. :wink: Wenn man dagegen eine ernsthafte Anwendung macht, dann muss man sich um das (u.v.a.m.) auch kümmern. |
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
Und ParamStr(0) vor seinen Dateiname einzufügen ist ja nicht wirklich schwierig. GetSpecialDirectory, etc. sind für einen Anfänger tatsächlich nichts. Da stimme ich dir zu. |
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
Das sieht ganz schön kompliziert aus:shock: Für das aktuelle Projekt wrde ich dies wohl nicht mehr brauchen, denn hier sollte sich ja eigentlich nichts verschieben. Zu dem Verfahren an sich habe ich jetzt aber noch eine Frage, wie läuft das ab, wenn ich den gesamten Ordner verschiebe? Passt das dann noch, oder muss man dann alles neu abändert? :?: Danke aus jeden Fall für die Anregung Schönen abend Schwalbe Pilot |
AW: Identifier not found -- Wo steckt der Fehler
Zitat:
ParamStr(0) enthält den Pfad der EXE. Würde sich das Verzeichnis während der Laufzeit ändern würde ParamStr(0) natürlich nicht mehr stimmen bis das Programm neugestartet wurde. Also Programm beenden, aus dem neuen Ordner starten und dein ParamStr(0) stimmt wieder. Allerdings lässt sich der Ordnername bzw. die gesamte Verzeichnis-Struktur sowieso nicht ändern während das Programm läuft. Aber der Dateinamen der Anwendung lässt sich während der Laufzeit ändern (Windows Explorer, F2 drücken, EXE-Name ändern). Soweit ich informiert bin zeigt ParamStr(0) weiterhin auf den alten Dateinamen. Ein Neustart des Programms ist also nötig oder du verwendest den neuen Namen der EXE ohne auf ParamStr(0) zurückzugreifen. Den neuen Namen musst du natürlich erstmal ermitteln. Siehe unten. Wenn sich spezielle Windows Verzeichnisse ändern, Z. B. Eigene Bilder zeigt GetSpecialDirectory(und die anderen Win-Funktionen) auf den neuen Pfad. Auch ohne neustart der EXE. Wenn sich ein anderes Verzeichnis ändert (z. B. D:\Meine Sachen\Rechnung.pdf) bekommt das Programm das standardmäßig nicht mit. Es gibt aber Komponenten und Codes die prüfen ob sich was im Datei-System ändert und anschließend das laufende Programm über Änderungen benachrichtigen (siehe FileChangeNotifier). Im Demo-Ordner von Delphi sind Shell/Explorer-Komponenten enthalten die du installieren könntest. Diese bestehen aus einem Datei/Ordner-Liste/Baumstruktur/ComboBox und enthalten auch einen ChangeNotifier. Allerdings sind die Komponenten nicht so der Hit... |
AW: Identifier not found -- Wo steckt der Fehler
Naja wenn ich einfach den Ordner den ich für das Programm habe, nehme und auf einen anderen PC tue. Dann ändert sich das Verzeichnis.
Mit deiner Erklärung hab ich jetzt verstanden das es kein Problem ist.:thumb: Das ist super. Danke die Hilfe. Und einen schönen Tag noch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 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 by Thomas Breitkreuz