Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2008, 08:50   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Вопрос Память, выделяемая под приложение.

Привет всем!
Допустим имеется форма form1: tForm1 и на ней button1: tButton. Вдруг надо передать указатель на button1 в процедуру:
Код:
procedure changeCaption(const p: pointer);
var
b: tButton;
begin
   b := tButton(p^);
   b.Caption := 'Кэпшен изменён';
end;
Будит ли выделяться памать и под b: tButton? или только под button1?
А если написать перед строчкой b := tButton(p^); b := tButton.create(application); ???

А если будит так:
Код:
procedure changeCaption;
var
b: tButton;
begin
   b := button1;
   b.Caption := 'Кэпшен изменён';
end;
???
Altera вне форума Ответить с цитированием
Старый 30.11.2008, 09:58   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Боже мой Чтот вы накрутили до безумия.

первый вариант...

Код:
procedure changeCaption(p: pointer);
var
b: tButton;
begin
   b := tButton(p);
   b.Caption := 'Кэпшен изменён';
end;
и почему сразу не передавать не Pointer а TButton ? и вкратце TButton это всего ссылка (адрес) на класс данный. так что такой же как и Pointer, String и т.п.... простая абстракция для нас программистов так что делаем выводы...
BOBAH13 вне форума Ответить с цитированием
Старый 30.11.2008, 10:18   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

код неправильный, tButton это и есть указатель делайте так
Код:
procedure changeCaption(const p: TObject);
var
b: tButton;
begin
   b := tButton(p);
   b.Caption := 'Кэпшен изменён';
end;
А то у вас получается указатель на указатель... лучше =\
Память конечно никуда выделяться не будет.

если вы напишите
b := tButton.create(application);
но получите новый объект, память под который конечно будет выделяться.

>>>А если будит так:
будет ошибка, b не указывает ни на какой класс.

Оъяснил как мог.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 30.11.2008, 15:30   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А почему не по рабоче-крестьянски:
Код:
procedure changeCaption(Sender: TObject);
begin
if Sender is TButton then
(Sender as TButton).Caption := 'Кэпшен изменён';
end;
mihali4 вне форума Ответить с цитированием
Старый 30.11.2008, 18:13   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Господи Боже мой! Какого чёрта вы тут наплели? Я ведь специально так сделал. Почему не отвечаете по сути, конечно mihali4, я-бы уж догадался-бы так сделать при возможность. Где я щас реальную ситуацию искать буду. Придумал что-то. Отвечайте именно на то, что спрашивают...
Altera вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Память процесса BlackOmen Общие вопросы Delphi 3 24.10.2008 20:16
Выделяемая строка DBGRID GLAZZ БД в Delphi 1 08.10.2008 11:15
Оперативная память ogurchik Компьютерное железо 1 02.09.2008 19:39
Динамическая память MadDog__ Помощь студентам 2 22.11.2007 00:05