SileDeli Geschrieben 28. August 2002 Geschrieben 28. August 2002 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; Zitieren
MarcG Geschrieben 28. August 2002 Geschrieben 28. August 2002 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... Zitieren
lpd Geschrieben 28. August 2002 Geschrieben 28. August 2002 // 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. Zitieren
SileDeli Geschrieben 28. August 2002 Autor Geschrieben 28. August 2002 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 Zitieren
SileDeli Geschrieben 28. August 2002 Autor Geschrieben 28. August 2002 Oki funktioniert fast noch kleinere Macken. Habt recht herzlichen Dank:e@sy Zitieren
MarcG Geschrieben 28. August 2002 Geschrieben 28. August 2002 also ich hab mit pos, delete und insert schon nen Zeilenumbruch bei bestimmten Stellen (Zeichen) eingefügt... Insert(#13#10, ... Zitieren
lpd Geschrieben 28. August 2002 Geschrieben 28. August 2002 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. Zitieren
SileDeli Geschrieben 28. August 2002 Autor Geschrieben 28. August 2002 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... Zitieren
MarcG Geschrieben 28. August 2002 Geschrieben 28. August 2002 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) ... Zitieren
MarcG Geschrieben 28. August 2002 Geschrieben 28. August 2002 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... Zitieren
SileDeli Geschrieben 29. August 2002 Autor Geschrieben 29. August 2002 funktioniert leider auch net *g* trotzdem danke.. muss ich mal weiter suchen Zitieren
MarcG Geschrieben 29. August 2002 Geschrieben 29. August 2002 was funktioniert denn genau nicht? kommt eine Fehlermeldung? Zitieren
SileDeli Geschrieben 29. August 2002 Autor Geschrieben 29. August 2002 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. Zitieren
MarcG Geschrieben 29. August 2002 Geschrieben 29. August 2002 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... Zitieren
SileDeli Geschrieben 29. August 2002 Autor Geschrieben 29. August 2002 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!!!!!! Zitieren
Empfohlene Beiträge
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.