Текущий архив: 2002.03.28;
Скачать: CL | DM;
ВнизО правиле имен :) Найти похожие ветки
← →
McSimm (2002-02-14 10:30) [0]"...подлинное имя воплощает самую суть вещи. Назвать имя - значит обрести над этой вещью власть. Я верно отвечаю, госпожа учительница?"
Урсула Ле Гуин. "Правило имен".
Посмотрите на этот пример и постарайтесь предсказать что попадет в Caption формы при нажатии на Button1. Потом проверьте.
На форме лежат:
Button1: TButton;
MyNameIsA: TEdit;
MyNameIsB: TMemo;
procedure TForm1.Button2Click(Sender: TObject);
begin
MyNameIsA.Text := "Меня зовут A";
MyNameIsB.Text := "Меня зовут B";
MyNameIsA.Name := "Unnamed";
MyNameIsB.Name := "MyNameIsA";
Caption := MyNameIsA.Text
end;
← →
Юрий Федоров (2002-02-14 10:37) [1]form1
← →
McSimm (2002-02-14 10:42) [2]???
Наверно вопрос не внимательно прочитал :)
Последняя строка - присвоение Caption откуда будет брать текст. Из TEdit или из TMemo ?
← →
Alx2 (2002-02-14 10:46) [3]Из TEdit
← →
McSimm (2002-02-14 10:52) [4]:)
← →
Desdechado (2002-02-14 10:54) [5]если доп. условий к задаче нет, то программа даже не скомпилируется :))
На форме лежат:
Button1: TButton;
TForm1. Button2Click(Sender: TObject);
конечно, можно прицепить этот обработчик на Button1, но об этом не сказано
← →
McSimm (2002-02-14 10:58) [6]:)
Доп. условие.
Button1.OnClick = Button2Click;
← →
Юрий Федоров (2002-02-14 11:00) [7]Ну вот с этого и надо было начинать :)
← →
Юрий Федоров (2002-02-14 11:01) [8]>Desdechado Скомпилируется
"Меня зовут A"
← →
McSimm (2002-02-14 11:04) [9]:)
>Юрий Федоров © (14.02.02 11:00)
Ну это не серъезно. Какая разница какой метод к кнопке прицеплен.
А вот с правилом имен, вижу, никто не разобрался. А у меня есть вариант пожестче:
второй вариант:
Все то же самое, но вместо TMemo - лежит TLabel, а вторая строчка
MyNameIsB.Caption := "Меня зовут B";
Откуда Caption := возьмет строку из TEdit или из TLabel?
← →
Юрий Зотов (M) (2002-02-14 11:08) [10]"Меня зовут A".
Возня с Name - попытка запутать. No pasaran!
← →
McSimm (2002-02-14 11:09) [11]:)
← →
McSimm (2002-02-14 11:11) [12]точнее
;)
← →
Юрий Федоров (2002-02-14 11:13) [13]А я думал, что подвох именно в Button2,
иначе тут особо и думать не о чем
← →
McSimm (2002-02-14 11:14) [14]А может все-таки pasaran?
Кстати. Если кто-нибудь все же попробует проверить, не советую Button1 два раза нажимать :)
(Почему?)
Классная задачка получилась.
← →
McSimm (2002-02-14 11:16) [15]Я на этот прикол года три назад наткнулся.
Вот сегодня вспомнилось
Читайте Урсулу Ле Гуин!!!!!!!
← →
McSimm (2002-02-14 11:24) [16]Ну не верит народ в чудеса и все.
Проверьте. В обоих случаях текст будет взят из 2го компонента.
!!!!!!!!!
:)))
← →
Алексей Петров (M) (2002-02-14 11:31) [17]Да уж. Прикол.
Оказывается в TControl.SetName производится поиск среди published свойств владельца и приведение их в соответствие с Name :)
И на кой Х... такие фокусы в Borland насочиняли?
Но факт. Результат совершенно не соответствует ожиданиям !!!!
← →
Юрий Федоров (2002-02-14 11:35) [18]Вообще беда.
Как теперь программировать?
← →
McSimm (2002-02-14 11:38) [19]Ну что весело?
"...А ну-ка, прими свое истинное обличье! Приказываю это тебе и заклинаю истинным твоим именем - Йевод!
...
Да,- хрипло прошипел могучий дракон. - Мое подлинное имя действительно Йевод, а мое подлинное обличье - вот это."
Урсула Ле Гуин. "Правило имен".
← →
Юрий Зотов (M) (2002-02-14 11:47) [20]Я в шоке...
IMHO, здесь разработчики Delphi все же перестарались. Даже несмотря на csSetCaption.
← →
McSimm (2002-02-14 11:50) [21]Я так полагаю, что все это сделано с целью сохранить одно из важных свойств published полей - быть доступным по имени.
← →
metal (2002-02-14 12:41) [22]Причем здесь published поля?
SetName ничего с ними не делает.
Посмотрите внимательней на VCL.
Там гораздо круче - ссылки на компоненты, как поля формы,
переприсваиваются.
← →
McSimm (2002-02-14 12:52) [23]ссылки на компоненты, как поля формы как раз и являются published полями формы.
(если они положены на форму в design-time, разумеется)
← →
metal (2002-02-14 13:06) [24]теперь понял, что ты имел ввиду.
А вообще-то это засада получается.
Если я правильно понял, то
MyNameIsB.Name:= "MyNameIsA";
эквивалентно:
MyNameIsA:= MyNameIsB;
MyNameIsB:= nil;
и, в результате, связь между полями фориы и списком компонент
теряется
← →
VictorT (2002-02-14 13:09) [25]Читал упомянутый расказик. После данной ветки наверно перечитаю ещё раз.
← →
McSimm (2002-02-14 13:20) [26]>metal (14.02.02 13:06)
Не совсем. MyNameIsA - имеет имя Unnamed.
>VictorT (14.02.02 13:09)
:)
А еще лучше все "Земноморье" перечитать.
← →
Юрий Федоров (2002-02-14 13:26) [27]Получается, что если мне присвоить имя "McSimm", то я стану
McSimm"ом
← →
metal (2002-02-14 13:27) [28]>McSimm
не соглащусь. Я в предыдущем сообщении все верно написал.
Поле MyNameIsA имеет имя "MyNameIsA" и, после того кода
ссылается на обьект MyNameIsB.
А в списке компонент формы элемент, который ссылался на
MyNameIsA получает имя "Unnamed".
← →
VictorT (2002-02-14 13:38) [29]>А еще лучше все "Земноморье" перечитать.
А "Земноморье" - это чего? Тоже произведение Урсула Ле Гуин?
Или книжка в которой был этот рассказик? Или ещё как?
← →
McSimm (2002-02-14 13:47) [30]Земноморье - это мир, созданный писательницей Урсулой Крёбер ле Гуин в её фэнтэзи-романах "Волшебник Земноморья", "Гробницы Атуана", "На самом дальнем берегу", "Техану".
Этим 4м романам предшествовали несколько рассказов - исследования мира Земноморья:
"Правило имен (The rule of unbinding)",
"Освобождающее заклятие (The word of unbinding)".
К сожалению всех сейчас не помню
← →
VictorT (2002-02-14 14:00) [31]2 McSimm
Спасибо, что просветил, я ничего из этого не читал, вообще не предпологал что этот рассказик - часть чего-то целого. Поищу в Инете.
← →
McSimm (2002-02-14 14:13) [32]>Юрий Федоров © (14.02.02 13:26)
Не сразу заметил.
Не получается. Сначала это имя надо забрать у меня. Иначе поднимится exeption. Кроме того nickname - это как раз не подлинное имя, которое хранится в тайне и известно только самым близким людям, да и то не всегда. :)
>VictorT (14.02.02 14:00)
Очень рекомендую найти в бумажном варианте. Я пытался читать свои любимые вещи в электронном варианте. Не знаю в чем тут дело, но настроение испортил сильно.
А Ursula K. Le Guin я прочитал все до чего смог дотянуться. Чего и всем желаю.
Она - один из авторов, сильнейшим образом повлиявших на мое Я.
И оно (мое Я) об этом нисколько не жалеет.
← →
PVOzerski (2002-02-14 14:51) [33]И еще об именах. Если мы используем Ole Automation, то вызываемые из серверного приложения
методы могут иметь черт-те какие имена: с умляутами и т.п. И почему-то Delphi это кушает.
А что будет, если такое имя окажется зарезервированным словом из Pascal (with, array и т.п.)?
И более практический вопрос: а если коллизия возникнет, то alias к такому методу средствами
Delphi назначить можно?
← →
McSimm (2002-02-14 18:28) [34]>VictorT (14.02.02 14:00)
>Поищу в Инете.
Мне тут ссылочку подсказали:
http://www.lib.ru/LEGUIN/
Но все-же рекомендую читать в печатном виде.
← →
VictorT (2002-02-14 18:36) [35]2 McSimm
Спасибо за ссылочку.
← →
Пиноккио (2002-02-14 22:16) [36]Не понимаю, что я делаю неправильно???
У меня в заголовке получается - "Меня зовут В".
← →
McSimm (2002-02-15 10:10) [37]>Пиноккио (14.02.02 22:16)
Все правильно. Именно это и должно получиться.
Суть темы в том, что ожидаемый результат - противоположный.
Особенно загадочным (на первый взгляд) выглядит вариант с TLabel, у которого вообще нет поля "Text". Однако именно его получит Caption в последней строке примера.
← →
Станислав (2002-02-15 10:32) [38]А что получится в этом случае?
MyNameIsA.Text := "Меня зовут A";
MyNameIsB.Caption := "Меня зовут B";
MyNameIsA.Name := "Unnamed";
MyNameIsB.Name := "MyNameIsA";
MyNameIsA.Name := "MyNameIsB";
Caption := MyNameIsA.Text
← →
McSimm (2002-02-15 10:44) [39]>Станислав © (15.02.02 10:32)
Ничего хорошего.
строчка
MyNameIsA.Name := "MyNameIsB";
Будет обращатся не к исходному MyNameIsA, а к окрещенному
И вернет ему исходное имя.
поле MyNameIsA после этих манипуляций, по видимому, примет значение nil.
Страницы: 1 вся ветка
Текущий архив: 2002.03.28;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.007 c