Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Как "превратить" строку в имя переменной?:   Найти похожие ветки 

 
Алексей2   (2004-04-14 15:52) [0]

У меня есть строка "edit10r" и описана переменная вещественного типа edit10r: real;
Как мне сделать такую вещь чтобы:
Некая_функция("edit10r"):=43.5;  было аналогично:
edit10r:=43.5;
Т.е. "превратить" мою строку в имя переменной (уже описанной в глобальном Var"е)


 
WebErr ©   (2004-04-14 15:54) [1]

А поподробнее проблему можно? :)


 
panov ©   (2004-04-14 15:56) [2]

Никак.


 
Reindeer Moss Eater ©   (2004-04-14 15:56) [3]

TStringList.Values["edit10r"]:="43.5";


 
Тимохов ©   (2004-04-14 15:56) [4]

никак


 
Алексей2   (2004-04-14 15:58) [5]

Хм.. куда уж подробнее) Ну в общем, мне нужно в зависимости от имени эдита куда вводится число в соответствующую переменную сохранять его содержимое. Как связать эдит и соответствующую ему переменную?

Сейчас у меня есть несколько "эдитов" на форме и все они привязаны к единому OnChange. По Tedit(sender) я могу определить имя эдита в котором были изменения. В тот же миг желательно это изменённое данное сложить в соответствующую (например edit10 соответствует переменная edit10r и т.д.) переменную типа real.


 
Reindeer Moss Eater ©   (2004-04-14 15:59) [6]

Как все запущено


 
Чих-пых   (2004-04-14 16:00) [7]

Если ты уже описал переменную, то имя ты ей не поменяешь. Надо делать это как-то по другому. Для чего тебе надо присвоить переменной новое имя?


 
Reindeer Moss Eater ©   (2004-04-14 16:02) [8]

TStringList.Values["edit10r"]:="43.5";


 
Чих-пых   (2004-04-14 16:02) [9]

Дык свяжи их массивом! При изменении эдита изменяется значение соответствующего элемента массива


 
Алексей2   (2004-04-14 16:04) [10]

2 Reindeer Moss Eater:
"TStringList.Values["edit10r"]:="43.5"; "????

2 Чих-пых
"Если ты уже описал переменную, то имя ты ей не поменяешь. Надо делать это как-то по другому. Для чего тебе надо присвоить переменной новое имя?"
Я не хочу менять имя!!! Я лишь хочу поставить переменную в соответствие edit"у (см выше описание проблемы). Может можно ещё как? Но самое просто - по имени..


 
Алексей2   (2004-04-14 16:05) [11]

"Дык свяжи их массивом! При изменении эдита изменяется значение соответствующего элемента массива"
Каааааааааааааааааак связать?


 
Amoeba ©   (2004-04-14 16:06) [12]

Идентификация Edit"а по св-ву Tag


 
Reindeer Moss Eater ©   (2004-04-14 16:06) [13]

Веревкой


 
Digitman ©   (2004-04-14 16:07) [14]


> Алексей2


в ран-тайм понятия "имя переменной" уже не существует ... ну нет никаких имен у переменных в этот момент ! ... только адреса ячеек памяти ... кроме как для отладчика, если к тому были приняты соотв.меры

"имена переменных" имеют смысл только для компилятора и время жизни этих имен равно времени жизни процесса компиляции/сборки .. в ран-тайм, если  речь не идет об отладке, об "именах переменных" можешь смело забыть


 
Алексей2   (2004-04-14 16:08) [15]

"Веревкой"
Ок (ушёл за верёвкой и мылом с табуреткой)

2 Amoeba ©
"Идентификация Edit"а по св-ву Tag"
Спасибо за направление в котором можно копать


 
Amoeba ©   (2004-04-14 16:08) [16]


> Но самое просто - по имени..

Имена пременных существуют только в исходном тексте программы. В откомпилированном коде даже и намека на них нет.


 
metalfan ©   (2004-04-14 16:15) [17]


