Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Memo - zeigt nur 2 Lines statt 12 Lines an... (https://www.delphipraxis.net/182308-memo-zeigt-nur-2-lines-statt-12-lines.html)

hathor 16. Okt 2014 14:15

AW: Memo - zeigt nur 2 Lines statt 12 Lines an...
 
Man könnte grundsätzlich gleich in der procedure xxxx.Create folgende Zeile aufnehmen:

for i := 0 to 999 do Memo1.Lines.Add('');

Dann funktioniert der Code in #1 problemlos.

Alternative:
Man hängt an jedes String-Ende #13#10 an, dann geht es auch:
Delphi-Quellcode:
procedure TForm2.Button6Click(Sender: TObject);
var i : Integer;
begin
Memo1.Clear;
for i := 0 to 1002 do Memo1.lines.strings[i] := INTTOSTR(i)+#13#10;
end;

himitsu 16. Okt 2014 14:49

AW: Memo - zeigt nur 2 Lines statt 12 Lines an...
 
Zitat:

Zitat von Christian Seehase (Beitrag 1276224)
Das hätt' ich auch gedacht.

Vielleicht haben die das irgendwann umgebaut?

Bei TStringList wird ein EStringListError "Listenindex überschreitet das Maximum (%d)" ausgelöst.

Beim TMemoStrings (das im TMemo.Lines) wurde einfach die Fehlerprüfung vergessen, bzw. man hat vergessen die Exception einzubauen und verwirft den Fehler ganz böswillig.
Delphi-Quellcode:
function TMemoStrings.Get(Index: Integer): string;
var
  Text: array[0..4095] of Char;
begin
  Word((@Text)^) := Length(Text);
  SetString(Result, Text, SendMessage(Memo.Handle, EM_GETLINE, Index, Longint(@Text)));
end;
Bei Google suchenEM_GETLINE > The return value is zero if the line number specified by the wParam parameter is greater than the number of lines in the edit control.
Delphi-Quellcode:
procedure TMemoStrings.Put(Index: Integer; const S: string);
var
  SelStart: Integer;
begin
  SelStart := SendMessage(Memo.Handle, EM_LINEINDEX, Index, 0);
  if SelStart >= 0 then begin
    SendMessage(Memo.Handle, EM_SETSEL, SelStart, SelStart + SendMessage(Memo.Handle, EM_LINELENGTH, SelStart, 0));
    SendTextMessage(Memo.Handle, EM_REPLACESEL, 0, S);
  end
  {else raise exception .... wurde vergessen}
end;
Bei Google suchenEM_LINEINDEX > it is –1 if the specified line number is greater than the number of lines in the edit control.

Bei praktisch jedem einzelnen SendMessage/SendTextMessage wurde vergessen das Result zu prüfen. :wall:
(außer bei dem einen SendMessage(LINEINDEX))



Es kann natürlich auch sein, daß man es auch bei anderen Komponenten vergessen oder wieder ausgebaut hat. :stupid:
Hab nicht nachgesehn, aber ich hoffe die machen nicht beim FMX mit diesem Mist so weiter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.
Seite 2 von 2     12   

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