Autor Beitrag
Maweki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 197

Ubuntu Linux
Lazarus
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
procedure SetDebugMode(Mode[0..2]: Byte);					

und
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 197

Ubuntu Linux
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 10.10.04 16:53 
Wenn du einen Procedur-Paramter im Wertebereich einschränken willst, musst du erst einen Typ

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 10.10.04 16:56 
Hi,

ich würds mal so probieren:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 197

Ubuntu Linux
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.