Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

&(Label1->Caption)

1.7K
25 ноября 2002 года
Mark
114 / / 21.11.2002
Форма с кнопкой и лэйблом. Пишем:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s = "aaa", *ps, *pCaption;

ps = &s;
pCaption = &(Label1->Caption);
}
Ставим бряк-пойнт на }. Делаем run. Когда вываливаемся на бряк-пойнте, смотрим инспектором значения *ps и *pCaption. Первый - "aaa", а второй - NULL.
Почему?!
442
26 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Mark
Форма с кнопкой и лэйблом. Пишем:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString s = "aaa", *ps, *pCaption;

ps = &s;
pCaption = &(Label1->Caption);
}
Ставим бряк-пойнт на }. Делаем run. Когда вываливаемся на бряк-пойнте, смотрим инспектором значения *ps и *pCaption. Первый - "aaa", а второй - NULL.
Почему?!



Хо-Хо...
А и не выйдент ничего у тебя так...
Когда ты обращаешься к публичному свойству компонента Label1->Caption то на самом деле ты не String-переменную считываешь а получаешь значение которое тебе возвращает функция ну например что то вроде String GetCaption(); когда записываешь может вызываться что то вроде void SetCaption(String ACaption);
Для тебя это специально реализовали абсолютно прозрачно что бы у тебя создавалось впечатление что ты работаешь непосредственно с самой строкой а на самом деле может стоять проверочка
void SetCaption(String ACaption)
{
if (ACaption=="Дурак") FCaption="Сам дурак";
else FCaption=ACaption;
}
И твое Caption в классе TLabel на самом деле будет к примеру FCaption и находится будет в описании класса возможно в разделе
private:
и помучаться еще прийдется что бы на этот самый FCaption указатель навести :-))))
но если тебе очень хочется попробуй....
только учти вся эта катавасия специально затеяна для того что бы оградить от тебя внутренности компонента ... если ты напрямую запишешь что либо в FCaption то компонент об этом может узнать не сразу и не сразу отобразит твой заголовок а если там есть какие то дополнительные переменные которые меняются вместе с FCaption???
Вобщем не лезь ремонтировать часы топором...
Это мой совет...
Хотя если быть точным то лучше так:
Возьми книжку по билдеру...
Напиши компонент по образцу из этой книги... минут за 40 управишься...
потом посмотри исходный текст компонента TLabel
и уже потом возможно по этой теме будешь давать советы мне так как в этот компонент я еще не залезал :-)))))

1.7K
27 ноября 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by HexoGenus

...
Когда ты обращаешься к публичному свойству компонента Label1->Caption то на самом деле ты не String-переменную считываешь а получаешь значение которое тебе возвращает функция ну например что то вроде String GetCaption(); когда записываешь может вызываться что то вроде void SetCaption(String ACaption);
Для тебя это специально реализовали абсолютно прозрачно что бы у тебя создавалось впечатление что ты работаешь непосредственно с самой строкой...



Проведи подобный эксперимент с &(Label1->Top). Там картина другая. Что свойства типа AnsiString какие-то особенные?

Цитата:
Originally posted by HexoGenus

...а на самом деле может стоять проверочка
void SetCaption(String ACaption)
{
if (ACaption=="Дурак") FCaption="Сам дурак";
else FCaption=ACaption;
}
И твое Caption в классе TLabel на самом деле будет к примеру FCaption и находится будет в описании класса возможно в разделе
private: ...



Ты точно знаешь или это догадки? Как-то нелогично... В классе AnsiString и так можно было реализовать (и/или уже реализовано) и проверочки, и фигерочки, и всё что приспичет.

Цитата:
Originally posted by HexoGenus

...и помучаться еще прийдется что бы на этот самый FCaption указатель навести :-))))
но если тебе очень хочется попробуй....
только учти вся эта катавасия специально затеяна для того что бы оградить от тебя внутренности компонента ... если ты напрямую запишешь что либо в FCaption то компонент об этом может узнать не сразу и не сразу отобразит твой заголовок а если там есть какие то дополнительные переменные которые меняются вместе с FCaption???
Вобщем не лезь ремонтировать часы топором...
Это мой совет...
Хотя если быть точным то лучше так:
Возьми книжку по билдеру...
Напиши компонент по образцу из этой книги... минут за 40 управишься...
потом посмотри исходный текст компонента TLabel
и уже потом возможно по этой теме будешь давать советы мне так как в этот компонент я еще не залезал :-)))))



