Hmm... powiedzmy że nie wiem co to jest ten "HashTable".... Jak kolwiek. Wyprobowalem inna metode, za pomoca rekordow
type PVariable = ^TVariable;
TVariable = object
Name : pchar;
Value : variant;
end;
Jednak coś w moim kodzie jest nie tak... pomóżcie mi znaleźć niedoszlifowany element
var
Form1: TForm1;
variables : TList;
implementation
{$R *.dfm}
function GetVariableByName(name : PChar):PVariable;
var v : PVariable; i : integer;
begin
{-- Wydobądź zmienną z listy --}
result := nil;
for I := 0 to variables.Count-1 do
begin
v := variables[i];
if v^.Name = name then
result := variables[i];
end;
end;
function VariableExists(name:pchar):boolean;
begin
{-- za pomocą GetVariableByName() sprawdzamy istnienie zmiennej --}
if GetVariableByName(name) = nil then
result := false else result := true;
end;
function CreateVariable(name : PChar; value : variant):boolean;
var v : PVariable;
begin
{-- Tutaj jest tworzona zmienna --}
result := true;
if variables = nil then
begin
variables := TList.Create;
variables.Clear;
end;
if VariableExists(name) = true then exit;
if name = '' then
begin
result := false;
exit;
end;
v := New(PVariable);
v^.Name := name;
if @value = nil then
begin
result := false;
exit;
end;
v^.Value := value;
variables.Add(v);
end;
function ChangeValue(name:pchar;newvalue:variant):boolean;
var av : PVariable;
begin
{--
... zamiana wartości zmiennej.
... nie sprawdzone, poniewaz nie moge sie odwolac do czegos co nie istnieje
... (czyt. dalej)
--}
result := false;
if GetVariableByName(name) = nil then exit;
av := GetVariableByName(name);
av^.Value := newvalue;
result := true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{-- Tworzymy przykładowe zmienne --}
CreateVariable('Welcome','Welcome into my realm!');
CreateVariable('W2','Sample msg no. 2');
{-- Odwołujemy się do nich --}
showmessage(GetVariablebyname('Welcome').Value);
showmessage(GetVariableByName('W2').Value);
showmessage(BoolToStr(VariableExists('Welcome'),true));
{-- Wszystko jak na razie dziala --}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//ChangeValue('Welcome',edit1.Text);
{-- Odwołujemy się do zmiennej jeszcze raz --}
showmessage(GetVariablebyname('Welcome').Value);
{-- No i mamy problem. Odwołujemy się do obszaru w pamięci który NIE ISTNIEJE --}
{-- Tak dla pewności, sprawdzamy obecność zmiennej --}
showmessage(BoolToStr(VariableExists(pchar(edit1.Text)),true));
{-- Wiadomość jest krótka. "False" --}
end;
{--
... No więc teraz proszę o pomoc, i wskazać mi coś, co jest dla mnie niewidoczne.
... Mi tu nie gra tylko jedno: Utworzona i działająca zmienna /eng/ does no longer exist /pl/,
... mimo, że jej z pamięci nie wywalałem.
--}
end.