Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1082562776
Insert
2004-04-21 19:52
2004.04.11
Запуск readme


9-1065284888
m2003
2003-10-04 20:28
2004.04.11
Как через OpenGL вывести BMP на экран?


6-1079338820
alt7
2004-03-15 11:20
2004.04.11
Microsoft WNet праблем


1-1079792412
A JI E LLI A
2004-03-20 17:20
2004.04.11
Есть ли в Дельфях функция округления до целого числа?


3-1082020881
Flashas
2004-04-15 13:21
2004.04.11
Dbgrid?....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский