AGB  ·  Datenschutz  ·  Impressum  







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

Innere Struktur von TStrings / TMemo

Ein Thema von p80286 · begonnen am 27. Mär 2015 · letzter Beitrag vom 28. Mär 2015
Antwort Antwort
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#1

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 15:12
Ich verstehe gar nicht, wieso Du nun hier die Welle machst.
Ich mache ja keine Welle, sondern will nur EINDEUTIG verstehen, was er tun möchte.

Den Kommentar hast Du so verstanden, dass dort ll befüllt wird. Aslo statt des Kommentars die Füllanweisung steht.

Ich jedoch war mir nicht sicher, denn der Kommentar kann auch aussagen, dass jetzt das Befüllen ll in der For-Schleife stattfinden soll. Es könnte ja ein verbleibendes Kommentarreststück aus dem OriginalCode sein.

Und dann wäre schon der Code falsch.

Und wenn für Dich alles so einleuchtend ist, dann hätte er auch eine globale Variable i.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#2

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 15:19
Ich kenne K-H nun schon lange genug, um zu wissen, dass er so blöd nicht ist. Einerseits wird immer darauf gepocht, nur den relevanten Code zu posten, andererseits wird sich dann darüber echauffiert, wenn man ihn entsprechend eindampft. Aber gut, wenn das hier wieder so ein 40-Seiten-Thread werden soll, weil man sich an Niggeligkeiten hochzieht, dann bitteschön, ich bin hiermit raus, zumal himitsu ja wohl den entscheidenden Hinweis bereits gegeben hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 15:28
Ach ja, nur um nochmal den Grund zu erklären, warum das nicht so geht, mit Zeilenumbrüchen in Zeilen.
  • TMemoStrings (die Komponente in TMemo.Lines) ist ein Wrapper auf die Zeilen des Memos
  • eine Zeile ist eine Zeile
  • eine Zeile mit Zeilenumbrüchen drin ist mehrere Zeilen
  • TStringList dagegen verwaltet jede "Zeile" als einen eigenen "String" und da kann alles rein, was es so gibt, ohne daß es auswirkungen auf Nachbar-Strings hat, jedenfalls solange man die Strings als String belässt und es nicht zwischenzeitlich zusammengemanscht als "gemeinsamen" Text behandelt.


[edit]
Noch ein Post hat Platz, bis die Seite voll ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#4

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 20:11
Wir füllen ja sie Stringliste mit der Funktion Add.

Diese hängt offensichtlich den WagenrücklaufUndZeilenvorschub x0d0a automatisch an. Nicht das Tmemo ist dafür zuständig, sondern das TStringlist Objekt.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 22:56
@ #10

Also ich erkenne auf dem Weg zum Speicher keine Änderung an dem String. Zu beachten ist auch, dass der String stets als Konstante übergeben wird.
Delphi-Quellcode:
function TStringList.Add(const S: string): Integer;
begin
  Result := AddObject(S, nil);
end;

function TStringList.AddObject(const S: string; AObject: TObject): Integer;
begin
  if not Sorted then
    Result := FCount
  else
    if Find(S, Result) then
      case Duplicates of
        dupIgnore: Exit;
        dupError: Error(@SDuplicateString, 0);
      end;
  InsertItem(Result, S, AObject);
end;

procedure TStringList.InsertItem(Index: Integer; const S: string; AObject: TObject);
begin
  Changing;
  if FCount = FCapacity then Grow;
  if Index < FCount then
    System.Move(FList^[Index], FList^[Index + 1],
      (FCount - Index) * SizeOf(TStringItem));
  with FList^[Index] do
  begin
    Pointer(FString) := nil;
    FObject := AObject;
    FString := S;
  end;
  Inc(FCount);
  Changed;
end;

function TStringList.Find(const S: string; var Index: Integer): Boolean;
...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 23:12
@Popov

Das war und ist auch nicht das Problem, sondern das spezielle Verhalten der konkreten TStrings Klasse bei einem TMemo .

Der gesamte Code mit dem kopieren und befüllen von TStrings ist irrelevant und eher störend. Das beobachtete Verhalten kann man ganz simpel mit einem TMemo nachstellen.
Delphi-Quellcode:
procedure TForm1.Button2Click( Sender: TObject );
begin
  Memo1.Width := 105;
  Memo1.Text := 'Dieses ist ein toller langer Text der in einem Memo angezeigt werden soll.';
  ShowMessage( IntToStr( Memo1.Lines.Count ) ); // 5
  ShowMessage( Memo1.Lines.Text ); // trotzdem nur eine Zeile ohne Zeilenumbrüche
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 23:45
Das genannte Problem von p80286 eine Komponente als Datenspeicher zu missbrauchen ist in diesem Fall ein Ausnahmeproblem. Es ist kein TStrings Problem, auch kein TListBox Problem, sondern nur ein TMemo Problem.

Meine Antwort bezog sich übrigens auf den Hinweis in Post #10.

Hätte p80286 statt TMemo TListBox genommen, sein Problem wäre vermutlich nicht aufgefallen. TListBox ändert nichts, speichert aber ähnlich wie TMemo. Nur das Bearbeiten des Textes geht nicht so einfach wie bei TMemo.

Ich weiß nicht wo ich den Hinweis gelesen habe, ob im Code oder der Hilfe, auf jeden Fall stand dort, das bei TMemo TStrings nicht so arbeitet wie es eigentlich tun sollte.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 21:45
TMemoStrings (die Komponente in TMemo.Lines) ist ein Wrapper auf die Zeilen des Memos
Danke! ich denke das war's
in .Lines finden sich die angezeigten Zeilen des Memos bzw. die Zeilen so wie sie angezeigt würden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Innere Struktur von TStrings / TMemo

  Alt 27. Mär 2015, 21:54
Hallo,
schön wäre es gewesen, mal anständige Variablennamen zu benutzen ...

Heiko
Heiko
  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 21:45 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