Autor Beitrag
jagdfalke
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 26.06.05 19:18 
Hi,
ich suche etwas um eine Variable auf ihren Typ hin zu überprüfen. Ich VB gibts glaub ich
z.B. ne Funktion InStr() die dann true oder false zurückgibt. Gibts sowas für Delphi auch?
mfg
jagdfalke


Moderiert von user profile iconraziel: Topic aus Sonstiges verschoben am So 26.06.2005 um 19:19
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 26.06.05 19:23 
Wenn Du Variants nutzt, dann kannst Du dafür VariantType abfragen.

Ansonsten musst Du die Typebehandlung selbstständig durchführen und jegliche Typecasts selber handhaben.

Schreib aber lieber nochmal etwas genauer, was Du machen möchtest, weil InStr in VB eine Suchfunktion vergleichbar mit Pos unter Delphi ist.

_________________
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.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 26.06.05 20:35 
Willst du also übrprüfen, ob eine Variable vom Typ Integer, Byte, String oder sonst was ist? Oder möchtest du überrpüfen, ob der z.B. im String ein Integer-Wert steht (für diesen Fall nimm IsNumeric)?
jagdfalke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 28.06.05 20:37 
Sry, hatte mich im ersten Post verschrieben. Ich meine IsStr() nicht InStr(). Also ich will prüfen von welchem Typ eine Variable ist.

mfg
jagdfalke
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 28.06.05 21:32 
Hallo,

in Anlehnung an den Beitrag von user profile iconBenBE, meinst Du so etwas?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
var i : Integer;
    v : Variant;
begin
  i:= 2;
  v := i;
  case VarType(v) of
    varEmpty     : showmessage('$0000 Die Variante hat den Status Unassigned.');
    VarNull      : showmessage('$0001 Die Variante hat den Wert Null.');
    VarSmallint  : showmessage('$0002 16-Bit-Integer mit Vorzeichen (Typ Smallint).');
    VarInteger   : showmessage('$0003 32-Bit-Integer mit Vorzeichen (Typ Integer).');
    VarSingle    : showmessage('$0004 Gleitkommawert mit einfacher Genauigkeit (Typ Single).');
    VarDouble    : showmessage('$0005 Gleitkommawert mit doppelter Genauigkeit (Typ Double).');
    VarCurrency  : showmessage('$0006 Gleitkommawert für Währungsbeträge (Typ Currency).');
    VarDate      : showmessage('$0007 Datums-/Zeitwert (Typ TDateTime).');
    VarOleStr    : showmessage('$0008 Referenz auf einen OLE-String (dynamisch verwalteter Unicode-String).');
    VarDispatch  : showmessage('$0009 Referenz auf ein OLE-Automatisierungsobjekt (Zeiger auf IDispatch-Schnittstelle). ');
    VarError     : showmessage('$000A Betriebssystem-Fehlercode.');
    VarBoolean   : showmessage('$000B Boolescher 16-Bit-Wert (Typ WordBool).');
    VarVariant   : showmessage('$000C Variante (nur in Verbindung mit varianten Arrays).');
    VarUnknown   : showmessage('$000D Referenz auf ein unbekanntes OLE-Objekt (Zeiger auf IUnknown-Schnittstelle).');
    VarByte      : showmessage('$0011 8-Bit-Integer ohne Vorzeichen (Typ Byte).');
    VarString    : showmessage('$0100 Referenz auf einen dynamisch verwalteten langen String (Typ AnsiString).');
    VarTypeMask  : showmessage('$0FFF Bitmaske zur Ermittlung des Typencodes.');
    VarArray     : showmessage('$2000 Bit zur Kennzeichnung eines varianten Arrays.');
  else
    showmessage('was anderes');
  end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )


Zuletzt bearbeitet von Lannes am Mi 29.06.05 08:49, insgesamt 1-mal bearbeitet
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Di 28.06.05 21:34 
In Pascal/Delphi weiß man das doch, denn man hat die Variable ja deklariert und ihr einen festen Typ verpasst.
In VB arbeitet man immer mit typenlosen Variablen, weswegen solche Funktionen wie IsStr notwendig sind. Mit Delph hat man aber eine typbehafte Sprache, womit man keinem String so einfach ohne eine Konvertierung einen Integer zuweisen kann. Mit Variants (der "typenlosen Datentyp") sollte man sparsam umgehen, da sie zum einen extrem langsam und zum anderen zu vielen EVariantCast Exceptions führen können, wenn man nicht laufend auf deren Typ Prüft. (VB ignoriert da ja in 60% aller Fälle den "VariantCast"-Fehler und zeigt konvertiert auf teufel komm raus)

_________________
Ist Zeit wirklich Geld?
jagdfalke Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 28.06.05 21:39 
Ja, das ist genau das, was ich suche. Danke.

@AndyB:
Es geht darum, dass mein Microcontroller immer Strings sendet, die z.B. so aussehen: 255:127:100:123
Das sind Positionen von Servos, die ich in einer ProgressBar anzeigen lassen will. Dummerweise ist die Übertragung nicht immer 100% sauber, sodass durch einen Bedienungsfehler schon mal ein Zeilenumbruch oder ähnliches mitgesendet wird. Wenn ich jetzt progressbar1.position := servo_position schreib und die Variable ist nicht 100% vom Typ Integer gibts nen Fehler.

mfg
jagdfalke