AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Markierung verschiebt sich in jeder Zeile

Markierung verschiebt sich in jeder Zeile

Ein Thema von Getox · begonnen am 16. Mai 2017 · letzter Beitrag vom 17. Mai 2017
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 13:20
Davon ausgehend, das Selstart genau den Punkt zeigt, an dem man in ein RichEdit einfügt, kann man ohne große Rechnerei auch folgendes machen:

Delphi-Quellcode:
procedure TForm1.addZeile(sUeberschrift, sText: String);
begin
  memoMessage.SelAttributes.Style := [fsBold];
  memoMessage.SelText := sUeberschrift + ' ';
  memoMessage.SelAttributes.Style := [];
  memoMessage.SelText := sText + #13;
end;
Die Lösung finde ich super. Schön kurz und tut was es soll danke
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#2

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 14:13
Delphi-Quellcode:
procedure TForm1.addZeile(sUeberschrift, sText: String);
begin
  memoMessage.SelAttributes.Style := [fsBold];
  memoMessage.SelText := sUeberschrift + ' ';
  memoMessage.SelAttributes.Style := [];
  memoMessage.SelText := sText + #13;
end;
Ich hätte aber erwartet, dass noch wenigenst zwei SelStart/SelLength dort drin fehlen.

Meinem Versändis nach wird alles aktuell Markierte so durch die sUeberschrift überschreiben
und der sText überschreibt/löscht danach auch nochmal die sUeberschrift.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 14:20
Bin mir nicht sicher, aber wenn SelText leer ist, so gilt das gemachte quasi ab Cursorposition.

Also ungefähr so:
Delphi-Quellcode:
procedure TForm1.addZeile(sUeberschrift, sText: String);
begin
  // ab der aktuellen Curosrposition wird alles Fett.
  memoMessage.SelAttributes.Style := [fsBold];
  // sUeberschrift an der Cursorposition einfügen,
  // der Cursor wandert entsprechend weiter.
  memoMessage.SelText := sUeberschrift + ' ';
  // ab der aktuellen Cursorposition, die sich nun hinter
  // dem sUeberschrift folgenden Leerzeichen befindet,
  // Text ohne besondere Formatierung.
  memoMessage.SelAttributes.Style := [];
  // Und nun hinter o. g. Leerzeichen sText einfügen und
  // 'nen Zeilenumbruch dranhängen.
  memoMessage.SelText := sText + #13;
end;
Ist SelText nicht leer, ergibt sich ein vollkommen anderes Verhalten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#4

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 16:18
Jupp, WENN SelText vorher leer ist

und beim Zuweisen von sText ist SelText nicht leer, da dort ja noch sUeberschrift selektiert ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#5

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 16:24
Jupp, WENN SelText vorher leer ist
Die Bedingung lautet ja auch SelLength = 0 und nicht SelText = <leer>...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 16:42
Zitat von himitsu:
Jupp, WENN SelText vorher leer ist

und beim Zuweisen von sText ist SelText nicht leer, da dort ja noch sUeberschrift selektiert ist.
Nein, wenn man SelText was zuweist, obwohl SelText leer ist, wird dadurch nichts selektiert.

Folgender Quelltext:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sUeberschrift : String;
  sText : String;
  i : Integer;
begin
  for i := 1 to 9 do begin
    sUeberschrift := Format('Überschrift: %d',[i]);
    sText := Format('das ist jetzt der Text für Zeile %d.',[i]);
    // ab der aktuellen Curosrposition wird alles Fett.
    memoMessage.SelAttributes.Style := [fsBold];
    // sUeberschrift an der Cursorposition einfügen,
    // der Cursor wandert entsprechend weiter.
    memoMessage.SelText := sUeberschrift + ' ';
    // ab der aktuellen Cursorposition, die sich nun hinter
    // dem sUeberschrift folgenden Leerzeichen befindet,
    // Text ohne besondere Formatierung.
    memoMessage.SelAttributes.Style := [];
    // Und nun hinter o. g. Leerzeichen sText einfügen und
    // 'nen Zeilenumbruch dranhängen.
    memoMessage.SelText := sText + #13;
  end;
end;
Die Ausgabe sieht so aus, wenn nichts ausgewählt ist:

