Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String Konvertierung!? (https://www.delphipraxis.net/543-string-konvertierung.html)

Daniel B 6. Aug 2002 20:52


String Konvertierung!?
 
Hi,

irgendwie verstehe ich die Fehlermeldung nicht:
[Fehler] Unit1.pas(101): Konstantenausdruck erwartet

Code:
procedure TForm1.SX1Click(Sender: TObject);
var
  s, t: string;
  i: integer;
begin
  s := #254#1;
  for i := 0 to 1 do
  begin
    t := IntToStr(i);
    s := s + (# + t) + #255; //Bei der Raute in der Mitte ist das Problem.
    ComPort.WriteStr(s);
  end;
end;
# + t muss so sein weil es das gleiche sein soll wie z.B. #255.

Daniel 6. Aug 2002 20:55

... nutze doch einfach chr(t).....

Grüße,
Daniel

MrSpock 6. Aug 2002 20:56

Hallo Daniel,

# ist kein gültiges Zeichen, wenn es allein steht. Du solltest nicht (# + t) sondern Chr(t) verwenden.

Daniel B 6. Aug 2002 21:01

eigentlich chr(i). Weil t ja ein String ist. t bleibt also ganz weg.
Trotzdem geht das ganze nciht so wie ich es mir gedacht habe.

Ich möchte folgendes an die Serielle schicken:

#254#1#0#255
#254#1#1#255
#254#1#2#255

Irgendwie stimmt da was nicht. Mit dem Code.

MrSpock 6. Aug 2002 21:04

Hallo Daniel B,

dann muss deine Schleife aber bis 2 laufen :mrgreen:

Daniel B 6. Aug 2002 21:07

Das ist schon Klar. :roll: Wenn funktioniert sogar bis 102. Zum Testen langt mir aber 1 oder 2.

Es geht also von:

#254#1#0#255
#254#1#1#255
.
.
.
#254#1#102#255

MrSpock 6. Aug 2002 21:09

Hallo Daniel B,

außerdem erweiterst du s bei jedem Schleifendurchlauf. Du must also die Zuweisung s := #254#1 in die Schleife mit aufnehmen!

Code:
procedure TForm1.SX1Click(Sender: TObject);
var
  s: string;
  i: integer;
begin
  for i := 0 to 1 do
  begin
    s := #254#1+Chr(i)+#255;
    ComPort.WriteStr(s);
  end;
end;
Edit: Code hinzugefügt

Daniel B 7. Aug 2002 17:28

Code:
procedure TForm1.SX0Click(Sender: TObject);
var
  s, t: string;
  i: integer;
begin
  s := #254#0;
  for i := $80 to $E7 do //<--- Hier #128 to #231 Nicht möchlich. Trotz Konvertierung.
  begin
    t := s + Chr(i) + #255;
    ComPort.WriteStr(t);
  end;
end;
Damit gehts. Vielleicht kann mir einer erklären warum es mit Hex geht, aber mit Ascii nicht. Danke.

MrSpock 7. Aug 2002 17:38

Hallo Daniel B,

der Schleifenindex erwartet ja eine Zahl, wie 128 oder $80, aber nicht #128, was als Character interpretiert wird, dessen interne Darstellung 128 ist. Du musst also das # an dieser Stelle weglassen.

Daniel 7. Aug 2002 17:39

#128 bezeichnet einen Character ('Ç') und diesen kannst Du keiner Integer-Laufvariablen zuweisen. Wenn Du das Schweinegatter ... ich meine ... die Raute ... weglässt, dann müsste es sehr wohl funktionieren.


Grüße,
Daniel


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz