Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.56 MB
Время: 0.016 c
1-90993
harismatik
2002-03-15 13:22
2002.03.28
Позиционирование курсора в компоненте TEdit


3-90778
ExxP
2002-03-04 03:53
2002.03.28
Отмена удаления записи после события


1-90905
kronos
2002-03-13 21:03
2002.03.28
Помогите чайнику!!!


14-91056
panov
2002-02-12 09:05
2002.03.28
Хорошо жить!


3-90805
lightix
2002-03-04 15:36
2002.03.28
Помогите с БД + Quick REPORT