Delphi-PRAXiS
Seite 2 von 5     12 34     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)

Flocke 31. Jul 2005 11:09

Re: Richedit/Memo "nachprogrammieren"
 
Zitat:

Zitat von fkerber
Man sieht also, dass diese Implementierung "Schrott" ist.

Eine ganz gewagte Aussage... Ich denke eher, dass sie einfach für deine Zwecke nicht passt.

Zitat:

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

Was soll das Memo in den einzelnen Fällen den anders machen?

Zitat:

Zitat von fkerber
Das Memo nimmt bei dieser zeichenweise "Eingabe" immer nur #13#10 als Zeilenwechsel mit CR, aber er soll es auch anders können.

Das ist keine zeichenweise Eingabe; das Memo passt den Text mit der Funktion AdjustLineBreaks an.

Das Problem ist einfach, dass das Control nicht dafür entworfen wurde, dass ihm ein "halber" Zeilenumbruch geschickt wird.

Schon mal daran gedacht, Daten und Darstellung einfach zu trennen?

Delphi-Quellcode:
var strDaten: string;
strDaten := strDaten + Zeichen;
Memo1.Text := AdjustLineBreaks(strDaten);
[Nachtrag]
andere Variante, wenn man .Lines.Text setzt, dann ist das AdjustLineBreaks schon mit drin:

Delphi-Quellcode:
var strDaten: string;
strDaten := strDaten + Zeichen;
Memo1.Lines.Text := strDaten;

bigg 31. Jul 2005 11:59

Re: Richedit/Memo "nachprogrammieren"
 
moin,

klar geht sowas und das ist auch gar nicht schwer.
Ich weis nicht in wie weit du dich schon mit den Zeichnen-Funktionen von Windows beschäftigt hast,
aber in der regel sollte es nicht allzu lange dauern.

Du brauchst:
- eine TStringList
- ein Bild / Canvas zur Ausgabe
- zwei Scrollbalken

Der Rest ist Berechnung.

TextHeight() - berechnet die Höhe eines Strings in Pixel
TextWidth()- brechnet die Breite eines Strings in Pixel
TextOut() - mal den Text auf eine Grafik

fkerber 31. Jul 2005 12:14

Re: Richedit/Memo "nachprogrammieren"
 
Zitat:

Zitat von Flocke
Zitat:

Zitat von fkerber
Man sieht also, dass diese Implementierung "Schrott" ist.

Eine ganz gewagte Aussage... Ich denke eher, dass sie einfach für deine Zwecke nicht passt.

Naja, ein LF ist eben ein LF und kein LF+CR, deswegen denke ich, dass die Implementierung nicht korrekt ist.

Zitat:

Zitat von Flocke
Zitat:

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

Was soll das Memo in den einzelnen Fällen den anders machen?

Wenn nur ein CR kommt z.B., dann soll eben auf Pos 0 der aktuellen Zeile gesprungen werden und ab dort die Zeichen hin.


Zitat:

Zitat von Flocke
Schon mal daran gedacht, Daten und Darstellung einfach zu trennen?

Delphi-Quellcode:
var strDaten: string;
strDaten := strDaten + Zeichen;
Memo1.Text := AdjustLineBreaks(strDaten);

Ich rede ja im Moment sowieso nur von der Darstellung.
Verwende ich AdjustLineBreaks, dann wird ja auch wieder etwas dargestellt, was so nicht im "Text" steht, z.B. CR/LF, obwohl nur CR da ist...


@bigg:
Und wie siehts mit markieren aus? Und kopieren, und einfügen??


Ciao Frederic

xaromz 31. Jul 2005 12:25

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

Zitat von bigg
moin,

klar geht sowas und das ist auch gar nicht schwer.
Ich weis nicht in wie weit du dich schon mit den Zeichnen-Funktionen von Windows beschäftigt hast,
aber in der regel sollte es nicht allzu lange dauern.

Du brauchst:
- eine TStringList
- ein Bild / Canvas zur Ausgabe
- zwei Scrollbalken

Der Rest ist Berechnung.

TextHeight() - berechnet die Höhe eines Strings in Pixel
TextWidth()- brechnet die Breite eines Strings in Pixel
TextOut() - mal den Text auf eine Grafik

Ich hab mich ausführlich damit beschäftigt, ein bisschen mehr ist da schon nötig (z. B. Zeilenumbruch, Markierung, Geschwindigkeit usw.). Wie gesagt hab ich dafür fast eine Woche gebraucht, und die Zeit braucht man auch (Etwas Zeit hab ich natürlich auf meine Formatierungen verwendet, was hier ja nicht nötig ist).

Aber zurück zum Thema: Ein Speichern der eingehenden Zeichen in einem String, evtl. mit Filterung und anschließender Darstellung dieses Strings scheint mir der beste Weg für das Problem zu sein.

Gruß
xaromz

fkerber 31. Jul 2005 12:27

Re: Richedit/Memo "nachprogrammieren"
 
Hi!

@Xaromz:
Kannst du mir mal deine Komponente zeigen?

Was bringt mir eine Speicherung?
Wie stell ich dann ein LF ohne CR dar?


Ciao Frederic

bigg 31. Jul 2005 12:31

Re: Richedit/Memo "nachprogrammieren"
 
Zitat:

Und wie siehts mit markieren aus? Und kopieren, und einfügen??
Dafür gibt es die Unit Clipbrd.
Zum Markieren benötigst du zwei Punkte und dann wird wiederum gezeichnet.

Zum Einfügen benötigst du einen Punkt, änderst die Daten in der Liste und zeichnest dein Memo neu.

xaromz 31. Jul 2005 12:34

Re: Richedit/Memo "nachprogrammieren"
 
Hallo,

ich hab meine Komponente grad nicht da, die ist auf meinem Rechner im Büro.
Meine Komponente nimmt im Grunde genommen einfach beide Zeichen und stellt beide als Zeilenumbruch dar, jedoch nur, wenn nach einem #10 kein #13 kommt und umgekehrt Also folgendermaßen:

#65#10#65 -> A, Zeilenumbruch, A

#65#13#65 -> A, Zeilenumbruch, A

#65#10#13#65 -> A, Zeilenumbruch, A

#65#13#10#65 -> A, Zeilenumbruch, A

#65#10#10#65 -> A, Zeilenumbruch, Zeilenumbruch, A

#65#13#13#65 -> A, Zeilenumbruch, Zeilenumbruch, A

Das ist natürlich willkürlich gewählt und lässt sich im Quelltext einfach anpassen.

Gruß
xaromz

fkerber 31. Jul 2005 12:51

Re: Richedit/Memo "nachprogrammieren"
 
Hi!

Es wär echt klasse, wenn du sie mir mal geben könntest.

Du machst aber keinen CR ohne LF?


Ciao Frederic

Flocke 31. Jul 2005 13:03

Re: Richedit/Memo "nachprogrammieren"
 
Zitat:

Zitat von fkerber
Naja, ein LF ist eben ein LF und kein LF+CR, deswegen denke ich, dass die Implementierung nicht korrekt ist.

Zitat:

Zitat von fkerber
Wenn nur ein CR kommt z.B., dann soll eben auf Pos 0 der aktuellen Zeile gesprungen werden und ab dort die Zeichen hin.

Jetzt verstehe ich langsam: du willst das gesamte nicht als Text interpretieren sondern eine Terminalausgabe simulieren. CR/LF, LF und CR sind für dich somit nicht Zeilenendekennzeichen sondern Steuerbefehle für den Ausgabecursor. Das sind doch zwei vollkommen unterschiedliche Dinge. Erwartest du von einem Memo etwa auch, dass nach "Text := 'ABC'#8;" in Text nur 'AB' drin steht weil #8 der Steuercode für Backspace ist? Mit "Text:=irgendwas" simulierst du doch keine Tasten!

Um das hinzukriegen solltest du dir die aktuelle Zeile und Spalte im Memo merken und die Zeichen jeweils Positionsweise hinzufügen bzw. bei CR machst du "Spalte:=1" und LF machst du "Zeile:=Zeile+1" und bei anderen Zeichen ersetzt du es und machst "Spalte:=Spalte+1". Danach musst du das Caret neu setzen.

Muss jetzt leider weg, sonst könnte ich dir eben ein paar Zeilen hinschreiben.

fkerber 31. Jul 2005 13:06

Re: Richedit/Memo "nachprogrammieren"
 
Hi!

Ja, Flocke! Genau das!

Würde man es ganz durchziehen, müsste man das auch mit dem #8 machen, es geht mir aber erstmal nur um die Zeilenwechsel!

Das Memo unterstützt aber nicht von Haus aus, dass man Zeile:=Zeile+1 macht und dann die Spalte noch stimmt, oder?


Ciao Frederic


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Seite 2 von 5     12 34     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-2025 by Thomas Breitkreuz