Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Richedit/Memo "nachprogrammieren" (https://www.delphipraxis.net/50735-richedit-memo-nachprogrammieren.html)

fkerber 30. Jul 2005 19:30


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

xaromz 30. Jul 2005 19:45

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 ASpell intergrieren, Sonderzeichen und Graphiken einfügen können...).

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

fkerber 31. Jul 2005 03:36

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

mschaefer 31. Jul 2005 06:55

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

xaromz 31. Jul 2005 10:03

Re: Richedit/Memo "nachprogrammieren"
 
Hallo,
Zitat:

Zitat von fkerber
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.

In diesem Fall würde ich den Text vor der Zuweisung einfach bearbeiten, so dass die Zeilenumbrüche dem Windows-Standard entsprechen. Wie Martin schon geschrieben hat ist für diesen Zweck eine eigene Komponente schlicht Overkill.

Gruß
xaromz

fkerber 31. Jul 2005 11:00

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

Flocke 31. Jul 2005 11:22

Re: Richedit/Memo "nachprogrammieren"
 
Zitat:

Zitat von fkerber
Hauptknackpunkt ist, dass ein Memo bzw. Richedit CR und LF nicht richtig interpretiert.

RichEdits können das, so weit ich weiß. Habe ich jetzt nicht getestet, aber z.B. zeigt WordPad eine Unix-Textdatei korrekt an, die für Notepad nur aus einer einzigen Zeile besteht.

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:
Memo1.Lines.LineBreak := #10;
setzen und die Datei wird im Unix-Format abgespeichert.

fkerber 31. Jul 2005 11:33

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

Flocke 31. Jul 2005 11:43

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?

fkerber 31. Jul 2005 11:50

Re: Richedit/Memo "nachprogrammieren"
 
Hi!

Problem ist, dass die Zeichen nicht einzeln behandelt werden.

Momentan gehe ich hin und mache immer nur
Delphi-Quellcode:
Memo1.Text:=Memo1.Text + ch; //ch: char
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.
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.
Seite 1 von 5  1 23     Letzte »    

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