Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konstantenausdruck verletzt untere Grenze (https://www.delphipraxis.net/19926-konstantenausdruck-verletzt-untere-grenze.html)

MagiC_Creator 11. Apr 2004 00:25


Konstantenausdruck verletzt untere Grenze
 
Servus erstma ;)

Hab eine Prozedur geschrieben, die prüft ob die angegebene Auflösungsbreite einen gültigen Wert (640, 720, 800, 1024, 1152 oder 1280) hat und ihn dann dem Feld zuweist. Wenn der Wert ungültig ist soll die Breite 800 verwendet werden. Mein Code sieht folgendermaßen aus:

Delphi-Quellcode:
procedure TSettings.SetResWidth(Value: Integer);
begin
  if Value in [640, 720, 800, 1024, 1152, 1280] then FResWidth := Value
  else FResWidth := 800;
end;
Mein Delphi 7 Personal meckert dann:
[Fehler] Settings.pas(180): Konstantenausdruck verletzt untere Grenze

Ich verstehe nicht warum :?!?

thx & cya :)

Christian Seehase 11. Apr 2004 00:44

Re: Konstantenausdruck verletzt untere Grenze
 
Moin Magic Creator,

in einer Menge darf kein Element den Wert 255 übersteigen, und das tut in Deinem Beispiel jeder.
Als Workaround könntest Du Dir einen Aufzählungstypen erstellen

Delphi-Quellcode:
type
  TRes = (res640,res800, ... );
und eine Konstantentabelle

Delphi-Quellcode:
const
  _iRes : array [TRes] of integer = (640,800,...);
so dass Du die Auflösung auswählen, und dann den Wert direkt aus der Tabelle auslesen kannst.

MagiC_Creator 11. Apr 2004 00:53

Re: Konstantenausdruck verletzt untere Grenze
 
Ah :) thx für die schnelle Antwort!

cya :)

Tiuri 22. Apr 2007 12:22

Re: Konstantenausdruck verletzt untere Grenze
 
ich habe die selbe Fehlermeldung, nur dass bei mir Delphi 3 bei folgendem Code meckert:
Delphi-Quellcode:
i := SizeOf(Data.mappack);
wobei Data so definiert ist:
Delphi-Quellcode:
type
 TBBBobject = record
  Left: Word;
  Top: Word;
  Value: Byte;
 end;
 TBBBdata = record
  version: ShortString;
  mappack: ShortString;
  date: TDateTime;
  resolution: Word;
  width: Word;
  height: Word;
  number: Word;
  objects: array[1..65535] of TBBBobject;
 end;
ich habe auch schon versucht, dass so zu umgehen, aber da kommt wieder die Fehlermeldung:
Delphi-Quellcode:
 s := Data.mappack;
 i := SizeOf(s);

Muetze1 22. Apr 2007 13:04

Re: Konstantenausdruck verletzt untere Grenze
 
Wozu verwendest du überhaupt SizeOf() auf einen ShortString? SizeOf() liefert dir bei einem ShortString eigentlich immer 255 zurück und nicht die Länge der gespeicherten Zeichenkette. Wenn du letzteres willst, dann nutze Length() und nicht SizeOf()...

Hawkeye219 22. Apr 2007 13:11

Re: Konstantenausdruck verletzt untere Grenze
 
Willkommen in der Delphi-PRAXiS, Tiuri!

Hast du die Variable i eventuell mit Hilfe eines Aufzählungstyps vereinbart?

Delphi-Quellcode:
var
  i : 1..65535;
Das würde den Fehler erklären, da die Funktion SizeOf auch den Wert 0 liefern kann, der aber in dieser Variablen nicht mehr abgespeichert werden könnte. Eine Deklaration wie

Delphi-Quellcode:
var
  i : Integer; // oder Cardinal
verhindert in diesem Fall die Fehlermeldung.

Gruß Hawkeye

Tiuri 22. Apr 2007 16:59

Re: Konstantenausdruck verletzt untere Grenze
 
danke erstmal für die schnelle antwort und wie ihr gemerkt habt, ist das jetzt mein erster beitrag.
also, i ist als Byte deklariert, ich hab auch mal Integer probiert, aber daran lag es nicht. Es lag tatsächlich am ShortString. Ich habe einfach alle ShortStrings durch Strings ersetzt und dann hat es funktioniert.
Danke!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.

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