Zum Inhalt springen

Zeilenumbruch


SileDeli

Empfohlene Beiträge

Ich habe mal wieder a little problem

Ich empfange über eine Schnittstellen die einmal in ein Richedit als Ansi Zeichen dargestellt werden sollen und in dem anderem Richedit als Hex... funzt auch soweit.

Wenn ich jetzt allerding auf Enter drück ( zum Daten rübersenden benutze ich momentan Hyperterminal) geschieht zwar ein Zeilenumbruch im Ansi Richedit feld jedoch net im Hex Richeditfeld. Wie krieg ich denn da den Zeilenumbruch hin.

Sprache Delphi 6

so sieht der Quelltext bisher aus:

// Zeilenumbruch bei Drücken der EnterTaste beim Hypterm

i := pos('0D/',rehex.Text); // suchen 0D/

i := i +3; // Pos +3 ( 0D 3zeichen)

crlf := #13#10;

hext := rehex.text;

insert(crlf,hext,i); // Einfügen #13#10

end;

Link zu diesem Kommentar
Auf anderen Seiten teilen

du kannst direkt nach #13 suchen also pos(#13, String)... 0D ist die Hexschreibweise für 13... Das Zeichen 13 im ASCII Code ist LF also LineFeed, d.h. geh in die nächste Zeile, #10 (=0A) ist CR, CarriageReturn, WagenRücklauf, also Cursor an den Anfang der Zeile... ausserdem solltest du vor dem Einfügen das urspr. LF löschen, denk ich mir.

vielleicht hilft das ja schon...

Link zu diesem Kommentar
Auf anderen Seiten teilen


// Zeilenumbruch bei Drücken der EnterTaste beim Hypterm

    i := pos('0D/',rehex.Text); //  suchen 0D/

    i := i +3;   // Pos +3 ( 0D 3zeichen)

    crlf := #13#10;

    hext := rehex.text;

    insert(crlf,hext,i); // Einfügen #13#10

  end; 

Mit der "Insert"-Methode nicht, die soll einen string einfügen. Ein Steuerzeichen ist kein string, deshalb klappt es auch nicht. Du musst den Teil des strings, den du bis zum Zeilenumbruch hast, ausschneiden, um das Steuerzeichen ergänzen und anschliessend wieder zusammenfügen. Das bedeutet, du müsstest also in deiner Variable "hext" bis zu dem Teil des Strings speichern, an dem du das steuerzeichen haben möchtest.

hext := Copy (rehex.text, 1, i);

Zusätzlich musst du - falls danach noch weitere Stringzeichen kommen - diese in eine andere Variable speichern.

<zweite Variable> := Copy (rehex.text. i + 1, Length(rehex.text - i +1));

Dann ergänzt du deine Komponente ganz einfach :

rehex.text := hext + #13#10 + <zweite Variable>;

So müsste es gehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von MarcG

also ich hab mit pos, delete und insert schon nen Zeilenumbruch bei bestimmten Stellen (Zeichen) eingefügt...

Insert(#13#10, ...

Hm... welche Delphi - Version benutzt du denn ?

Vielleicht ein Bug ? Ich benutze die 5er in der Enterprise-Ausgabe, und da gibt es einen Parameter-Fehler.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jo nu funzt es.

Neues Problem wie kann ich denn machen das jedes Mal nach dem 10. Zeichen ein zeilenumbruch stattfindet in nem Richedit????

Delphi 6 Prof edition benutze ich

Habe das vorhin übrigens mit der Insert Methode hinbekommen, war einfach das problem das ich das ganze mal wieder net dem Zwischenspeicher und dann dem Text zugewiesen habe...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von lpd

Hm... welche Delphi - Version benutzt du denn ?

Vielleicht ein Bug ? Ich benutze die 5er in der Enterprise-Ausgabe, und da gibt es einen Parameter-Fehler.

D5 Enterprise... :confused:

#13 bzw #10 ist ja eigentlich ein Character... eben Chr(13) ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von SileDeli

Jo nu funzt es.

Neues Problem wie kann ich denn machen das jedes Mal nach dem 10. Zeichen ein zeilenumbruch stattfindet in nem Richedit????


var i: Integer;


i:= 10;

while i< Length(RichEdit.Text) -1 do

begin

  Insert(Text, RichEdit.Text, i);

  Inc(i, 10);

end;


Nicht geprüft, nur aus dem kopf...

Link zu diesem Kommentar
Auf anderen Seiten teilen

nein der Quellcode ist richtig --> nur macht er keinen Zeilenumbruch ( ja ich hab für das Text #13#10 eingefügt *g*)

also ich bekomme über eine Schnittstelle Daten in ein Richedit feld geliefert, also Zeichen für Zeichen, dementsprechend weiß ich eben auch noch net wie viele Zeichen letztendlich in dem String sind, ich solle aber sagen das eben immer wenn 10 Zeichen in einer Linie stehen ein zeichenumbruch gemacht werden soll... mir wurde erzählt es ist ganz einfach.. vielleicht denk ich auch wieder um zu viele Ecken, auf jeden Fall gehts net. angeblich gehts mit lines.count --> aber da lege ich ja die Linienzahl fest und nicht die länge der Linien.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hier wie ich einen Zeilenumbruch einfüge, es handelt sich aber um ein Grid... (auch @lpd)

erstmal wenn ich im Feld was editieren will wird ein Zeilenumbruch (falls vorhanden) durch '/' ersetzt


  i:= (Sender as TdxDBGrid).FocusedColumn;

  tmp:= (Sender as TdxDBGrid).Columns[i].Caption;

  if not ((tmp = 'Attribut') or (tmp = 'Soll-Wert')) then

  begin

    tmp:= (Sender as TdxDBGrid).FocusedField.asString;

    if (pos(#13#10, tmp) > 0) then

    begin

      tmp:= itFormat(tmp, '/', #13#10);

        (Sender as TdxDBGrid).DataSource.Edit;

        (Sender as TdxDBGrid).FocusedField.asString := tmp;

    end;

  end;

itFormat ist eine abgewandelte Form von Format, funktioniert aber vom Prinzip her gleich... (nur wird das zu ersetzende Zeichen hier mit angegeben und steht nicht im String) nach dem Editieren wird '/' durch eine Zeilenumbruch ersetzt

  tmp:= (Sender as TdxDBGrid).FocusedField.asString;

  if (pos('/', tmp) > 0) then

  begin

    tmp:= itFormat(tmp, #13#10, '/');

      (Sender as TdxDBGrid).DataSource.Edit;

      (Sender as TdxDBGrid).FocusedField.asString := tmp;

  end;

was für Daten (bzw wie) schreibst du denn ins RichEdit?

Sollen die Zeilenumbrüche nur angezeigt werden oder soll das auch gespeichert werden o.ä.

du könntest einen FixedWidth-Font nehmen, also einen, bei dem alle Zeichen dieselbe Breite haben (Courier sollte so einer sein) und Mithilfe der Eigenschaft WordWrap und Width in der anzeige einen Zeilenumbruch herstellen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meine Lösung:

if length(reansi.Lines.Strings[reansi.Lines.Count -1])>= 10 then

reansi.Text := reansi.text +#13#10;

reansi.Text := reansi.Text + zeichen;

habe jetzt die Länge der aktuellen Zeile bestimmt und dann eben den Wert 10 oder > zugewiesen...

Das wieder ein Kampf... danke für die Hilfe!!!!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...