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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2007, 21:13   #1
WhitePoint
Пользователь
 
Регистрация: 31.03.2007
Сообщений: 25
По умолчанию где правильно объявить переменной значение Caption

Это мой первый компонент. При нажатии на кнопку, поле счетчика увеличивается на один, и потом выводится к-во нажатий. По нажатии кнопки первый раз к ее св-ву Caption должно прибавляться значение счетчика. Для этого значение Caption я присвоил переменной a и использовал ее. Привожу исполнительный раздел модуля компонента:

implementation

uses ComObj;
var a:string;

procedure Register;
begin
RegisterComponents('MyComponents', [TCountBtn]);
end;

constructor TCountBtn.Create(aowner: TComponent);
begin
inherited Create(aowner);
a:=caption;
end;

Procedure TCountBtn.Click;
begin
inherited click;
FCount:=FCount+1;
if showtype = hidecount then
caption:=caption
else caption:=(a+inttostr(Fcount));
end;

procedure TCountBtn.showcount;
begin
showmessage('Вы сделали '+inttostr(FCount)+' клик(а/ов) по кнопке '+a)
end;

end.


в результате на кнопке название исчезает полностью, отображается просто значение счетчика. И в сообщении, вместо названии кнопки (+а) ничего нету...
Почему изменяется значение переменной и где присваивать ей значение, если проблема в этом?

Последний раз редактировалось WhitePoint; 07.06.2007 в 21:18.
WhitePoint вне форума Ответить с цитированием
Старый 08.06.2007, 00:56   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от WhitePoint Посмотреть сообщение
Почему изменяется значение переменной и где присваивать ей значение, если проблема в этом?
Скорее нужно спросить (себя), почему эта переменная является глобальной, т.е. общей для всех? Ведь в этом случае, при наличии нескольких TCountBtn-ов, каждая кнопка будет пытаться хранить свой заголовок в одной и той же переменной!

Вдобавок, в методе Create заголовка кнопку еще нет (Caption := <пусто>)
Jeni вне форума Ответить с цитированием
Старый 08.06.2007, 01:20   #3
WhitePoint
Пользователь
 
Регистрация: 31.03.2007
Сообщений: 25
По умолчанию

в том то и дело, я хочу, чтобы это применение работало для любого значения caption для любого экземпляра компонента. подскажите, можно ли это сделать в модуле самого компонента, а не при написании модуля программы?

ну а если нет, то допустим, что больше, чем одна кнопка на форме не появится. почему же не работает этот вариант?

Последний раз редактировалось WhitePoint; 08.06.2007 в 01:24.
WhitePoint вне форума Ответить с цитированием
Старый 08.06.2007, 08:17   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от WhitePoint Посмотреть сообщение
Procedure TCountBtn.Click;
begin
inherited click;
FCount:=FCount+1;
if showtype = hidecount then
caption:=caption
else caption:=(a+inttostr(Fcount));
end;
end.
Особо афтару удались строки: caption:=caption
и caption:=(a+inttostr(Fcount));
я бы описал какое-нить свое свойство BtnCaption, а caption спрятал куда-нить подальше и уже внутри класса менял как надо caption, унаследованное от TButton.
Никогда не задумывался о том, если на форме будет несколько твоих кнопок и в процессе работы ты решишь их переименовать?
pu4koff вне форума Ответить с цитированием
Старый 08.06.2007, 12:19   #5
WhitePoint
Пользователь
 
Регистрация: 31.03.2007
Сообщений: 25
По умолчанию

if showtype = showcount then
caption:=(a+inttostr(Fcount));

так лучше? Но почему-то a=<пусто>. я не знаю где она приобретает такое значение.
WhitePoint вне форума Ответить с цитированием
Старый 08.06.2007, 15:45   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

в общем пишешь:
Код:
...
private
  FMyCaption: string;
  procedure SetCaption(Value: string);
published
  property MyCaption: string read FMyCaption write SetCaption;
end;

...
procedure TCountBtn.SetCaption(Value: string);
begin
  if (FMyCAption <> Value) then
  begin
    FMyCaption := Value;
    if showtype = showcount then Caption := FMyCaption + IntToStr(FCount)
                                       else Caption := FMyCaption;
  end;
end;
ну по поводу типа string можешь пересмотреть...
pu4koff вне форума Ответить с цитированием
Старый 09.06.2007, 00:19   #7
WhitePoint
Пользователь
 
Регистрация: 31.03.2007
Сообщений: 25
По умолчанию

Гранд Спасибо
WhitePoint вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как получить значение переменной smoke888 PHP 3 20.06.2008 02:11
Как лучше объявить функцию? Иллидан Общие вопросы C/C++ 1 20.05.2008 14:31
Как получить значение системной переменной в С++ PersonaGrata Общие вопросы C/C++ 2 29.02.2008 22:14
присвоить переменной целого типа значение поля key полученное в результате выполнения SQL запроса Worms БД в Delphi 5 10.01.2008 21:07
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47