![]() |
Richedit/Memo "nachprogrammieren"
Hi!
Es geht eigentlich darum ein Ausgabefeld ähnlich einem Memo oder Richedit zu programmieren. Also diese Standard-Sachen Text anzeigen (eingeben muss nicht sein), markieren, scrollen etc. Ist es realistisch, dass man das selbst nachprogrammieren kann? Falls ja, könnt ihr mir ein paar Ansätze geben? Danke und Ciao Frederic |
Re: Richedit/Memo "nachprogrammieren"
Hallo,
ich bin gerade dabei, sowas ähnliches zu programmieren. Ich wollte eine Komponente, in der ich spezielle Text-Formatierungen vornehmen kann, die es im RichEdit nicht gibt. Ich habe ungefähr 'ne Woche dafür gebraucht, auch wenn die ganze Sache noch nicht ganz fertig ist (das Ganze flimmert ab und zu, ich will noch ![]() Was willst Du denn genau damit machen (Textformatierun, Graphiken darstellen, Aufzählungen...), vielleicht kann ich Dir ja den ein oder anderen Tipp geben. Gruß xaromz |
Re: Richedit/Memo "nachprogrammieren"
Hi!
Es soll eigentlich nur Text darstellen können, keine allzugroßen Spielereien. Hauptknackpunkt ist, dass ein Memo bzw. Richedit CR und LF nicht richtig interpretiert. Ich kann kein LF machen, wenn ich nicht auch ein CR mache und genau das soll aber unterstützt werden. Ciao Frederic |
Re: Richedit/Memo "nachprogrammieren"
Moin Frederic,
also Dein Problem hat mit der Bedienung im RichEdit/Memo nichts zutun, also schreib keine Komponente mit dem Aufwand. Bei Delphi sind ja die Sourcen dabei, also kann man sowas nachprogrammieren aber Dir scheint eher ein Ausgabefilter zu fehlen und da reicht was abgeleitetes. Im übrigen wird ja vielfach auf Synedit und RichView verwiesen, was Deinem Problem aber nciht nahekommt. Grüße // Martin |
Re: Richedit/Memo "nachprogrammieren"
Hallo,
Zitat:
Gruß xaromz |
Re: Richedit/Memo "nachprogrammieren"
Hi!
Nein, es soll eben nicht dem Windows-Standard angeglichen werden (also der Text verändert werden), sondern es soll so dargestellt werden, wie es kommt. Deswegen meine Frage... Ciao Frederic |
Re: Richedit/Memo "nachprogrammieren"
Zitat:
Wenn du schon eine eigene Komponente machen willst, dann ersetze doch einfach nur die Routine LoadFromStream so, dass LFs korrekt interpretiert werden. Anderer Ansatz wäre z.B. die Meldungen WM_SETTEXT/EM_REPLACESEL zu überschreiben und hier die LF -> CR/LF Behandlung einzubauen. Also WM_SETTEXT(Text) wird einfach zu EM_SETSEL(0,-1)+EM_REPLACESEL(Text) und in EM_REPLACESEL baust du dann das ganze modifizierte Handling ein. [Nachtrag] Habe gerade mal in die VCL-Quellen geschaut - normalerweise sollte auch ein TMemo mit CR/LF oder nur CR oder nur LF umgehen können (ungetestet). Wenn's um das Speichern geht: da müsstest du nur vorher
Code:
setzen und die Datei wird im Unix-Format abgespeichert.
Memo1.Lines.LineBreak := #10;
|
Re: Richedit/Memo "nachprogrammieren"
Hi!
Es verhält sich selstam: Gebe ich (sowohl bei Memo als auch bei Richedit) manuell also mit ALT+010 bzw. ALT+013 ein, dann macht er bei beiden (!) ein LF UND ein CR - also gänzlich falsch interpretiert. Lese ich Daten vom ComPort aus, werden dort #10 und dann #13 gesendet: Daraufhin stellen mir Richedit und Memo 2 unlesbare Zeichen (diese Balken) dar. Kommt hingegen ein #13 und dann #10 dann wird korrekt ein Zeilenumbruch gemacht. Man sieht also, dass diese Implementierung "Schrott" ist. Entweder muss ich diesen Teil ändern (wo sollte ich da ansetzen?) oder ganz neu.... Ciao Frederic P.S.: Oder es gibt ne Komponente, die es kann..... |
Re: Richedit/Memo "nachprogrammieren"
Du hättest aber auch dazu schreiben können, dass du die Zeichen *EINZELN* an das Control schicken willst.
Ich hatte jetzt erst noch ein paar Dinge geschrieben, aber eigentlich hängt die Antwort davon ab, *WIE* du die Zeichen in das Memo setzt. Also: wie setzt du die Zeichen, die du vom Comport holst, in das Memo? [Nachtrag] Noch eine Idee: kannst du nicht einfach #13 ignorieren, d.h. nicht an das Memo weiterleiten, und statt dessen bei #10 immer #13#10 senden? |
Re: Richedit/Memo "nachprogrammieren"
Hi!
Problem ist, dass die Zeichen nicht einzeln behandelt werden. Momentan gehe ich hin und mache immer nur
Delphi-Quellcode:
Es kann jetzt passieren, dass nur ein LF kommt, dann soll auch NUR ein LF gemacht werden, eben ohne CR (von CR steht dann da ja nix). Genauso soll aber auch ein CR behandelt werden, wenn nur ein CR kommt.
Memo1.Text:=Memo1.Text + ch; //ch: char
Das Memo nimmt bei dieser zeichenweise "Eingabe" immer nur #13#10 als Zeilenwechsel mit CR, aber er soll es auch anders können. Zum Nachtrag: Das verändert ja wieder den Text, es zu umgehen ist ja einfach, da mach ich ein Str_Replace und gut ist, aber dann interpretiert er die ankommenden Zeichen falsch. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz