Toon posts:

[Delphi] StrLen met OleVariant

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik lees data in via het ActiveX component MSComm. Om de 500 mSec wordt de functie SendKeys aangeroepen die eventuele data naar Kladblok wegschrijf. Echter ik wil de functie SendKeys alleen uitvoeren als er ook werkelijk data ingelezen is.
Nu heb ik al enkele dingen gebrobeerd, zie onderstaande code, echter zonder positief resultaat.

code:
1
2
3
4
5
6
procedure TForm1.Timer1Timer(Sender: TObject); 
begin 
     //if MSComm1.Input <> '' then       ---> dit werkt niet 
     //if StrLen(MSComm1.Input) > 0 then ---> StrLen is van PChar type em MSComm1.Input van het type OleVariant 
          Sendkeys1.SendKeysTo('Naamloos - Kladblok',MSComm1.Input); 
end;


Weet iemand een oplossing?
Is "typecasting" in Delphi ook mogelijk (zoals in C/C++), dus het "casten" van een type naar een ander type?

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 19:25
met vartostr maybe??

  • ArieProductions
  • Registratie: Januari 2002
  • Laatst online: 27-11-2024
function VarIsNull(const V: Variant): Boolean;

en even tussen de variant support routines kijken,

"Quidquid latine dictum sit, altum videtur" (Whatever is said in Latin sounds profound)


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:17

Creepy

Tactical Espionage Splatterer

Is "typecasting" in Delphi ook mogelijk (zoals in C/C++), dus het "casten" van een type naar een ander type?
Typecasting kan ook in Delphi ja. Maar net als in C/C++ moet je wel zelf weten of na de cast de inhoud van je variabele nog zinnig is. Ook kan in Delphi niet elke cast.
Een
Delphi:
1
x:=string(1);

is niet geldig. Je zult dan echt een inttostr o.i.d. moeten gebruiken.
Een cast ala
Delphi:
1
2
3
4
5
6
var dinges: pchar;
    blaat: string;
begin
   dinges:='hoi';
   blaat:=string(dinges);
end;

is weer geen probleem.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Maar then again, een PChar aan een string toewijzen kan zonder cast. Alleen vroeger (Delphi 1) moest het met StrPas.

Ik denk trouwens dat de topicstarter aan VarIsNull en VarToStr genoeg heeft. Dan natuurlijk Length gebruiken om de string-lengte op te vragen. Die VarIsNull is trouwens nodig omdat een olevariant die Null is, een AV (geloof ik) oplevert wanneer je hem probeert te converteren naar string met VarToStr.

日本!🎌


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:17

Creepy

Tactical Espionage Splatterer

_Thanatos_ schreef op 12 november 2002 @ 10:18:
Maar then again, een PChar aan een string toewijzen kan zonder cast. Alleen vroeger (Delphi 1) moest het met StrPas.
Dit ging alleen maar om het voorbeeld. Niet om een pchar naar een string om te zetten .
Ik denk trouwens dat de topicstarter aan VarIsNull en VarToStr genoeg heeft. Dan natuurlijk Length gebruiken om de string-lengte op te vragen. Die VarIsNull is trouwens nodig omdat een olevariant die Null is, een AV (geloof ik) oplevert wanneer je hem probeert te converteren naar string met VarToStr.
Zoals al eerder aangegeven is dus. En aangezien de topicstarter iets wil doen op het moment dat er echt iets in staat is voor zijn probleem het gebruik van VarIsNull zeer waarschijnlijk voldoene

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik doe nu:

s := VarToStr(MSComm1.Input);
if Length(s) > 0 then
Sendkeys1.SendKeysTo(Edit1.Text,s);

Met VarIsNull werkt het om de 1 of andere reden niet, echter met bovenstaande werkt het dus dat probleem is opgelost.
Vanmiddag even het programma getest op een Win2000 pc en nu blijkt het ActiveX componentje MSComm weer problemen te geven op een Win2000 pc :'( :'( :'( :'(. Ik denk gebruik een ActiveX componentje van Microsoft dat zal ook wel werken onder Win2000, niet dus.

Bedankt voor jullie antwoorden.

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 19:25
VarToStr controleert zelf al of de olevariant null is. Als die null is retourneert VarToStr een lege string. Dus VarIsNull is eigenlijk overbodig
Pagina: 1