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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов процедуры 
:(
    Опции темы
IamDreamer
Дата 29.4.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Имеется процедура:
Код

procedure NewDir(Sender: TObject);
begin
If NewForm.Edit1.Text<>'' Then MkDir(Form1.DirectoryListBox1.Directory+'\'+NewForm.Edit1.Text)
  Else
    begin
      ShowMessage('Введите имя папки');
    end;
  NewForm.Close;
  Form1.DirectoryListBox1.Update;
  Form1.DirectoryListBox2.Update;
end;

В списке параметров кроме Sender'a ничего нет, но при вызове:
Код
NewDir;
 выдает ошибку о недостаточном кол-ве параметров. Как ее правильно вызвать? 
PM MAIL WWW Jabber   Вверх
vood
Дата 29.4.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



задай ей sender:=application
а еще лучше напиши процедуру аналогичную данной только с параметром application:tapplication вместо  sendera 


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
IamDreamer
Дата 29.4.2006, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vood, а что вообще такое Sender/TApplication? 
PM MAIL WWW Jabber   Вверх
Quadr0
Дата 29.4.2006, 16:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











...

Это сообщение отредактировал(а) Quadr0 - 15.7.2011, 11:07
  Вверх
IamDreamer
Дата 29.4.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vood @  29.4.2006,  16:33 Найти цитируемый пост)
application:tapplication

Это типа так:
Код

procedure NewDir(Application: TApplication);
begin
...
end;

Цитата(Quadr0 @  29.4.2006,  16:52 Найти цитируемый пост)
А зачем тебе вообще там Sender?

А как без него? Я пробовал так:
Код

procedure NewDir;
begin
...
end;
, но все равно писал про мало параметров.

 
PM MAIL WWW Jabber   Вверх
Демо
Дата 29.4.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Ну напиши NewDir(nil), раз не нужен параметр. 


--------------------
    
PM MAIL ICQ Skype   Вверх
Sunvas
Дата 29.4.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Цитата(Демо @  29.4.2006,  18:01 Найти цитируемый пост)
Ну напиши NewDir(nil), раз не нужен параметр. 

или NewDir(self) в зависимости от того, как ты вызываешь процедуру 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
IamDreamer
Дата 29.4.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я вызываю ее напрямую. В смысле это процедура создания новой папки. В моем случае это можно сделать несколькими способами (правой кнопкой мыши, там выбрать, простой кнопкой "Создать" и т.д.). Дык вот чтобы не писать одно и то же везде, я решил сделать процедуру, которой для работы не надо никаких параметров, они ей не нужны.  
PM MAIL WWW Jabber   Вверх
vood
Дата 30.4.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так это событие onclick popupmenu 
А нафиг его вызывать оно само сработает smile  


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Yanis
Дата 30.4.2006, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(IamDreamer @  29.4.2006,  19:57 Найти цитируемый пост)
которой для работы не надо никаких параметров, они ей не нужны

А зачем тогда такой заголовок:
Код

procedure NewDir(Sender: TObject);
 если никакие параметры не требяются?

P. S. может всё таки сделать процедуру с параметром и в нём передавать имя создаваемой папки? Типа:
Код

procedure NewDir(Dir: string);

 smile  


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
vood
Дата 30.4.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



События ненужно вызывать как функции они срабатывают сами
Или утебя на форме нет popupmenu

Добавлено @ 00:23 
Yanis,это событие  компонента 

Это сообщение отредактировал(а) vood - 30.4.2006, 00:30


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Yanis
Дата 30.4.2006, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(vood @  30.4.2006,  00:22 Найти цитируемый пост)
Yanis,это событие   

А, ну теперь ясно. 

IamDreamer
Вообще странное объявление метода класса/объекта. Если уж на то оно пошло то должно быть как минимум таким:
Код

{ ... }
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    procedure NewDir(Sender: TObject);
  end;
{ ... }
procedure TForm1.NewDir(Sender: TObject);
begin
  If NewForm.Edit1.Text<>'' Then MkDir(Form1.DirectoryListBox1.Directory+'\'+NewForm.Edit1.Text)
  Else
    begin
      ShowMessage('Введите имя папки');
    end;
  NewForm.Close;
  Form1.DirectoryListBox1.Update;
  Form1.DirectoryListBox2.Update;
end;

Вот это уже похоже на метод.  

Это сообщение отредактировал(а) Yanis - 30.4.2006, 00:33


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
vood
Дата 30.4.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Yanis, а только ли TApplication может быть Sender? 


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
Демо
Дата 30.4.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



Цитата(vood @  30.4.2006,  00:37 Найти цитируемый пост)
а только ли TApplication может быть Sender? 


Sender - это любой объект.
Предназначен для использования в обработчиках событий для идентификации объекта класса.

например:

Код

type

  TForm1 = class(TForm)
     Button2: TButton;
     procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure OnMyEvent(Sender: TObject);
  end;


  TMyEvent=procedure(Sender: TObject) of object;

  TMyClass=class
  private
     FName: String;
     FEvent: TMyEvent;
     procedure MyEvent;
  public
     constructor Create(Name: String);
     procedure Test;

     property Name: String read FName write FName;
     property OnEvent: TMyEvent read FEvent write FEvent;
  end;

implementation


procedure TForm1.OnMyEvent(Sender: TObject);
begin
  ShowMessage((Sender as TMyClass).Name);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  m1,m2: TMyClass;
begin
  m1 := TMyClass.Create('Name1');
  m2 := TMyClass.Create('Name2');

  m1.OnEvent := OnMyEvent;
  m2.OnEvent := OnMyEvent;
  m1.Test;
  m2.Test;
  m1.Free;
  m2.Free;

end;

{ TMyClass }

constructor TMyClass.Create(Name: String);
begin
  FName := Name;
end;

procedure TMyClass.MyEvent;
begin
  if Assigned(FEvent) then FEvent(Self);
end;

procedure TMyClass.Test;
begin
  MyEvent;
end;

 


--------------------
    
PM MAIL ICQ Skype   Вверх
Тьма
Дата 30.4.2006, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 22.1.2005
Где: Украина, Винница

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



отвечу за яниса

нет, не только
Sender - это обьект, который вызвал событие, т.е. в процедуте procedure TForm1.Button1Click(Sender: TObject) sender это Button1. если ты используешь один обработчик события на несколько контролов, то Sender это будет контрол, который вызваль это событие
например
Код

procedure TForm1.ManyButtonsClick(Sender: TObject);
begin
  if sender = button1 
     then begin
             end;
  if sender = button2 
     then begin
             end;
....
  if sender = ButtonN
     then begin
             end;
end;


вырезка из делфовой справки
Цитата

The Sender parameter is the object whose event handler is called.  For example,.with the OnClick event of a button, the Sender parameter is the button component that is clicked.
 

ой ой ой долго писал smile 
 

Это сообщение отредактировал(а) Тьма - 30.4.2006, 01:18


--------------------
Vir magni ingenii                 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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