Мы рождены (я по крайней мере), чтоб сказку сделать былью!... а не чтоб чужие компоненты переписывать :) . Так что, это ты сам: книга, 40 минут и все такое...:D

А если серьезно, то не упёрлось оно мне. Каждое решение должно быть оправдано в смысле затрат ресурсов (в нашем случае - рабочего времени). Так что, по-моему, лучше найти открытую дверь, чем ломиться в закрытую, используя лом, автоген, перфоратор и другие полезные утилиты :)

1.7K
28 ноября 2002 года
Mark
114 / / 21.11.2002
Всё новое - это хорошо забытое старое...

class A
{
public:
__property AnsiString cap = {read=GetText, write=SetText};
private:
AnsiString str;
AnsiString GetText();
void SetText(AnsiString text);
};

Здесь значение самой строки свойства cap хранится в str, а __property как раз позволяет реализовать тот механизм, на который так туманно намекал HexoGenus, хотя натолкнул на мысль...
:)
442
28 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Mark

механизм, на который так туманно намекал HexoGenus :)


Вот спасибо :D
Туманно немекал? Мне казалось что открытым текстом сказал :)
Кстати еще раз... Очень рекомендую попробовать создать компонент по образцу... Там все очень прикольно реализовано ... Тебе понравится :)
И как раз разбираться со всем самому без книжек это и называется

Цитата:
лучше найти открытую дверь, чем ломиться в закрытую, используя лом, автоген, перфоратор и другие полезные утилиты


А перед тем как искать другую дверь иногда сначала стоит прочитать плакатик возле ручки в какую сторону дверь открывается :D

1.7K
28 ноября 2002 года
Mark
114 / / 21.11.2002
Цитата:
Originally posted by HexoGenus

Вот спасибо :D
Туманно немекал? Мне казалось что открытым текстом сказал :)


Если бы написал кусок кода (или что смотреть, или где смотреть, или как смотреть), тогда было бы открытым текстом. А то абстрактное "книжки читай" - это совет на все случаи жизни.

Цитата:
Originally posted by HexoGenus

Кстати еще раз... Очень рекомендую попробовать создать компонент по образцу... Там все очень прикольно реализовано ... Тебе понравится :)
И как раз разбираться со всем самому без книжек это и называется

А перед тем как искать другую дверь иногда сначала стоит прочитать плакатик возле ручки в какую сторону дверь открывается :D


Чего ты пристал со своим компонентом...
А про то, что книжки читать не надо, я тебе не говорил! И про то что, всё самому разбирать надо, тоже! Всю идею переврал...

Так вот (направляя диалог в конструктивное русло) додумать надо было совсем немного: открывам хелп, находим, например, TTable и смотрим свойство, например, TableName. И видим:
__property AnsiString TableName = {read=FTableName, write=SetTableName};
То есть хитрого тут ничего нет, действительно надо было вспомнить, что из себя представляет свойство, о чем ты, собственно, и говорил.

442
29 ноября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Mark

Чего ты пристал со своим компонентом...
А про то, что книжки читать не надо, я тебе не говорил! И про то что, всё самому разбирать надо, тоже! Всю идею переврал...



:) Да не сердись ты...
Это у меня чувство юмора такое...
Если бы ты книжки не читал ты бы не в форуме сидел а в чате :D

По поводу конструктивности...
Конструкцию которую ты написал я много раз сам видел... и если честно то толи я дуб толи ясень...
но толку мне от нее не было пока я своими руками компонент не собрал...

Мне казалось что сборка компонентов мне не нужна и эту главу во всех и даже детских книжках я упорно пропускал :)

Но то как я заблуждался я понял только после того как попробовал собрать компонент по образцу и убедился насколько это доступно и просто...

И понимаю ведь что выгляжу как папуас который европейцу настойчиво предлагает попробовать на вкус местную гусеницу... но собственный опыт просто кричит мне что это нужно любому программисту на билдере...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог