Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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;


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

2 Fay ©
зачем хамить? Хамья развелось:(.. если я чушь сморозил - покажи где..


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

хм.. похоже, я просто не так его понял. Но и проблему он не понял тоже. Ладно, говорю же - всем спасибо. Нашёл свой способ решения. Несложный.


 
Fay ©   (2004-04-14 19:54) [43]

Всего-то 4 часа потребовалось.



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

Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.035 c
14-1081857543
WELLiON
2004-04-13 15:59
2004.05.02
файл-менеджер


3-1080986096
Хэтч
2004-04-03 13:54
2004.05.02
Можно ли "привязать" Image к строке в Table ?


11-1057764731
puky
2003-07-09 19:32
2004.05.02
Scrollbox


6-1078345016
NightBlaze
2004-03-03 23:16
2004.05.02
net send


1-1082119339
MicroWorld
2004-04-16 16:42
2004.05.02
файл, масив, StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский