Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zeilenumbruch

Empfohlene Antworten

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;

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...


// 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.

gut werde ich mal probieren. aber wieso geht das mit der Methode die ich habe im Ansi richedit und net in dem wo die HexZeichen ausgegeben werden.. naja höre Mathematik.. :D

Danke schon mal für die Hilfe

Oki funktioniert fast noch kleinere Macken.

Habt recht herzlichen Dank:e@sy

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

Insert(#13#10, ...

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.

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...

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) ...

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...

funktioniert leider auch net *g*

trotzdem danke.. muss ich mal weiter suchen

was funktioniert denn genau nicht? kommt eine Fehlermeldung?

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.

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...

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!!!!!!

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.