> Reindeer Moss Eater ©   (14.04.04 16:02) [8]
> TStringList.Values["edit10r"]:="43.5";

наманый совет по моему!
обрабочик OnChange edit"a

...
TxxxxForm = class(TForm)
...
private
 FStringList: TStringList;
...
procedure TxxxxForm.OnCreate(Sender: TObjet);
begin
 FStringList:= TSTringList.Create;
end
...
procedure TxxxxForm.OnDestroy;
begin
 FStringList.Free;
end;
procedure TxxxxForm.OnEditChange(Sender: TObjet);
begin
FStringList.Values[TEdit(Sender).Name]:= TEdit(Sender).Text;
...


 
Алексей2   (2004-04-14 16:16) [18]

"в ран-тайм понятия "имя переменной" уже не существует"
"Имена пременных существуют только в исходном тексте программы. В откомпилированном коде даже и намека на них нет."
Так... что-то я не понимаю? Как это связано с моей проблемой?


 
default ©   (2004-04-14 16:17) [19]

Алексей2   (14.04.04 16:08) [15]
"Спасибо за направление в котором можно копать"
ничего копать больше не нужно всё уже раскопано
поскольку Tag размером 4 байта используй Single
типа
Single(TEdit(Sender).Tag) := 43.5


 
Digitman ©   (2004-04-14 16:26) [20]


> Как это связано с моей проблемой?


напрямую связано
в ран-тайм нельзя обратиться к переменной по тому имени, которое она имела в любой момент времени ДО ран-тайм


 
vl_chel ©   (2004-04-14 16:38) [21]

Очень просто:
Написать для своего приложения чтото типа VBA:
создать коллекции объектов в приложении с реализацией для них диспинтерфейсов;
Реализовать в своем приложении интерфейс IDispatch;
пользоваться своим приложением как СОМ сервером ;))


 
Digitman ©   (2004-04-14 16:41) [22]


> vl_chel ©   (14.04.04 16:38) [21]
> Очень просто:


человек сдуру настрогал кучу переменных вместо того чтобы заранее предусмотреть такую ситуацию, переделывать алгоритм вроде бы не желает и теперь парится, как ему выкрутиться из этой задницы) .. а ты - IDispatch) .. да мало ли иных решений ! важно ж понять ему, как он был неправ изначально)


 
WebErr ©   (2004-04-14 16:45) [23]

Вообще-то можно менять имена переменных в Run-time при помощи такой конструкции как NameSpace, по крайней мере в С++ было можно, но никому с этим возиться я не пожелаю! В общем-то мне очень нравится сохранять подобные "Эдиты" в TStrings в виде Name=Value, а потом брать их оттуда при помощи свойства Value[]. (Т.е. (с) [3]).


 
Алексей2   (2004-04-14 16:46) [24]

"человек сдуру"
"переделывать алгоритм вроде бы не желает и теперь парится, как ему выкрутиться из этой задницы) "
Совершенно верно:)
Кстати, попробовал кое-что (что понял из этой ветки) - не помогло пока....
"как он был неправ изначально)"
Это я уже понял..  Только осознание сего не слишком помогает, когда уже проект готов и переделка равносильна самоубийству. Нужна модификация малой кровью.


 
WebErr ©   (2004-04-14 16:51) [25]


> Digitman ©   (14.04.04 16:41) [22]

Почему неправ? Очень может быть, что и прав! (Хотя всё-таки вряд ли!) В любом случае проблема очень интересная! :))))
Можно создавать что-то вроде линейного списка с инфо-частью: String!!! Выделять под новый эдит память - и нафиг нам новые переменные, когда есть элементы линейного списка, которые я могу создавать когда хочу, где хочу и почти столько сколько хочу - всегда столько, сколько мне нужно!!! :))))


 
WebErr ©   (2004-04-14 16:52) [26]


> Алексей2   (14.04.04 16:46) [24]

Линейные списки посложнее, но поуниверсальнее!
Стрингс - покорявее, но проверена и надёжна!
Выбор за тобой! :))))


 
Алексей2   (2004-04-14 16:54) [27]

