#13#10 geht nicht mehr

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

#13#10 geht nicht mehr

Beitrag von pluto »

Hallo,
ich habe folgenden qullcode:

Code: Alles auswählen

procedure TForm1.DrawText;
var
  i,x,y:Integer;
begin
  x:=0; y:=0;
  for i:=1 to obj.Count-1 do begin
    if tCharItem(obj.items[i]).Char = #10 then
      y:=y+Paintbox1.Canvas.TextHeight(tCharItem(obj.items[i]).Char)
    else
      Paintbox1.Canvas.TextOut(x,y,tCharItem(obj.items[i]).Char);
 
    x:=x+Paintbox1.Canvas.TextWidth(tCharItem(obj.items[i]).Char);
 
  end;
end;

und egel wie ich es schreibe:
#13#10
oder
#10#13
es wird einfach nicht gemacht !

ich möchte gerne prüfen ob die forschleife das zeieln ände erreicht hat oder nicht !

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: #13#10 geht nicht mehr

Beitrag von theo »

pluto hat geschrieben: ich möchte gerne prüfen ob die forschleife das zeieln ände erreicht hat oder nicht !


Auf #10 prüfen müsste eigentlich schon gehen.
Ich weiss allerdings nicht was Dein tCharItem(obj.items[i]) tut oder wie die Daten da reinkommen. Ich tippe mal drauf dass die LF Zeichen gar nicht in den Chars enthalten sind. Ausserdem verstehe ich nicht, weshalb du bei der Liste bei 1 beginnst?

Code: Alles auswählen

for i:=1 to obj.Count-1 do begin

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

das mit der 1 in der liste war ein kleiner denk fehler, den habe ich schon behoben wen nich char = 0 prüfe dann geht es wunderbar...

evlt liegt es daran das tCharItem(obj.items[i]).Char als char defniert ist
und somit 0 #13#10 sind...

Haben nicht alle betriebsysdeme irgenwelche LF sachen ?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nochmal: Stelle zunächst sicher, dass
deine Liste (CharItem(obj.items[i]).Char) überhaupt LF (#10) Zeichen enthält. Zur Not gibst Du mal mit write(..) alle Zeichen auf der Konsole aus.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich habe mit ord raußgefunden das 0 der zeielnumbruch ist !

damit geht es anscheind. vielen dank für den tip weder ich mal ausprobieren !

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:ich habe mit ord raußgefunden das 0 der zeielnumbruch ist !


Das ist natürlich nicht das Zeilenumbruchzeichen sondern #0.
Deshalb wäre es auch wichtiger gewesen zu erfahren wie die Chars in die Liste kommen, dort liegt nämlich der Hund begraben.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

#0 ist das ende des strings (warscheinlich)
#13 ist der zeilenumbruch unter unix
#10#13 unter windows.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

die zeichen werden in zwei vorschleifen eingelesen von einer TStringlist

Code: Alles auswählen

for i:=0 to Memo1.Lines.count-1 do begin
  str:=Memo1.lines.strings[i]
  for x:=1 to length(str) do begin
    Charitem.char:=str[x]
  end;
end;


so in entwar sieht das aus.
(bin gerade bei was andres da habe ich denn qullcode nicht zur hand)
char ist von Char.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:die zeichen werden in zwei vorschleifen eingelesen von einer TStringlist


Klar, so hast du natürlich keine Zeilenumbrüche drin.
Ich wundere mich allerdings, dass du #0 drin hast...

Antworten