Wie kann ich strings haben die länger als 255 zeichen sind ?

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

Wie kann ich strings haben die länger als 255 zeichen sind ?

Beitrag von pluto »

Hallo,
mir ist heute aufgefallen das das die strings nur 255 zeichen speichern...wie kann ich das umgehen ?
mir geht es eigentlich nur darum einen Text auf einen Canvas zu zeichnen und dabei würde ich gerne textRect nutzen !!!

hat da jemmand von euch eine idee ?
MFG
Michael Springwald

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

Beitrag von theo »

Das ist jetzt nicht dein Ernst, oder?
Ich dachte immer du hättest ein bisschen Plan von Lazarus.
Compliereinstellungen -> Ansi Strings verwenden oder ($H+} im Code

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

Beitrag von pluto »

ach so einfach ist das ?
ich war nur etwas überascht als ich die fehlermeldung vom complier gesehen habe !
in lazarus bin ich auch noch neu..... naja vielen dank auf jedenfall !
MFG
Michael Springwald

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

Beitrag von pluto »

nein das wars leider nicht ! ich habe die einstellung garnicht gefunden unter compliereinstellungen !

und die anweisung wenn ich die verwende gibt den gleiche fehlermeldung aus:
{$H+}
edit:
habe sie unter complier einstellungen gefunden aber zeigt keine wirkung !
edit2: es kommt immer die gleiche meldung:
uPaint2Obj.pas(308,9) Error: Constant strings can't be longer than 255 chars
MFG
Michael Springwald

danny61
Beiträge: 94
Registriert: So 5. Nov 2006, 18:40
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Beitrag von danny61 »

Kannst Du mal etwas Code dazu posten ?
Normalerweise sind die Strings nur durch den Arbeitsspeicher begrenzt.
Allerdings gilt das nicht für eine Zeile in der IDE.
Größere Strings mußt Du also über mehrere Zeilen "zusammenbauen".

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

Beitrag von pluto »

Text:String;
text:='fahsjdfjöasdögljsaklöjgölkasjgklösajöglkjsalgjweigjrögj kmölkambmnbjahfgjahgöeuhguaöwrhguörhgahsöjghasöjnbvgkmnbmynxbmnyxjbfnurnbuarnbnbjnmnb,mynbgsagsagsaghsjahgjsaklhgjh78h43hgjj njnjangkajnglanjlgknsaljgnlasjngjlsangjnasgjasgjklnglrjg,'
bei so einem "langen" string meckert er !
nagut dann nehme ich eine StringList !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Das Problem ist wie bei Delphi, zumindest bei älteren versionen. Ein String ist nicht auf 255 begrnzt, sondern nur die Stringzuweisung über den Quelltext der Ide, wenn du eben einer string-variable den Text so wie oben übergibts.
In dem Fal musst du einfach den string beispielsweise in 250-Zeichenblöcken übergeben

Text := 'ersten 250 zeichen' + 'nächsten 250 zeichen' + 'und so weiter...';

Auf die Art kannst du längere Strings übergeben, die nur durch das System begrenzt sind. Sei es durch Arbeitsspeicher oder Adressierung oder was auch immer.

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

Beitrag von pluto »

Dank! habe ich mir schon beina gedacht das ist "nur" so mölgich ist einen langen text zu speichern !
das problem dabei ist jedoch das der user den Text eingibt und nicht ich !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Aber wo gibt der User den den text ein? In ein Memo? oder gibt der ernsthaft über 250 Zeilen in ein Edit ein?

Und eine Zuweisung von text := Memo.Text; müsste eigentlich gehen.

Sag doch mal konkret, wo und wie der Text her kommt.

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

Beitrag von pluto »

der text kommt aus einem memo soll später aus einer RichtEdit komponente kommen ! stimmt auch wieder das keiner einem Edit über 256 zeichnen eingeben wird !
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

...und, wo liegt jetzt das Probleme? Zuweisungen solcher strings gehen doch problemlos:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var Testtext: string;
begin
  Testtext := Memo1.Text;
  ShowMessage(IntToStr(length(Testtext)));
end;

Mein Testtext in Memo1 hatte 29229 Zeichen und da gibt es keinen Fehler bei der Zuweisung.

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

Beitrag von pluto »

naja ich war halt überrascht das es nicht geht ! ohne weiteres !
mehr nicht !
ich nehme jetzt sowieso eine TStirngList ! damit ist der fall für micht erstmal abgeschlossen !
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

pluto hat geschrieben:text:='fahsjdfjöasdögljsaklöjgölkasjgklösajöglkjsalgjweigjrögj kmölkambmnbjahfgjahgöeuhguaöwrhguörhgahsöjghasöjnbvgkmnbmynxbmnyxjbfnurnbuarnbnbjnmnb,mynbgsagsagsaghsjahgjsaklhgjh78h43hgjj njnjangkajnglanjlgknsaljgnlasjngjlsangjnasgjasgjklnglrjg,'


:lol:

Da hast du dir ja einen sehr aussagekräftigen Text ausgedacht ;)

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

Beitrag von pluto »

naja das war ja nur damit ich ein beispiel hatte ! der eigentliche text hatte ich schon wieder gelöscht !
wie gesagt ich habe jetzt eine TStringlist damit dürfte das problem erstmal behoben sein !
MFG
Michael Springwald

Antworten