Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизЗаставить кнопку закрыть форму-владельца Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c