AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Innere Struktur von TStrings / TMemo

Ein Thema von p80286 · begonnen am 27. Mär 2015 · letzter Beitrag vom 28. Mär 2015
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von p80286
p80286

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

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.270 Beiträge
 
Delphi 10.4 Sydney
 
#12

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
Popov
(Gast)

n/a Beiträge
 
#13

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
 
#14

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
 
#15

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 jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.330 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Innere Struktur von TStrings / TMemo

  Alt 28. Mär 2015, 03:46
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.
Doch, TMemoStrings arbeitet schon genau so wie es das tun soll. Nur ist es eben nicht dafür gedacht zu etwas anderes als zur Anzeige oder Benutzereingabe zu dienen wie ja richtigerweise auch schon im Eingangspost steht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#17

AW: Innere Struktur von TStrings / TMemo

  Alt 28. Mär 2015, 07:40
Nur ist es eben nicht dafür gedacht zu etwas anderes als zur Anzeige oder Benutzereingabe zu dienen wie ja richtigerweise auch schon im Eingangspost steht.
Wenn Du mal einen 'Zeilenumbruch' anhand von Buchstabenbreiten implementieren willst, dann ist ein TMemo offensichtlich genau das Richtige.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#18

AW: Innere Struktur von TStrings / TMemo

  Alt 28. Mär 2015, 09:48
Doch, TMemoStrings arbeitet schon genau so wie es das tun soll. Nur ist es eben nicht dafür gedacht zu etwas anderes als zur Anzeige oder Benutzereingabe zu dienen wie ja richtigerweise auch schon im Eingangspost steht.
Mit "das bei TMemo TStrings nicht so arbeitet wie es eigentlich tun sollte." meinte ich nicht, dass TStrings in TMemo unberechenbar ist und sonderbar arbeitet, sondern, dass es nicht 100% die Eigenschaft hat die es haben müsste. Beispiel: Lines von TMemo ist TStrings. TStrings kann Objekte fassen, Lines nicht. Obwohl es TStrings ist. Das meinte ich u. a. mit: "wie es eigentlich tun sollte".

Wenn man eine Klasse kennt, dann erwartet man immer gleiches Verhalten. Hier ist es nicht der Fall.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Innere Struktur von TStrings / TMemo

  Alt 28. Mär 2015, 09:58
Es verhällt sich alles genau so, wie es soll.

Bezüglich der Zeilenumbrüche funktioniert alles vollkommen richtig, genau so wie es die Definition der Komponente besagt.

TStrings bietet die Möglichkeit Objekte zu speichern, aber es muß nicht implementiert sein.
Gut, ich empfinde es schon immer als Fehler, daß der Objects-Setter von TMemoStrings keine Exceptions wirft, aber auf mich hört ja keiner.
Und nein, da MEMO es nicht anbietet, daß Zeilenbasiert Informationen gespeichert werden können, kann auch Lines dieses Feature nicht anbieten.
Bei TStringList und dn Items einer TListBox ist das was Anderes, denn dort besitzen die Komponenten einen Speicher dafür.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#20

AW: Innere Struktur von TStrings / TMemo

  Alt 28. Mär 2015, 10:20
Sonderbar, im ersten Post steht etwas über Probleme, aber kaum geht man drauf ein, schon behaupten alle, dass alles so ist wie es sein soll. Wozu dann die Frage?

Natürlich ist es so wie es sein soll. Deshalb auch der Hinweis in der Hilfe. Hat zwar jetzt nichts mit dem Thema zu tun, aber mit TStrings:
Zitat:
Hinweis: Obwohl die Eigenschaft Lines von TStrings abgeleitet ist, implementiert sie keine Unterstützung für das Zuordnen von Objekten zu den Listen-Strings.
Hinweise sind ja auch dazu da übliches Unübliches üblich zu machen.
  Mit Zitat antworten Zitat
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 07:43 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