AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bei einem memo leere Zeilen richtig löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Bei einem memo leere Zeilen richtig löschen

Ein Thema von padavan · begonnen am 12. Jan 2005 · letzter Beitrag vom 15. Jan 2005
Antwort Antwort
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#1

Bei einem memo leere Zeilen richtig löschen

  Alt 12. Jan 2005, 13:48
Hallo Delphianer, ich habe folgende Frage, evtl. hat jemand ´ne Idee.

Wenn man Strings in ein Memo einfügen will, kann man das ja z.B. auf diese Weis tun:

memo1.lines.add(blabla); Delphi fügt den String nach der letzen beschriebenen Zeile hinzu.

Soweit so gut.
Wenn man nun aber, warum auch immer die lines im Memo verschiebt, bleiben manchmal, je nach dem wie dies geschiet, leere Zeilen zurück. Diese sind zwar nichtbeschrieben aber zumindest schon so belegt, als würde man im Word die Enter-Taste ein paar mal betätigen. Man kann den Cursor also soweit unten plazieren, wie man die Enter-Taste gedrückt hat.

Nun mein Problem, mit dem Befehl
.add(blabla) sucht sich delphi ja nun die nächste freie Stelle und die ist leider unterhalb dieser "unbelegten" Zeilen. Das heißt, es bleiben freie Zeilen im Memo stehen.

Habe versucht es so zu lösen:

Delphi-Quellcode:
if memo1.lines[1] = 'then begin
memo1.selstart(1); //setzt den Cursor auf die leere Zeile
postmessage( wm_keypress, vk_back, 0) // oder so ähnlich, führt Backspace an dieser Stelle aus
end;
Um ehrlich zu sein, es funktioniert nicht

Für Denkanstöße oder Belehrungen wäre ich sehr dankbar
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 12. Jan 2005, 13:57
Moin Padavan,

die letzte Zeile im Memo löschen ginge so:

Memo1.Lines.Delete(Memo1.Lines.Count-1); Dies machst Du dann so lange (while-Schleife), bis keine Zeile mehr da ist, oder die letzte Zeile nicht leer ist.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 13. Jan 2005, 07:51
Hallo Christian,

vielen Dank erstmal für die schnelle Antwort.

Deine Methode ist zumindest schonmal die richtige Vorgehensweise, was den Befehl angeht.

Das was ich lösen wollte geht aber immernoch nicht, ich wende es scheinbar nicht richtig an.

Beispiel:

line[0] ist beschrieben, line[1] nicht, line[2] ist wieder beschrieben usw.

ich wollte nun eine Routine starten, welche die "leeren" Zeilen wirklich löscht und den Text wieder zusammenrückt.

Wende ich den Befehl nun folgendermaßen an:
Delphi-Quellcode:
if memo1.lines[1] = 'then begin
 memo1.selstart(2); //soll denn Cursor eine Zeile "untendrunter" ansetzen
 Memo1.Lines.Delete(Memo1.Lines.Count-1); //dein Befehl....
end;
usw.
dann löscht er das komplette memo

Gruß
Padavan
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 13. Jan 2005, 08:03
Hi!
Seltsames Problem Versuch mal deinen Code so umzuschreiben, dass diese "Löcher" gar nicht erst entstehen. Ansonsten könntest du folgendes versuchen
 Memo1.Lines.Text := StringReplace(Memo1.Lines.Text, #13#10#13#10, #13#10, [rfReplaceAll]);
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 13. Jan 2005, 08:52
Diese "Löcher" sollten eigentlich gar nciht entstehen können. (Solange man sich dabei nicht selbst ferfriemelt )

Zum Löschen brauchst du nur für jede leere Zeile Delete aufrufen.
Kleines Beispiel:
Delphi-Quellcode:
program RemoveEmptyLines;

{$APPTYPE CONSOLE}

uses
   SysUtils,
   Classes;

var
   StringList : TStrings;
   i : Integer;
begin
   StringList := TStringList.Create();
   StringList.Add('1');
   StringList.Add('2');
   StringList.Add('');
   StringList.Add('4');

   i := 0;
   while i < StringList.Count do
   begin
      if StringList[i] = 'then
         StringList.Delete(i)
      else
         Inc(i);
   end;

   for i := 0 to pred(StringList.Count) do
      Writeln(StringList[i]);

   Sleep(5000);
end.
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 13. Jan 2005, 12:19
bei der Anweisung
Writeln(StringList[i]); gibt´s ´ne Exception

zum Thema "selbst drin rumgefrimelt",
da habt ihr schon recht...

Habe einen Player programmiert, bei dem das Memo als "offene" Playlist dient.
Klickt man nur mit der Maus drin rum und benutzt quasi meine vorgegebenen Möglichkeiten
bleiben auch keine Leerzeilen zurück.

Ich wollte quasi eine Möglichkeit bieten die Playlist "aufzuräumen" falls man per Hand drin rumgefrimelt hat.

Padavan
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 13. Jan 2005, 15:33
Muss es denn eine Memo sein? Eine ListBox wäre für deine Zwecke doch viel besser geeignet?!
Dani H.
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 14. Jan 2005, 09:32
Hallo Dani,
da hab ich auch schon drüber nachgedacht,
ich glaub die Idee ist wirklich gut.
Ich habe gegenüber des Memos eigentlich keine Nachteile.

Außer:
Kann man bei einer Listbox auch mehrere Einträge markieren?
(Mit der Maus meine ich.)
  Mit Zitat antworten Zitat
Harald

Registriert seit: 23. Dez 2003
Ort: Steinigtwolmsdorf
39 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 14. Jan 2005, 10:11
Hallo,

mit MultiSelect:=true sollte das gehen.

Gruß
Harald
Wissen ist das einzige Gut, welches sich vermehrt, wenn es geteilt wird ...
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Bei einem memo leere Zeilen richtig löschen

  Alt 15. Jan 2005, 16:07
stimmt, danke für eure hilfe,

werde gleich dieses WE angangen, meinen Programm auf Listbox statt memo zu ändern.

Eine Sache hab ich im "Vortest" noch nicht geschafft.
Eine funktion wie caretpos zum bestimmen der CursorPosition muss es doch bei Listbos auch geben, oder? Kann mir jemand sagen wie das da geht?

Danke
Padavan
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:05 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