Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Вниз

О правиле имен :) 


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.




Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.78 MB
Время: 0.028 c
6-91029           Елена3000             2002-01-11 23:43  2002.03.28  
Disconnect ~ Connect


3-90742           Art1                  2002-02-26 16:29  2002.03.28  
Как скопировать из DBRichEdit в RichEdit и обратно?


3-90738           aleks2000             2002-02-24 12:48  2002.03.28  
<B>Как открыть ДОС базу данных dBase III в Делфи, так чтобы было написано на нормальном русском</B>


6-91009           KHunter               2002-01-11 08:59  2002.03.28  
тонкий клиент


3-90767           Demon ltd             2002-03-02 00:00  2002.03.28  
Удаление из таблиц