| Autor |
Beitrag |
Maweki
      
Beiträge: 197
Ubuntu Linux
Lazarus
|
Verfasst: So 10.10.04 16:05
Hallo.
mein Problem. Ich will einer Prozedur eine Zahl übergeben (hier Byte). Aber diese Zahl soll nur die Zahlen 0, 1 oder 2 fassen können.
das war mein erster Versuch
Delphi-Quelltext 1:
| procedure SetDebugMode(Mode[0..2]: Byte); |
und
Delphi-Quelltext 1:
| procedure SetDebugMode(Mode[0..2]); |
auf www.delphi-source.de steht:
| Zitat: | Einen weiteren Datentyp, der eigentlich gar kein eigener Datentyp ist, gibt es noch, nämlich den Teilbereichstyp, auch Unterbereichstyp genannt. Hierüber kann man Variablen z. B. zwar den Typ Integer zuordnen, aber nicht den kompletten Definitionsbereich, sondern nur einen Teilbereich davon:
Delphi-Quelltext 1:
| var kleineZahl: 0..200; | |
ich habs auch schon mit procedure SetDebugMode(Mode: 0..2); versucht
aber die Fehler, die kommen:
die oberen Versuche:
"Missing ParameterType" und der Cursor bleibt bei [|0 stehen
und das untere:
"Identifier expected but Number found -> 0|..
wo is da denn der Fehler, bzw. wie geht das?
Kann mir da einer helfen?
MfG Maweki
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: So 10.10.04 16:44
Ich muss zugeben, dass ich nicht die genauen syntaktischen Möglichkeiten kenne, die es da gibt. Aber was spricht dagegen, den Wert als Byte zu übergeben und einfach in der Funktion die Gültigkeit (0 bis 2) zu überprüfen?
Gruß,
Jörg
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
Maweki 
      
Beiträge: 197
Ubuntu Linux
Lazarus
|
Verfasst: So 10.10.04 16:49
das habe ich mir auch schon überlegt. das ganze soll eine Debugunit wertden.
Das heisst, es gibt drei debugmodi und halt eine einfache Konsolenunterstützung und so...
also irgendwie stelle ich mir die Prüfung schwierig vor, weil man ja die Daten nich wirklich zurückgeben kann und das Handling und so. Naja...
Ich könnte natürlich auch die Modi auf 255 begrenzen.
Das wäre natürlich auch gut. Danke
Prolem erledigt...
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 10.10.04 16:53
Wenn du einen Procedur-Paramter im Wertebereich einschränken willst, musst du erst einen Typ
Delphi-Quelltext 1: 2:
| type TEingeschraenkterParameter = 0..2; |
deklarieren und diesen Typ als Paramter-Typ angeben.
Hinweis: Ohne Bound-Chckes bringt dir das aber trotzdem im Extremfall nix.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 10.10.04 16:56
Hi,
ich würds mal so probieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| type TDebugMode = 0..2;
...
procedure SetDebugMode(DebugMode: TDebugMode); ... |
AXMD
//EDIT: Sorry, BenBE - da war ich wohl etwas langsam 
Zuletzt bearbeitet von AXMD am So 10.10.04 16:57, insgesamt 1-mal bearbeitet
|
|
Maweki 
      
Beiträge: 197
Ubuntu Linux
Lazarus
|
Verfasst: So 10.10.04 16:57
neue Typen zu erstellen war das einzigste, was ich um jeden Preis vermeiden wollte.
Ich machs jetzt nur mit Byte...
da sollte doch der Compiler schon aufpassen, oder?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 10.10.04 20:04
Wenn du Byte nutzt, musst du auf die Ranges selber aufpassen.
Genau das gleiche gilt aber auch, wenn du den Typ verwendet hättest.
Man kann Delphi ohne weiteres austricksen, so dass man auch ungültige Werte dem Parameter hätte zuweisen können. Selbst mit aktivierten Rangechecks. Genau das gleiche gilt bei Deaktivierung dieser, nur, dass es dadurch sogar noch vereinfacht wird.
Sowieso sollte man alle Eingaben einer Procedure auf Sinnhaftigkeit prüfen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|