28. August 200223 j 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;
28. August 200223 j 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...
28. August 200223 j // 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.
28. August 200223 j 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.. Danke schon mal für die Hilfe
28. August 200223 j also ich hab mit pos, delete und insert schon nen Zeilenumbruch bei bestimmten Stellen (Zeichen) eingefügt... Insert(#13#10, ...
28. August 200223 j 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.
28. August 200223 j 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...
28. August 200223 j 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) ...
28. August 200223 j 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...
29. August 200223 j 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.
29. August 200223 j 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...
29. August 200223 j 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.