Result in Funktion nicht mehr bekannt ??

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1620
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Result in Funktion nicht mehr bekannt ??

Beitrag von corpsman »

Guten morgen allerseits,

ich versuche gerade die neue SVN Revision (30829) zu Kompilieren

Natürlich habe ich auch eine meiner eigenen Komponenten installiert. Diese kann Lazarus nicht mehr Kompilieren. Genau hängt es an dieser Funktion :

Code: Alles auswählen

Function CursorPosToIndex(Const Text: TStrings; Pos: TPoint): integer;
Var
  i: Integer;
Begin
  result := pos.y - 1;
  For i := 0 To pos.y - 1 Do
    result := result + length(text[i]);
End;
Das Absolut unglaubwürdige für mich. Der Compiler sagt , das er die Variable result nicht kennt.

Wenn ich die Funktion umbaue zu :

Code: Alles auswählen

Function CursorPosToIndex(Const Text: TStrings; Pos: TPoint): integer;
Var
  i, j: Integer;
Begin
  j := pos.y - 1;
  For i := 0 To pos.y - 1 Do
    j := j + length(text[i]);
  CursorPosToIndex := j;
End;
dann kann ich die IDE wieder kompilieren.

Lustigerweise kann ich die Routine inerhalb normaler Projekte problemlos Kompilieren lassen.

Hab ich da etwas verpasst ? Ist das ein BUG ? Kennt ihr diesen Fehler ?
--
Just try it

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Result in Funktion nicht mehr bekannt ??

Beitrag von Socke »

Der Free Pascal Compiler unterstützt verschieden Pascal Dialekte (fpc, objfpc, tp (Turbo Pascal), delphi, macpas) . Dialekte sind in den Grundlagen die selbe Sprache, aber mit unterschiedlichen Features (z.B. Objekte).

Schau mal bitte nach, was in deinen Projekt- bzw. Paket-Einstellungen unter "Compilereinstellungen->Parsen" als "Syntax-Modus" eingestellt ist. Du wirst wahrscheinlich den Modus "objfpc" wollen.
Alternativ/Sicherheitshalber kannst du auch in jede Quelltextdatei die Compiler-Anweisung {$mode objfpc} direkt unter/hinter den Unit-Namen schreiben (hat die gleiche Wirkung, aber nur für diese Datei).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1620
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Result in Funktion nicht mehr bekannt ??

Beitrag von corpsman »

lol du hast Recht, danke.

Normalerweise schreibe ich immer :

Code: Alles auswählen

{$mode ObjFPC}{$H+}
an den Anfang der Datei. Aber meine Lazcomment Komponente ist derart alt, damals wusste ich noch nicht dass es so was gibt ;).

wieder ein Problem gelöst, vielen Dank.

Nachtrag.

Bevor sich einer die Semantik der geposteten Routine ansieht und feststellt das die total den Blödsinn berechnet, hier meine Korrigierte Variante.

Code: Alles auswählen

Function CursorPosToIndex(Const Text: TStrings; Pos: TPoint): integer;
Const
{$IFDEF WINDOWS}
  crtlen = 2;
{$ELSE}
  crtlen = 1;
{$ENDIF}
Var
  i, res: Integer;
Begin
  res := min(length(text[pos.y - 1]), pos.x);
  For i := 0 To pos.y - 2 Do
    res := res + length(text[i]) + crtlen;
  CursorPosToIndex := res;
End;
--
Just try it

Antworten