Главная страница
    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.044 c
7-1076071597
Davey
2004-02-06 15:46
2004.04.11
Имя пользователя, запустившего процесс, как в Task Manager e в ХР


3-1081769871
Liona
2004-04-12 15:37
2004.04.11
Как вывести SQL запрос в DBComboBox?


1-1082371768
Awod
2004-04-19 14:49
2004.04.11
Иконка приложения


14-1082100591
Undert
2004-04-16 11:29
2004.04.11
Вопрос к администраторам


7-1075452034
sergwolf
2004-01-30 11:40
2004.04.11
Как сделать что бы дескету автоматом проверяла на вирусы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский