AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Richedit/Memo "nachprogrammieren"

Ein Thema von fkerber · begonnen am 30. Jul 2005 · letzter Beitrag vom 8. Aug 2005
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 12:09
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 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 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;
Volker
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#12

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 12:59
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
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#13

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 13:14
Zitat von Flocke:
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 von Flocke:
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 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
Frederic Kerber
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#14

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 13:25
Hallo,
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
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#15

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 13:27
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
Frederic Kerber
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#16

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 13:31
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.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#17

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 13:34
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
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#18

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 13:51
Hi!

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

Du machst aber keinen CR ohne LF?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#19

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 14:03
Zitat von fkerber:
Naja, ein LF ist eben ein LF und kein LF+CR, deswegen denke ich, dass die Implementierung nicht korrekt ist.
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.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#20

Re: Richedit/Memo "nachprogrammieren"

  Alt 31. Jul 2005, 14:06
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
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz