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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2008, 18:50   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Метод без класса

Привет всем!
Решил по практиковатся.
Так вот:
Есть скажем кнопка:
Код:
var
btn: tButton; 
begin
   btn := tButton.create(application);
   btn.caption := 'temp button;
   ...
   btn.onClick = // тут и проблемы
end;
Как мне назначить кнопке процедуру обработчика, если у меня нет класса.

Последний раз редактировалось Altera; 23.12.2008 в 21:46.
Altera вне форума Ответить с цитированием
Старый 23.12.2008, 19:06   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Application
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.12.2008, 21:10   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Хорошее слово! Одно из моих любимых.
А поконкретнее?
Altera вне форума Ответить с цитированием
Старый 23.12.2008, 21:23   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
btn.onClick = // тут и проблемы
кокнретную строку показывайте хотя бы, а не частями
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.12.2008, 21:49   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Если объявляю процедуру там-же:
Код:
procedure onClick(sender: tObject);
begin
   showMessage('YES!!!!');
end;

proceudre createButton;
var
btn: tButton; 
begin
   btn := tButton.create(application);
   btn.caption := 'temp button;
   ...
   btn.onClick := onClick;
end;
то, компилятор бурчит, типа: разные типы, метод и регулярная процедура
Altera вне форума Ответить с цитированием
Старый 24.12.2008, 00:06   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

такая же проблем была
кароч попробуй понормальному создать еще одну кнопку
там синтаксис OnClick'а должен быть определенный
хотя вродь у тя он и есть...
а у батона Parent кто?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 24.12.2008, 00:12   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

мдя
я тут порыл делфи
Код:
TNotifyEvent = procedure(Sender: TObject) of object; // -кхм
кароч легче прописать наследник TButton
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 24.12.2008, 00:26   #8
Роман Радер
Форумчанин
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
По умолчанию

да проще все!

Цитата:
если у меня нет класса.
нету - сделаем! это и есть ключ к решению

Код:
type SomeTempType=object
         a:integer;//чтоб небыло глюков делфи, надо хоть чтото объявить
         procedure SomeBtnClick(s:TObject);
       end;

var 
       aaa:SomeTempType;
все. теперь
Код:
var b:TButton;
...
b:=TButton.Create(form1);
b.parent:=form1;
b.tag:=10;
b.top...
b.left...
b.width...
...
b.onclick:=aaa.SomeBtnClick;
....
....
....
procedure SomeTempType.SomeBtnClick(s:TObject);
begin
  if TButton(s).tag=10 then
  begin
     //actions
  end;
end;

ну как, правда просто? а вы наследника писать, ...

Последний раз редактировалось Роман Радер; 24.12.2008 в 00:28.
Роман Радер вне форума Ответить с цитированием
Старый 24.12.2008, 01:20   #9
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

хех...
и правда просче)))
не знал што так можно
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 24.12.2008, 02:28   #10
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

По моему то что предложил Altera гораздо удобнее, по конкретнее:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure ClickD8(Sender:TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ClickD8(Sender:TObject);
begin
ShowMessage('122');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.OnClick:=ClickD8;
end;

end.
И если перед ShowMessage добавить
Код:
If TButton(Sender).Tag=10 then
То получится тоже самое что и у Романа Радера.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.

Последний раз редактировалось Deight; 24.12.2008 в 02:45.
Deight вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Synchronize класса TThread EdNovice Общие вопросы Delphi 10 01.08.2009 14:47
Передача метода класса в качестве параметра в другой метод Dmytry87 Общие вопросы C/C++ 0 12.11.2008 15:28
Процедуры без Bios и без Dos,бывают? codeok Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 31.10.2008 03:17
Создание класса Stanislav Общие вопросы Delphi 8 15.05.2008 23:34
создание класса Siren Помощь студентам 1 07.05.2008 19:19