Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизКак "превратить" строку в имя переменной?: Найти похожие ветки
← →
Алексей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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.035 c