Wypisywanie zawartości tablicy do memo

0

Jak wypisać wartości zawarte w tablicy do TMemo?

0

Napisz coś więcej - jakiego typu tablica, czy ilość elementów jest stała, jak chcesz to sformatować w Memo, co zrobić jeśli jakiś element tablicy jest pusty itp.

Zasadniczo to w pętli "przelatujesz" po tablicy, pobierasz po kolei każdy element i dodajesz/wypisujesz go tam, gdzie chcesz ;)

0
procedure Tmain.Button1Click(Sender: TObject);
var
  Tablica: array[0..100] of Integer;
  I: Integer;
begin
  for I := Low(Tablica) to High(Tablica) do
    Tablica[I] := I;

  for I := Low(Tablica) to High(Tablica) do
    Memo1.Lines.Add(I.ToString);
end;
2

Tak z ciekawości zaglądnąłem na forum i widzę, że beze mnie to tu cieniutko jest… więc przerywam milczenie. :]

Nie no żartuję, ale Panowie – pętlami to się 20 lat temu robiło… Od dawien dawna klasa TStringList posiada metodę AddStrings (sio do dokumentacji), która pozwala dodać do zawartości listy całą zawartość wejściowej macierzy. Przykładu w Delphi nie podam, bo nie mam jak tego sprawdzić, ale w Lazarusie (w trybie zgodności z Delphi) można to zrobić tak:

uses
  SysUtils, Classes;
var
  List: TStringList;
  Values: TArray<String>;
begin
  Values := TArray<String>.Create('foo', 'bar', 'bald');

  List := TStringList.Create();
  List.AddStrings(Values);

  {..}

Oczywiście nic nie stoi na przeszkodzie, aby użyć zwykłej macierzy (o statycznym lub dynamicznym rozmiarze) i taką do tej metody przekazać. Tak więc poniższy przykład też powinien działać prawidłowo:

uses
  SysUtils, Classes;
type
  TValues = array of String;
var
  List: TStringList;
  Values: TValues;
begin
  Values := TValues.Create('foo', 'bar', 'bald');

  List := TStringList.Create();
  List.AddStrings(Values);

  {..}

Od dawna już dla macierzy dostępne są wygodniejsze konstrukcje niż SetLength i pętle, których należy używać.

0

Niby się zgadzam, ale nie do końca.
Twój sposób jest OK, ale trzeba tworzyć jakieś nowe byty - Values := TValues.Create('foo', 'bar', 'bald');.

Z pytania, które OP zadał wynika (a przynajmniej ja tak zrozumiałem), że posiada już jakąś tablicę, którą chce wpisać do kontrolki. Rozwiązanie z przeleceniem przez tablicę jest uniwersalne, niekoniecznie optymalne, ale należy też pamiętać o poziomie osoby pytającej, która niekoniecznie musi rozumieć (a także dostosować do swoich potrzeb) różne "nowoczesne patenty" ;)

0

Nie trzeba – oba dialekty pozwalają wykorzystać skonkretyzowany typ tablicy w miejscu jej tworzenia, tak jak pokazałem w przykładzie z generycznym TArray. Przy czym Free Pascal w trybie {$MODE OBJFPC} nie pozwala na taki zabieg obecnie, ale w najnowszym ”trunku” taka funkcjonalność została dodana, o czym poinformował mnie jeden z deweloperów kompilatora w jednej z dyskusji na temat generyków.

Tyle że różnica polegać będzie na konieczności użycia słówka specialize:

uses
  SysUtils;
var
  Values: specialize TArray<String>;
begin
  Values := specialize TArray<String>.Create('foo', 'bar', 'bald');

Druga sprawa jest taka, że w normalnych projektach nie powinno się używać takich dzikich typów danych, bo takie rozwiązanie nie jest elastyczne. Ale dla prostych aplikacji testowych taka funkcjonalność jest przydatna.


No, napisałem co miałem napisać – na razie. :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1