![]() |
Re: Cardinal anstatt Integer?
Wenn man ein eigenes Delay realisieren möchte geht das zum Beispiel so...
Delphi-Quellcode:
Aber warum eine negative Pause zulassen?
procedure Delay(ATime:Integer);
var Start : integer; begin Start := GetTickCount; repeat Application.ProcessMessages; until abs(GetTickCount) - Start > ATime; end; Also besser...
Delphi-Quellcode:
Gruss
procedure Delay(ATime:Cardinal);
var Start : Cardinal; begin Start := GetTickCount; repeat Application.ProcessMessages; until GetTickCount - Start > ATime; end; Thorsten |
Re: Cardinal anstatt Integer?
hallo Shaman,
wieso willst du cardinal verwenden? wenn ich das beispiel von DelphiFreund etwas erweitere kommt folgendes heraus:
Delphi-Quellcode:
var
a: cardinal; b, c: integer; begin a:= 19; c := -3; b := a - c; writeln(b); end. 22 da er den kleineren Wert (hier integer) in den grösseren wert konvertiert, verliert er das vorzeichen. daher spukt der compiler eine fehlermeldung aus. tja, in diesem falle wohl nicht ganz zu unrecht... |
Re: Cardinal anstatt Integer?
Das stimmt nicht ganz. Integer und Cardinal sind gleich groß (32 Bit). Nur der Bereich ist verschoben:
Integer: -2^31 bis +2^31-1 Cardinal: 0 bis 2^32-1 Das heißt praktisch: b bleibt ein Integer. Und wenn a=4000000000 und b=42 sind, dann dürfte es krachen. |
Re: Cardinal anstatt Integer?
Zitat:
Cardinal = 0..2^32-1 Integer = -2^31..2^31-1 Ein Integer ist nichts weiter als ein Cardinal, dessen Bit 31 als Vorzeichenbit "missbraucht" wird. |
Re: Cardinal anstatt Integer?
Argh...
Sorry... Aber an der Grundaussage meines Beitrages ändert sich nichts. |
Re: Cardinal anstatt Integer?
Zitat:
Delphi-Quellcode:
rechnet, weil TrackBar1.Position Integer ist. Bei
GetTickCount - TrackBar1.Position
Delphi-Quellcode:
wird weiterhin die Warnung angezeigt.
GetTickCount - Abs(TrackBar1.Position)
Wenn ich
Delphi-Quellcode:
rechne, tritt der Fehler nicht auf.
Abs(GetTickCount) - TrackBar1.Position
Ich versteh irgendwie nicht, warum. :gruebel: GetTickCount müsste doch vom Typ Cardinal sein. Dann ist Abs(GetTickCount) doch eigentlich das Gleiche wie GetTickCount, weil Abs ja nur das Vorzeichen weglässt (was GetTickCount doch sowieso nicht hat). In der Delphi-Hilfe zu Abs steht außerdem, dass die Zahl in den Klammern Integer oder Real sein muss. Deswegen wunder ich mich, warum ich keinen Inkompatible-Typen-Fehler krieg :gruebel: |
Re: Cardinal anstatt Integer?
Aber Abs gibt nen Integer zurück...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 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-2025 by Thomas Breitkreuz