Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программно создать событие OnClick на кнопке 
V
    Опции темы
mistrmax
Дата 5.4.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Вы меня только сильно не бейте, если что не то скажу. Раздел ведь для новчиков...
Вообщем есть форма, на ней я программно создаю кнопки. Мне нужно одновременно присваивать каждой кнопке событие. События для каждой кнопки, одинаковые (Form2.Show), но так же нужно, чтобы по нажатию кнопки, в Form2 в Label1 менялся текст в соответствии с заданным пользователем параметром из INI файла (Ini читать умею если что). Для каждой кнопки свой текст и он меняется. Ну вот как то так. Собственно как программно создать такое событие OnClick на кнопке ?  smile 
Заранее спасибо.
PM   Вверх
~FoX~
Дата 5.4.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 5
Всего: 68



Код

type
  TForm1 = class(TForm)
//.................
    procedure BOpenClick(Sender: TObject); //Описали клик
//.................
 private
    BOpen: TButton;  //кнопа
//..............  
    BOpen := TButton.Create(Self);
    BOpen.Parent := Self;
    BOpen.Height := 150;
    BOpen.Width := 150;
    BOpen.Caption := 'Button';
    BOpen.Hint := 'Button';
    BOpen.ShowHint := true;
    BOpen.OnClick := BOpenClick;  //<---------примерно так
    BOpen.Visible := true;

//...............................
procedure TForm1.BOpenClick(Sender: TObject);
begin
 Form2.Show; //Ну, а тут, обрабатываем наш клик
end;


Это сообщение отредактировал(а) ~FoX~ - 5.4.2011, 17:23


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
mistrmax
Дата 5.4.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



Цитата(~FoX~ @ 5.4.2011,  17:21)
Код

type
  TForm1 = class(TForm)
//.................
    procedure BOpenClick(Sender: TObject); //Описали клик
//.................
 private
    BOpen: TButton;  //кнопа
//..............  
    BOpen := TButton.Create(Self);
    BOpen.Parent := Self;
    BOpen.Height := 150;
    BOpen.Width := 150;
    BOpen.Caption := 'Button';
    BOpen.Hint := 'Button';
    BOpen.ShowHint := true;
    BOpen.OnClick := BOpenClick;  //<---------примерно так
    BOpen.Visible := true;

//...............................
procedure TForm1.BOpenClick(Sender: TObject);
begin
 Form2.Show; //Ну, а тут, обрабатываем наш клик
end;

Это умеем уже, но спасибо, что откликнулись.
Хотелось бы что бы было что нибудь вроде:
Код

//.................
 procedure BOpenClick(text: string);
//.................
//.................
BOpen.OnClick := BOpenClick('любой текст, разный для каждой кнопки');
//.................
//.................

procedure TForm1.BOpenClick(text: string);
begin
 Form2.Label1.Caption:=Text;
 Form2.Show; 
 
end;


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


function MakeMethod(code,data:pointer):TMethod;
begin
  Result.Data := Data;
  Result.Code := Code;
end;
............................
Shape.OnClick:=TNotifyEvent(MakeMethod(@MyEvent,@MyEvent));


PM   Вверх
cat512
Дата 5.4.2011, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 2
Всего: 15



Что мешает в этом обработчике проверить условие на наличие необходимого объекта, например:
Код

procedure TForm1.BOpenClick(Sender: TObject);
begin
  if assigned(Sender)  and (Sender is TButton) then 
  begin
//Проверка по типу класса
    Sender as TButton then Caption := 'Button';
  end;
//Проверка по имени класса.
  if Assigned(Sender) and (LpowerCase(Senedr.ClassName) = 'tbutton') then 
    Caption := 'Button';
//Проверка по имени объекта(компонента)
  if Assigned(Sender) and Sender is TComponent 
    and (LowerCase((Sender as TComponent).name) = 'tbutton') then
      Caption := 'Button';
    
end;

PM MAIL   Вверх
mistrmax
Дата 5.4.2011, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 30.5.2010

Репутация: нет
Всего: нет



cat512, по ходу вы либо не в ту тему написали, либо не поняли суть моей проблемы. 
Ну это уже неважно. Проблему я решил и без TNotifyEvent, используя свойство Tag каждой кнопки, хоть с точки зрения этики это как то и не очень выглядит. =)
Код


btn.Tag:=i; //при динамическом создании кнопки, i - счетчик кнопок.
btn.OnMouseDown:=ButtonREnter; //...
//...............

procedure TForm1.ButtonREnter(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
ini:TIniFile;
param:integer;
//...............
begin
  ini:=TiniFile.Create(ExtractFileDir(Application.ExeName)+'\opt.ini');
  param:= TButton(Sender).Tag;
  mes:=ini.ReadString('btn'+inttostr(param),'z','Error');
  showmessage(mes);
  //...............
end;
//...............

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.