Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизReadOnly для переменной Найти похожие ветки
← →
DukeArtem © (2007-11-21 10:58) [0]Здравствуйте.
Вопрос такой, есть ли в Дельфях способ выставлять переменной доступ(чтение/запись): тоесть, есть переменная i в неё и программа заносит данные, и пользователь заносит данные, но так что бы когда пользователь пытался бы занести данные, программа отвечали, что-то в духе ReadOnly(или как угодно, но не давала записать в неё). Сразу же говорю, программа не несёт практического применения, так что альтернативные решения типа не давать пользователю textbox и др. не подходят.
Спасибо, подумавшим.
← →
palva © (2007-11-21 11:07) [1]Пользователь не может заносить данные в переменную. Он может занести данные в поле ввода и т. д.
Ограничения на запись в переменную (из программы) могут быть введены. Могу вспомнить, что параметр подпрограммы, объявленный с параметром const, не может быть изменен внутри подпрограммы. Других случаев не знаю. В классах могут использоваться свойства. Обычно это что-то вроде внутренних переменных объекта. У свойств можно ввести произвольные ограничения на чтение или запись.
← →
{RASkov} (2007-11-21 11:17) [2]Добавлю к [1]... Можно и вот такой способ реализовать:
function MyReadOnlyText: String;
implementation
var FMyReadOnlyText: String;
fuction MyReadOnlyText: String;
begin
Result:=FMyReadOnlyText;
end;
Далее в модуле меняем FMyReadOnlyText, а доступ к ней при помощи функции.....
В итоге получается не совсем переменная, но.... Printer аналогично реализован :)
← →
Reindeer Moss Eater © (2007-11-21 11:21) [3]Пользователь не может заносить данные в переменную
Еще как может :)
← →
Правильный_Вася (2007-11-21 11:52) [4]есть еще константные переменные, если мне не изменяет память
← →
{RASkov} (2007-11-21 12:00) [5]> [4] Правильный_Вася (21.11.07 11:52)
наверное правильнее "переменные константы" :)
var N: Integer = 5;
но имхо, не в тему...
← →
DVM © (2007-11-21 12:02) [6]Отнять у пользователя клавиатуру и мышь, тогда он точно не занесет ничего никуда.
> DukeArtem ©
Чудной вопрос однако. Если под переменной подразумевать некоторую область памяти, то занести туды значение нужное можно в любом случае и неважно как программа при этом устроена. Нельзя лишь если память только для чтения на аппаратном уровне.
← →
Правильный_Вася (2007-11-21 12:08) [7]
> {RASkov} (21.11.07 12:00) [5]
не, я имел ввидуconst
cCurConfig: String = "1";
с дальнейшей возможностью присваивания
но действительноне в тему
← →
Германн © (2007-11-21 12:43) [8]
> Правильный_Вася (21.11.07 11:52) [4]
>
> есть еще константные переменные, если мне не изменяет память
>
Типизированные константы. Так это называется.
Но все равно это врядли ответ на сей бредовый сабж.
← →
Amoeba © (2007-11-21 13:24) [9]Удивительно, как этот вопрос попал в "Основную", когда ему с самого начала место в "Потрепаться" или, с огромной натяжкой, в "Начинающих".
← →
Jeer © (2007-11-21 14:11) [10]
> DukeArtem © (21.11.07 10:58)
"Вот это бред, всем бредам - бред"
← →
TIF © (2007-11-21 16:59) [11]мне интересно, зачем такой идиотизм нужен????!!! есть константы, есть переменные - третий лишний!
← →
homm © (2007-11-21 17:37) [12]> [3] Reindeer Moss Eater © (21.11.07 11:21)
> Пользователь не может заносить данные в переменную
> Еще как может :)
Как?
← →
{RASkov} (2007-11-21 17:40) [13]Человек спросил - ему ответили...
Если вопрос бред - то есть 2 варианта:
либо промолчи
либо обоснуй сей бред....
Я в вопросе увидел некую схожесть со свойствами.....
если бы были только переменные и константы и ничего лишнего, то зачем readonly свойства?
:о) ладно..... почти шутка.)
← →
{RASkov} (2007-11-21 17:44) [14]> [13] {RASkov} (21.11.07 17:40)
ЗЫ Так же свойство может быть только для записи но не чтения.... Вот это вот уже, по моему, бред :)
Хотя и это наверняка имеет место быть)
← →
Leonid Troyanovsky © (2007-11-21 18:00) [15]
> {RASkov} (21.11.07 17:44) [14]
> Хотя и это наверняка имеет место быть)
Пуркуа бы не па.
Например, как в том анекдоте про чукчу.
Возможно, что читается некое другое свойство.
IMHO, в подобных случаях чаще ограничиваются
сеттерами и геттерами без самого свойства.
--
Regards, LVT.
← →
TUser © (2007-11-21 19:39) [16]Можно сделать readonly-свойство у объектов некоторого класса.
← →
homm © (2007-11-21 22:37) [17]> [16] TUser © (21.11.07 19:39)
> Можно сделать readonly-свойство у объектов некоторого класса.
Да о чем может быть речь, если в сабже «пользователь заносит в переменную данные»?
← →
DukeArtem © (2007-11-22 00:11) [18]Спасибо за подкинутые мысли, что-нибудь соображу. На вопрос "зачем" - ответ прост, такое задание получил в инсте.
← →
Германн © (2007-11-22 01:25) [19]
> DukeArtem © (22.11.07 00:11) [18]
>
> Спасибо за подкинутые мысли, что-нибудь соображу. На вопрос
> "зачем" - ответ прост, такое задание получил в инсте.
>
"Гложат меня смутные сомнения" (с) и.о. царя Бунша.
А верно ли ты понял это задание?
← →
DukeArtem © (2007-11-22 07:34) [20]
> "Гложат меня смутные сомнения" (с) и.о. царя Бунша.
> А верно ли ты понял это задание?
Да, правильно. Просто описал его в общем виде(мне было интересно посмотреть, какие вообще есть варианты на эту тему), по заданию у нас действительно имеется class, а в нём две переменные, и одна из этих переменных должна изменяться вот таким вот образом. И если я всё правильно понял, то нужно рыть в сторону свойств классов.
← →
homm © (2007-11-22 07:56) [21]> [18] DukeArtem © (22.11.07 00:11)
Ты лучше сажи, каким образом пользователь может изменить переменную?
← →
@!!ex © (2007-11-22 08:26) [22]property Value read FValue; - это не то?
← →
homm © (2007-11-22 08:50) [23]> [22] @!!ex © (22.11.07 08:26)
> property Value read FValue; - это не то?
ДаX: Integer;
— это уже то!
← →
DukeArtem © (2007-11-22 09:07) [24]
> Ты лучше сажи, каким образом пользователь может изменить
> переменную?
На форме вынесен некоторый textbox, в который присваевается некоторый счетчик, по нажатии кнопочки (доп. Зарегистрировать) прибавляется к переменной i+1 и выводится в этот textbox, а есть ещё одна кнопка(доп. Изменить) пользователь берёт что-нибудь сам вводит в этот textbox и на кнопку, а программа должна вывести, что-то типо readonly.
З.Ы. маразм, понимаю, но я сразу же написал, что "практического применения не несёт"
← →
Сергей М. © (2007-11-22 09:10) [25]
> DukeArtem © (22.11.07 09:07) [24]
И где в этом "маразме" изменение пользователем переменной ?
← →
DukeArtem © (2007-11-22 09:16) [26]
> Сергей М. © (22.11.07 09:10) [25]
>
>
> > DukeArtem © (22.11.07 09:07) [24]
>
>
> И где в этом "маразме" изменение пользователем переменной
> ?
Может я конечно что-то называю не своим именем, а как тогда называется:
...
>а есть ещё одна кнопка(доп. Изменить) пользователь берёт что-нибудь сам >вводит в этот textbox и на кнопку, а программа должна вывести, что-то типо >readonly."
...
Ну если дополнить мысль, то после нажатия(кнопки изменить) из textbox значение должно пытаться уйти в i , и после этого он должен вернуть "ошибку"
← →
homm © (2007-11-22 09:18) [27]> пользователь берёт что-нибудь сам вводит в этот textbox
> и на кнопку, а программа должна вывести, что-то типо readonly
А изменение переменной где?procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage("readonly");
end;
← →
homm © (2007-11-22 09:19) [28]> из textbox значение должно пытаться уйти в i
Зачем? Она же ReadOnly.
← →
homm © (2007-11-22 09:21) [29]Ты пойми, пользователь тычит на кнопки, ему до переменных как до лампочки, он о них и не знает ничего, а уж изменить то тем более не может.
А вот ты, как программист можешь назначить изменение переменной на кнопку, или не назначить.
← →
Сергей М. © (2007-11-22 09:23) [30]
> как тогда называется
Это, если угодно, некое примитивное подобие технического задания на проектирование и разработку программы, реализующей упомянутый тобой "маразм". Не более того.
> начение должно пытаться уйти в i
Почему это "должно" ?
Кто или что его обязывает ?
← →
DukeArtem © (2007-11-22 09:27) [31]
> homm © (22.11.07 09:21) [29]
>
> Ты пойми, пользователь тычит на кнопки, ему до переменных
> как до лампочки, он о них и не знает ничего, а уж изменить
> то тем более не может.
> А вот ты, как программист можешь назначить изменение переменной
> на кнопку, или не назначить.
ВОТ! Я поэтому столько и пытаюсь объяснить, что это всего лишь задание и его можно решить(в реальной жизни) более рациональным путём, но преподу нужно именно так.
Ещё раз, значит есть class(доп A), в нём некоторое кол-во переменных, одна из(нужная нам) это доп. i , и нам нужно что бы программа a.i+1 как всегда, а вот при нажатии ползователем кнопочки, выполнялось тоже самое событие ( a.i+1 ) но уже возвращало "ошибку"
← →
DukeArtem © (2007-11-22 09:29) [32]
> Почему это "должно" ?
> Кто или что его обязывает ?
Я его обязываю, а мне нужно перехватить этот момент и запретить доступ.
← →
Сергей М. © (2007-11-22 09:31) [33]
> его можно решить(в реальной жизни) более рациональным путём
Его вообще никак нельзя решить, потому что пользователь при всем своем желании и прыти не может получить никакой доступ ни к каким переменным.
> преподу нужно именно так
То ли ты врешь, то ли вам вместе с преподом нужна путевка в ликбез)
← →
homm © (2007-11-22 09:32) [34]> Ещё раз, значит есть class
Не ври тут, это не еще раз! Об этом нужно с самого начала говорить.
> [31] DukeArtem © (22.11.07 09:27)
и нам нужно что бы программа a.i+1 как всегда, а вот при нажатии ползователем кнопочки
Когда пользователь нажимет на кнопку, (о чудо!) именно программа делаетa.i+1
(что бы ты не имел ввиду).
Когда ты вызываеш метод класса a.i+1, он уже не в сосоянии определить, нажимал ли пользователь кнопку, или этот метод вызван в результате других действий, потому что не пользователь вызвал этот метод, а программа!!!
← →
Сергей М. © (2007-11-22 09:32) [35]
> Я его обязываю
Ты не пользователь, ты - разработчик.
Разницу осюсяешь ?)
← →
turbouser © (2007-11-22 09:32) [36]
> DukeArtem © (22.11.07 09:27) [31]
Полностью текст задания можно посмотреть? Без приукрас и сокращений?
← →
DukeArtem © (2007-11-22 09:38) [37]
> > DukeArtem © (22.11.07 09:27) [31]
>
> Полностью текст задания можно посмотреть? Без приукрас и
> сокращений?
>
Дано: У нас есть класс с именем TestClass. Среди всего в нем в разделе Public присутствуют 2 переменные: year и count типа integer. С помощью первой переменной пользователь вводит свой год рождения в программу,а с помощью второй может узнать, сколько всего пользователей уже зарегистрировалось.
Задача1: Сделать так. что бы пользователь не мог изменить переменную Count, ведь её он должен только читать, а вычислять количество пользователей - дело программы а не человека.
От себя: устное условие, что это делается не через банальные ограничения такие как вывести в label или поставить не активный textbox
З.Ы. Если я всё усложнил, не пинайте сильно ногами.
← →
homm © (2007-11-22 09:39) [38]Отчет по лабораторному заданию №N
Тема: Защита переменной от изменения пользователем.
Данная задача полностью решается компилятором Delphi, который не дает пользователю возможности изменять значения переменных во врямя выполнения программы, защищая их от записи. Любые действия по изменению переменных ложатся на плечи программиста, и пользователь может изменить занчения переменных, которые ему не доступны лиш в результате грубой ошибуи в логике программы.
Ку?
← →
Сергей М. © (2007-11-22 09:40) [39]
> DukeArtem © (22.11.07 09:38) [37]
Это что, дословный текст задания ?!
Или опять отсебячину порешь ?)
← →
DukeArtem © (2007-11-22 09:42) [40]
> Сергей М. © (22.11.07 09:40) [39]
>
>
> > DukeArtem © (22.11.07 09:38) [37]
>
>
> Это что, дословный текст задания ?!
> Или опять отсебячину порешь ?)
>
Дословный. Препод молодая девушка, семпатичная и креативная.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.047 c