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

Вниз

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]
>
>
> Это что, дословный текст задания ?!
> Или опять отсебячину порешь ?)
>

Дословный. Препод молодая девушка, семпатичная и креативная.


 
homm ©   (2007-11-22 09:42) [41]

> Задача1: Сделать так. что бы пользователь не мог изменить
> переменную Count, ведь её он должен только читать, а вычислять
> количество пользователей - дело программы а не человека.

И где здесь про «программа отвечали, что-то в духе ReadOnly»???
Банальное ограничение доступа к методу на этапе компиляции.
Будет сообщение компилятора типа такого: can"t not modify readonly property Count.


 
homm ©   (2007-11-22 09:44) [42]

> [37] DukeArtem ©   (22.11.07 09:38)

И в данном случае, «пользователь» — уж извините, «разработчик». Он пользователь класса, который тебе нужно написать, но он разработчик программы.


 
DukeArtem ©   (2007-11-22 09:45) [43]


> homm ©   (22.11.07 09:39) [38]
> Ку?

Возможно, а подробнее, но мне кажется задание выполняется чисто программным методом.


 
Сергей М. ©   (2007-11-22 09:45) [44]


> DukeArtem ©   (22.11.07 09:42) [40]


Мдааа ....

Просто нет слов)


 
Reindeer Moss Eater ©   (2007-11-22 09:46) [45]

Дано: У нас есть класс с именем TestClass.

Все ясно. Препод пытается преподать концепцию свойств в ООП.


 
homm ©   (2007-11-22 09:46) [46]

> [43] DukeArtem ©   (22.11.07 09:45)
> Возможно, а подробнее

ЧТО ПОДРОБНЕЕ???

Все разжовано, и вор положено.


 
DukeArtem ©   (2007-11-22 09:47) [47]

Хорошо, спасибо. Что-нибудь набросаю.


 
Сергей М. ©   (2007-11-22 09:48) [48]


> Препод пытается преподать концепцию свойств в ООП


Это диагноз ?)


 
Reindeer Moss Eater ©   (2007-11-22 09:49) [49]

type

TestClass = class
...
property Count : integer read GetCount;
....
end;

Все. Можешь пытаться менять Count вплоть до второго пришествия.


 
Reindeer Moss Eater ©   (2007-11-22 09:49) [50]

Это диагноз ?)

Ага. И Приговор в одном флаконе.
:)


 
DukeArtem ©   (2007-11-22 09:52) [51]


> Reindeer Moss Eater ©   (22.11.07 09:49) [49]
>
> type
>
> TestClass = class
> ...
> property Count : integer read GetCount;
> ....
> end;
>
> Все. Можешь пытаться менять Count вплоть до второго пришествия.
>

Спасибо.


 
Сергей М. ©   (2007-11-22 09:52) [52]


> Reindeer Moss Eater ©   (22.11.07 09:49) [50]


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


 
homm ©   (2007-11-22 09:57) [53]

> [51] DukeArtem ©   (22.11.07 09:52)
> Спасибо.

Тебе это ответили еще в [1].


 
ЮЮ ©   (2007-11-22 10:01) [54]

>
в неё и программа заносит данные, и пользователь заносит данные,

альтернативные решения типа не давать пользователю textbox
> и др. не подходят.


Не знаю что такое textbox, но если он нужен программе, но должен быть недоступен пользователю, сделай ему ReadOnly = true, а если его пользователь и видеть не должен, а ты программу без компонентов написать не можещь - сделай ему Visible = false.


 
DukeArtem ©   (2007-11-22 10:03) [55]


> homm ©   (22.11.07 09:57) [53]
>
> > [51] DukeArtem ©   (22.11.07 09:52)
> > Спасибо.
>
> Тебе это ответили еще в [1].

А я ведь потом и написал ([18]), что "спасибо за подкинутые мысли" я ещё до того как написать стал присматриваться к свойству Property, просто не сразу же дошёл какими он полями класса управляет, как именно управляет и т.д.
З.Ы. homm, тебе тоже отдельное огромное спасибо за то что так активно помогал, ты резковат конечно, видимо человек бывалый, но всё таки к лаймерам надо относится терпимее, иначе сам так попадёшь.
З.З.Ы. Ну и конечно же всем спасибо за участие, думаю тему можно прекрывать.


 
Сергей М. ©   (2007-11-22 10:07) [56]


> DukeArtem ©   (22.11.07 10:03) [55]


> тему можно прекрывать


Рискуешь получить два балла за несоблюдение условий задания)


 
Dennis I. Komarov ©   (2007-11-22 10:28) [57]

ИМХО - Не зачет!


 
Плохиш ©   (2007-11-22 11:15) [58]

Согласно заданию, ответил > ЮЮ ©   (22.11.07 10:01) [54]

А всякие сообщения - это отсебятина кодера :-))

PS. кстати, спасибо, похмелье прошло :-)))



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

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

Наверх




Память: 0.63 MB
Время: 0.023 c
15-1195546975
Kolan
2007-11-20 11:22
2007.12.16
А какназфвается сайт где хронится история сайтов.


2-1195712844
validoll
2007-11-22 09:27
2007.12.16
Не могу установить компонент.


2-1195592375
099999
2007-11-20 23:59
2007.12.16
Какой это цвет?


2-1195311260
Dru095
2007-11-17 17:54
2007.12.16
как удалить файл с определенной датой создания


2-1195890376
MaShechka
2007-11-24 10:46
2007.12.16
Как поменять название в шапке Message Dialog?