Линейный список? Так так.. это уже что-то совсем близкое родное (я студент, только что была контрольная по линейным спискам.. только на С++, но всё равно забавно:)).
А ведь сразу и не сообразил...


 
Digitman ©   (2004-04-14 16:57) [28]


> Алексей2


ну что у тебя, миллион этих переменных что ли ?

долго ли собрать их в одну "кучу", в один модуль ? смежным блоком ? тогда можно попытаться обойтись малой кровью, добавив массив ссылок (да тот же TStringList вполне подойдет) ..


 
WebErr ©   (2004-04-14 16:57) [29]


type
 PSome = ^TSome;
 TSome = record
   Info: String;
   Prev, Next: PSome;
 end;

И вперёд навстречу ветру!!! :))))


 
Digitman ©   (2004-04-14 16:59) [30]

var

 i1, i2, ...., iN: Integer;

...

StringList.AddObject("i1", @i1);
StringList.AddObject("i2", @i2);
..
StringList.AddObject("iN", @iN);

....


 
Алексей2   (2004-04-14 17:01) [31]

2 Digitman:
"ну что у тебя, миллион этих переменных что ли ?"
Просьба не пинать ногами - 999:) не миллион конечно, но геморрой ещё тот...:)

2 WebErr ©:
"type
 PSome = ^TSome;
 TSome = record
   Info: String;
   Prev, Next: PSome;
 end;
И вперёд навстречу ветру!!! :))))"
После двунаправленных циклических трёхсвязанных списков на Си - списки на родном паскале кажутся проще массива:)

В общем, всем спасибо за советы. Я только что сам (!) придумал наитупейший подход (решение, которое здесь никто ещё не предлагал, без списков) и сейчас буду пробовать воплощать его в жизнь:).


 
Юрий Зотов ©   (2004-04-14 17:06) [32]

Боже!


 
default ©   (2004-04-14 17:07) [33]

точно)


 
WebErr ©   (2004-04-14 17:09) [34]

А я ведь просто пошутил...
Наверное снова неудачно!!! :))))


 
Digitman ©   (2004-04-14 17:10) [35]


> Боже!


угу) ... упаси нас, сирых, от такого геморроя)


 
Алексей2   (2004-04-14 17:12) [36]

:) ну и переполох


 
Digitman ©   (2004-04-14 17:20) [37]


> Алексей2   (14.04.04 17:12) [36]
> :) ну и переполох


а как же ?) здесь сплошь и рядом полюбоваться на чужую пятую точку, схлопотавшую в одночасье причинное недомогание))


 
Anatoly Podgoretsky ©   (2004-04-14 19:30) [38]

Алексей2   (14.04.04 15:52)  
Имя переменной у тебя уже есть, оно уже в строке, то есть превращать не надо. Можешь проверить жкспериментально Label.Caption := S;


 
Алексей2   (2004-04-14 19:37) [39]

Label.Caption := S; где S - действительное число? Ну-ну...


 
Fay ©   (2004-04-14 19:39) [40]

2Алексей2   (14.04.04 19:37) [39]
Череп не жмёт?


> Anatoly Podgoretsky ©   (14.04.04 19:30) [38]
> Алексей2   (14.04.04 15:52)  
> Имя переменной у тебя уже есть, оно уже в строке, то есть
> превращать не надо. Можешь проверить жкспериментально Label.Caption
> := S;



Страницы: 1 2 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.029 c
1-1082046790
Knight
2004-04-15 20:33
2004.05.02
Динамический массив в компоненте...


14-1081401171
[BAD]Angel
2004-04-08 09:12
2004.05.02
Delphi 7


3-1080813264
Гриша1
2004-04-01 13:54
2004.05.02
Работа с параметрами в SQL.


1-1082026826
demonyator
2004-04-15 15:00
2004.05.02
Клавиатурный хук не ловит первую букву в каждом новом окне


14-1081241892
Doctor_Y
2004-04-06 12:58
2004.05.02
Проблема с INI файлами