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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 17:55   #1
fineleave
Пользователь
 
Аватар для fineleave
 
Регистрация: 12.01.2011
Сообщений: 14
По умолчанию Програмно изменить OnClick

Добрый день. Пишу программу и необходимо изменить события, которые вызываются при OnClick.
Возможно то программно изменить это?

например.
Button1.OnClick выполняет label1.visible: = true;
а мне необходимо заменить текст в OnClick на label1.visible: = false;

возможно выполнять такие замены программно? напрмер:

if (умова = 1) then begin
button1.OnClick:=( ' label1.visible: = true' );
end else
button1.OnClick:=( ' label1.visible: = false' );
fineleave вне форума Ответить с цитированием
Старый 11.04.2011, 18:00   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Label1.Visible
 then
  Label1.Visible := False
 else
  Label1.Visible := True;
end;
Может Вам лучше в раздел "Новички в программировании"?
OlegVE вне форума Ответить с цитированием
Старый 11.04.2011, 18:06   #3
fineleave
Пользователь
 
Аватар для fineleave
 
Регистрация: 12.01.2011
Сообщений: 14
По умолчанию

я это знаю Но меня интересует не то.
мне необходимо изменить события, выполняемые при OnClick.
изменить сам текст события.

пример 2:

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Visible := True;
end;

заменить на

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Visible := False;
end;

изменить сам текст события программно.
fineleave вне форума Ответить с цитированием
Старый 11.04.2011, 18:06   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Можно.

Но не так, как вы хотите сделать.

Я бы начал с:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Visible := (умова = 1);
end;
Если не устраивает (щелчок и проверка в одном месте, а не разнесены, как у вас), то:

Код:
Button1.Tag := Ord(умова = 1);

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Visible := (Button1.Tag <> 0);
end;
Если и это не нравится, то:

Код:
if (умова = 1) then
  button1.OnClick := Button1ClickShow
else
  button1.OnClick := Button1ClickHide;

...

procedure TForm1.Button1ClickShow(Sender: TObject);
begin
  Label1.Visible := True;
end;

procedure TForm1.Button1ClickHide(Sender: TObject);
begin
  Label1.Visible := False;
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 11.04.2011, 18:13   #5
fineleave
Пользователь
 
Аватар для fineleave
 
Регистрация: 12.01.2011
Сообщений: 14
По умолчанию

Понятно. Благодарю за ответ.
Думал что можно изменить типу так:
button1.onClick: = ('что нужно выполнить');
fineleave вне форума Ответить с цитированием
Старый 11.04.2011, 20:51   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Думал что можно

если очень хочется, то можно:

Код:
    @Button1.OnClick := pPointer(Cardinal(pPointer(  procedure (sender: tObject) begin (TButton(sender).Owner as TForm).Caption := 'From ButtonClick' end )^  ) + $0C)^;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 11.04.2011 в 20:58.
veniside вне форума Ответить с цитированием
Старый 12.04.2011, 12:33   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

"+много , хххххдддд, автар жги есчо"

мне понравился способ ))

ТС, советую Вам отойти от понимания программирования, как некоей системы, где есть текст, события, готовые объектные сущности. Среда за Вас делает всю тяжелую работу, производит сокрытие всей этой работы, а Вам предоставляет наполнение событий нужным кодом, и когда Вы это поймёте, то смысл понятия "изменить текст события программно" станет для Вас "присваиванием полю (в некоем объекте) процедурного типа нужной вам переменной процедурного типа, подпрограмма записанная в которой у Вас уже объявлена и наполнена по всем правилам" , что и указано этим кодом
Цитата:
Сообщение от GunSmoker
Код:
if (умова = 1) then
  button1.OnClick := Button1ClickShow
else
  button1.OnClick := Button1ClickHide;

...

procedure TForm1.Button1ClickShow(Sender: TObject);
begin
  Label1.Visible := True;
end;

procedure TForm1.Button1ClickHide(Sender: TObject);
begin
  Label1.Visible := False;
end;

Последний раз редактировалось phomm; 12.04.2011 в 12:38.
phomm вне форума Ответить с цитированием
Старый 12.04.2011, 19:07   #8
mobilitialex
Пользователь
 
Регистрация: 19.05.2009
Сообщений: 40
По умолчанию

Label1.Visible:= not Label1.Visible;
mobilitialex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реестр - Необходимо изменить действие по умолчанию для .reg файлов(«Изменить» вместо «Объединить»). ACE Valery Windows 7 30.11.2010 23:33
програмно загруз веб страницу вставить текст и програмно нажать кнопку. asdn Общие вопросы .NET 0 05.10.2010 13:40
Как програмно изменить цвет ярлычка активного листа? ru3000 Microsoft Office Excel 9 19.07.2009 22:31
Как програмно изменить основной IP адрес в настройках TCP/IP сетевой карты SeRhy Работа с сетью в Delphi 1 18.03.2009 05:52
Как изменить цвет шрифта кнопки + объявление OnClick Yury Общие вопросы Delphi 7 04.05.2007 04:55