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?
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?
Można, tablica się nazywa:
Temp^.ABC[0], Temp^.ABC[1], Temp^.ABC[2];
Zmeinna:=2;
Temp^.ABC[Zmeinna]
a da się bez tablicy, zalezy mi zeby bylo bez...?
@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ą).
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.
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.
Jeżeli zmienna jest właściwością typu published to da się z nazwy.
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ć.