[Delphi] Odczytywanie elementu listy

Odpowiedz Nowy wątek
2007-01-01 05:33
0

Witam, stworzyłem sobie obiekt typu TLista, który się zwie Lista. Dodałem kilka elementów do listy, sprawdziłem Count i rzeczywiście jest tam tyle elementów ile dodałe. Jednak mam problem z odczytaniem, którego kolwiek elementu. Robie wszystko wg. kursów z neta i za cholere nie chce mi się skompilować program.

Ani to

  StrBuffer := IntToStr(TPoint(Lista[1]).X);
  Wykres.Canvas.TextOut(200,200,StrBuffer);

ani to

  StrBuffer := IntToStr(TPoint(Lista.Items[1]).X);
  Wykres.Canvas.TextOut(200,200,StrBuffer);

nie działa. Otrzymuję komunikat : Invalid typecast. Aha no i nie wspomniałem, że lista zawiera zbiór punktów (TPoint). Czyli wszystko powinno być ok. Nie wiem czemu niby źle rzutuje typ. Może ktoś pomóc? Dzięki...


Pozostało 580 znaków

2007-01-01 10:19
zenq
0

IntToStr z TPoint ? to chyba nie ma prawa działać

Pozostało 580 znaków

2007-01-01 11:02
0

IntToStr nie z TPointa tylko X/Y i to ma prawo działać. Pokaż jeszcze definicję klasy.


Pozostało 580 znaków

2007-01-01 12:23
0

Przecież najpierw rzutuje obiekt Lista na typ TPoint, a dokładnie pierwszy element listy.Następnie odwołuje się do właściwości X obiektu TPoint. A, że element X jest liczbą integer to później zamieniam to przy użyciu IntToStr na string.

Wypełnianie listy wartościami:

procedure TForm1.TimerTimer(Sender: TObject);
var pt : TPoint;
begin
  if (Czas / 1000) <= CzasRzutu then
  begin
    Czas := Czas + (Timer.Interval * 2);

    KulaX := x(ator(PredkoscPoczatkowa.Text),
               (Czas / 1000),
               ator(Kat.Text));
    KulaX := KulaX + KulaXStart;

    KulaY := y(ator(PredkoscPoczatkowa.Text),
               (Czas / 1000),
               ator(Kat.Text));
    KulaY := 340 - (KulaY + KulaYStart);

    pt.X := Round(KulaX);
    pt.Y := Round(KulaY);
    Lista.Add(@pt);

    Wykres.Invalidate;
  end

EDIT: Hmmm dziwna sprawa, na początku miałem obiekt listy zadeklarowany w sekcji Private klasy TForm, zmienilem liste na zmienna globalna i nagle mogę rzutować. Może ktoś mi to wyjaśnić? Jednak ciągle jest mały problem bo lista zawiera kilka pól, z których każde ma taką samą wartość, tak jakby coś było źle przy dodawaniu elementów. Aha i chce zaznaczyć, że napewno zmienne KulaX i KulaY mają przy każdym wywołaniu funkcji timera inną wartość, tak więc takie same pola w liście nie są spowodowane złymi obliczeniami...

EDIT: Ok zrobiłem... trzeba było użyć wskaźnika na TPoint a nie przekazywać fo metody Add tylko adres punktu. Dzięki za zainteresowanie, pozdrawiam. Szczęśliwego Nowego Roku ;)


Pozostało 580 znaków

2010-07-06 10:28
Daniel___
0

Pewnie nie aktualne ale dla potomnosci:

TList zawiera liste wskaznikow wiec teraz rzutujesz wskaznik na TPoint. Nie ma prawa sie skompilowac.

TPoint(Lista.Items[1]^).X

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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