Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Заставить кнопку закрыть форму-владельца   Найти похожие ветки 

 
GetIt   (2004-03-24 23:15) [0]

Просьба дописать код (программного создания формы и кнопки на ней)
Задача: Заставить кнопку закрыть форму-владельца...
Вот:

unit Funk;
....
uses Form1; // main form

procedure BBB;
var
F:TForm;
B:TButton;
begin
F:=TForm.Create(Application.MainForm);
B:=TButton.Create(F);
B.Parent:=F;
B.Caption:="Close";
F.ShowModal;
F.Free;
F:=nil;
end;
//----------------------------------------------
как кнопке на нажатие присвоить нужное значение (не завися от других форм) ?


 
Rouse_ ©   (2004-03-24 23:21) [1]

Написать и присвоить ей обработчик...


 
TButton ©   (2004-03-24 23:27) [2]

onClick
 TForm(B.Owner).Close;
end;

так?


 
Rouse_ ©   (2004-03-25 00:13) [3]

Ну собственно, каков код, таков и ответ :)

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   procedure BBB;
   procedure BtnClick(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 BBB; // Тут вызываем так называемую БББ
end;

procedure TForm1.BBB; // Это сама БББ :)
var
F:TForm;
B:TButton;
begin
F:=TForm.Create(Application.MainForm);
B:=TButton.Create(F);
B.Parent:=F;
B.Caption:="Close";
B.OnClick :=  BtnClick; // Это обработчик кнопки
F.ShowModal;
F.Free;
F:=nil;
end;

procedure TForm1.BtnClick(Sender: TObject); // а вот и сам обработчик
begin
 TForm(GetParentForm(Sender as TControl)).ModalResult := mrOk;
end;

end.


 
Гаврила   (2004-03-25 00:18) [4]

В данном частном случае
B.ModalResult:=MrClose;

В общем случае
B.OnClick :=  AnyObject.BtnClick;
где метод BtnClick принадлежит некоему объекту и имеет прототип
procedure(Sender: TObject);


 
GetIt   (2004-03-25 01:22) [5]

Смысл до конца не понят...  :|

2 Rouse_ :

>> procedure TForm1.BtnClick(Sender: TObject); // а вот и сам обработчик

Я, говоря "не завися от других форм", как раз и имел в виду "это"....

То есть, unit Funk - это отдельный юнит...
его может подцепить любой другой юнит, а в частности, (допустим) твой
unit Unit1.... и просто вызвать BBB.

как у тебя и есть....

>> procedure TForm1.Button1Click(Sender: TObject);
>> begin
>>  BBB; // Тут вызываем так называемую БББ
>> end;

на что ему:
unit Funk, а в частности, описаная в нем BBB

( не procedure TForm1.BBB; // , а  просто procedure BBB; )

должна:

создать форму с кнопкой "Close", при нажатии на которую
эта же форма (F:TForm) и освобождается....

НО:

>> B.OnClick :=  BtnClick; // Это обработчик кнопки
это хорошо и понятно...

TForm1.BtnClick только вот ето... неприемлемо..
получается модуль привязан к TForm1...

не будет TForm1, модуль надо править...
суть вопроса как раз в этом...


 
Erik ©   (2004-03-25 04:54) [6]

Ну ты и объясняеш!
У этой процедуры должен быть еще один дополнительный параметр.
procedure BtnClick(Self: TObject; Sender: TObject);

var
 amethod: TMethod;
begin
 amethod.Code := @BtnClick;
 amethod.Data := Self;
 Button1.OnClick := TNotifyEvent(amethod);


 
GetIt   (2004-03-25 05:19) [7]

>> Erik ©   (25.03.04 04:54) [6]

Ай, молодца... помог...
Я сам такого не знал...

Сделал так:

procedure BBB;
var
amethod: TMethod;
B:TButton;
F:TForm;
....
begin
....
B:=TButton.Create(F);
B.Parent:=F;
B.Caption:="Close";
amethod.Code := @BonClick;
amethod.Data := B;
B.OnClick:=TNotifyEvent(amethod);
....
end;

procedure BonClick(Sender:TObject);
begin
TForm(GetParentForm(Sender as TControl)).ModalResult := mrOk;
end;

>> Гаврила   (25.03.04 00:18) [4]
>> В данном частном случае
>> B.ModalResult:=MrClose;

Ты че то, наверное, путаешь..

property ModalResult: TModalResult;

mrNone
mrOk
mrCancel
mrYes
mrNo
mrAbort
mrRetry
mrIgnore
mrAll
mrNoToAll
mrYesToAll

>> B.OnClick :=  AnyObject.BtnClick;
>> где метод BtnClick принадлежит некоему объекту

"принадлежит некоему объекту" - как раз вот это я и пытался обойти...

Всем пасибо.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
3-1081658237
jkl
2004-04-11 08:37
2004.04.11
Объединение запросов


1-1082815871
Sorry
2004-04-24 18:11
2004.04.11
Memo


1-1080068851
DillerXX
2004-03-23 22:07
2004.04.11
Подскажите команду...


1-1082615490
Narayan
2004-04-22 10:31
2004.04.11
показ формы


14-1082547606
Knight
2004-04-21 15:40
2004.04.11
Можно ли редактировать набор кнопок в диалогах сохранения...