Überschrift: 1 das ist jetzt der Text für Zeile 1.
Überschrift: 2 das ist jetzt der Text für Zeile 2.
Überschrift: 3 das ist jetzt der Text für Zeile 3.
Überschrift: 4 das ist jetzt der Text für Zeile 4.
Überschrift: 5 das ist jetzt der Text für Zeile 5.
Überschrift: 6 das ist jetzt der Text für Zeile 6.
Überschrift: 7 das ist jetzt der Text für Zeile 7.
Überschrift: 8 das ist jetzt der Text für Zeile 8.
Überschrift: 9 das ist jetzt der Text für Zeile 9.

Wählt man nun von dieser Ausgabe die erste Zeile aus (also Überschrift: 1 das ist jetzt der Text für Zeile 1.) und führt die Routine ein weiteres Mal aus, so sieht das Ergebnis so aus:

Überschrift: 1 das ist jetzt der Text für Zeile 1.
Überschrift: 2 das ist jetzt der Text für Zeile 2.
Überschrift: 3 das ist jetzt der Text für Zeile 3.
Überschrift: 4 das ist jetzt der Text für Zeile 4.
Überschrift: 5 das ist jetzt der Text für Zeile 5.
Überschrift: 6 das ist jetzt der Text für Zeile 6.
Überschrift: 7 das ist jetzt der Text für Zeile 7.
Überschrift: 8 das ist jetzt der Text für Zeile 8.
Überschrift: 9 das ist jetzt der Text für Zeile 9.
Überschrift: 2 das ist jetzt der Text für Zeile 2.
Überschrift: 3 das ist jetzt der Text für Zeile 3.
Überschrift: 4 das ist jetzt der Text für Zeile 4.
Überschrift: 5 das ist jetzt der Text für Zeile 5.
Überschrift: 6 das ist jetzt der Text für Zeile 6.
Überschrift: 7 das ist jetzt der Text für Zeile 7.
Überschrift: 8 das ist jetzt der Text für Zeile 8.
Überschrift: 9 das ist jetzt der Text für Zeile 9.

Es wird nur beim ersten Mal der ausgewählte Text überschrieben, danach wird alles an der dann aktuellen Cursorposition eingefügt.

Sprich: Die Zuweisung von Text an SelText hebt die Selektierung auf.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.373 Beiträge
 
Delphi 12 Athens
 
#7

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 19:02
Das ist dann aber ein komisches Verhalten.

Wenn ich SelText was zuweise, dann erwarte ich doch, dass danach in SelText auch was drin ist, also das zugewiesene ebenfalls selektiert ist, denn schließlich hab ich da doch grade den neuen "selektierten Text" zugewiesen,
und wenn ich dann nochmal was Zuweise, dann würde das Selektierte doch wieder überschieben werden.




Mal in einem TMemo ausprobieren, aber dort ist es auch so ... ist doch schockierend.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sUeberschrift : String;
  sText : String;
  i : Integer;
begin
  for i := 1 to 9 do begin
    sUeberschrift := Format('Überschrift: %d',[i]);
    sText := Format('das ist jetzt der Text für Zeile %d.',[i]);
    memoMessage.SelText := sUeberschrift + ' ';
    memoMessage.SelText := sText + #13;
  end;
end;
Wozu hab ich denn dann all die Jahre brav SelStart/SelLength nach Zuweisung an SelText gesetzt, wenn ich das nicht selektiert haben wollte.


Zitat:
SelLength = 0 und nicht SelText = <leer>
SelLength = Length(SelText)
Abgesehn von den misshandelten Zeilenumbrüchen seitens Embarcadero.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Mai 2017 um 19:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#8

AW: Markierung verschiebt sich in jeder Zeile

  Alt 16. Mai 2017, 20:39
Wenn ich SelText was zuweise, dann erwarte ich doch, dass danach in SelText auch was drin ist, also das zugewiesene ebenfalls selektiert ist, denn schließlich hab ich da doch grade den neuen "selektierten Text" zugewiesen,
Das Verhalten ist aber doch konsistent mit dem Standardverhalten. Kopiere einen Text von irgendwo in die Zwischenablage, selektiere einen Bereich eines Memos und füge die Zwischenablage ein. Ist der eingefügte Text jetzt selektiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:49 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-2025 by Thomas Breitkreuz