Dopisywanie do elementu stalej wartosci

0

Nie wiem jak w sumie nazwać ten temat. Chodzi mi o coś takiego,że np mam wskaźnik "Temp",
i on moze odwoływać się do

Temp^.A, Temp^.B, Temp^.C

. I moje pytanie czy można jakoś tak zrobić, że np. Zmienna='C' i Temp^.Zmienna ? Albo cos w tym stylu?

0

Można, tablica się nazywa:

Temp^.ABC[0], Temp^.ABC[1], Temp^.ABC[2];
Zmeinna:=2;
Temp^.ABC[Zmeinna]
0

a da się bez tablicy, zalezy mi zeby bylo bez...?

0

@andrzejbodziuzbychujarek - może tak wyjaśnij dokładnie co masz i co chcesz zrobić;

andrzejbodziuzbychujarek napisał(a)

I moje pytanie czy można jakoś tak zrobić, że np. Zmienna='C' i Temp^.Zmienna ? Albo cos w tym stylu?

Bez urazy, ale z Twojego bełkotu niewiele można wywnioskować... Kodu pokaż więcej, a zawsze znajdzie się jakieś rozwiązanie (chyba że oczekujesz jakiegoś dziwactwa sprzecznego ze składnią).

0

No bo się uczę wszystkiego w ekspresowym tempie...;/ Nie mam czasu by wszystko dokładnie ogarniać, tego języka uczę sie tylko do zaliczenia pozniej nie bede mial juz z nim stycznosci.
Nie wiem w sumie jak napisać o co mi chodzi:
Mam zrobiony record, oraz wskaznik na ten rekord. I np do jakiegoś pola odwołuję się:

Temp^.Imie 

i chodzi mi czy moge to przy Temp^ . jakos zapisac z drugą zmienna, a ta druga zmienna ma zawierać string 'Imie', czyli np:

Temp^ .Zmienna  czy Temp^ .'Zmienna'

.. czy wgl jest to możliwe.

1

Mam zrobiony record, oraz wskaznik na ten rekord.

Pokaż ich kod.

Już rozumiem, nie możesz czegoś takiego zrobić - musisz znać nazwę pola, nie możesz jej podstawić ze zmiennej łańcuchowej.

0

Jeżeli zmienna jest właściwością typu published to da się z nazwy.

1

Heh, sprawdziłem bo myślałem, że znasz jakąś magiczną sztuczkę, ale raczej nie ma możliwości tego dokonać dla struktur (chyba że magia ze wskaźnikami - kiedyś coś w tym stylu pokazywał @Patryk27 o ile dobrze pamiętam);

Dla klas oczywiście że można, ale nie tak jak chciał pytacz; Za pomocą funkcji GetPropInfo można pobrać wskaźnik do struktury z informacjami o polu danej właściwości i odpowiednią funkcją ustawić jej nową wartość, ale właściwość tak jak wspomniałeś - musi być w sekcji Published;

Przykład dla właściwości łańcuchowej:

uses
  TypInfo;

type
  TFoo = class(TObject)
  private
    FName: AnsiString;
  public
    constructor Create(AName: AnsiString);
  published
    property Name: AnsiString read FName write FName;
  end;

  constructor TFoo.Create(AName: AnsiString);
  begin
    inherited Create();
    FName := AName;
  end;

var
  fooItem: TFoo;
  piName: PPropInfo;
begin
  fooItem := TFoo.Create('_13th_Dragon');
  try
    WriteLn('Name: ', fooItem.Name);
    piName := GetPropInfo(fooItem.ClassInfo, 'Name');

    if Assigned(piName) then
      SetStrProp(fooItem, piName, 'Furious Programming');

    WriteLn('Name: ', fooItem.Name);
  finally
    fooItem.Free();
    ReadLn;
  end;
end.

na wyjściu dostaniemy:

Name: _13th_Dragon
Name: Furious Programming

Jest więcej funkcji pozwalających na ustalanie nowych wartości dla właściwości (a raczej pól tych właściwości):

i jeszcze kilka innych, ale nie chce mi się ich wszystkich wymieniać.

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