![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! Не подскажите как можно передать в процедуру ссылку на форму, чтобы в этой процедуре было возможно обращаться к компонентам этой формы? Т.е сделать так чтобы в процедуру не передавать ссылки не на компоненты, а только на форму. А уже в самой процедуре выяснять есть ли на той форме, ссылка на которую передана, нужный нам компонент и производить с ним какие либо действия.
Например форм у нас 100 шт., и на каждой есть Button1 и Label1. Как на клике этих Button1 вызвать процедуру TForm1.MyProc передав этой процедуре указание о том какая форма эту процедуру вызывает? procedure TForm1.MyProc(ссылка_на_форму); begin ссылка_на_форму.Label1.Caption := 'aaa'; end; |
|
#2
|
||||
|
||||
|
Код:
procedure someproc (form:TForm) |
|
#3
|
|||
|
|||
|
Неа, не так. Компилятор не даст в процедуре обратиться к Label1 формы, потому что у TForm нет компонента Label1. А он есть только у TForm1.
А нужно передавать ведь не только TForm1, а еще 50 других различных форм. |
|
#4
|
||||
|
||||
|
приведение типов:
Код:
(form as TForm1).Label1.Caption := 'some text' |
|
#5
|
|||
|
|||
|
PHP код:
Цитата:
Последний раз редактировалось Pyro, 18.09.2011 в 11:33. |
|
#6
|
|||
|
|||
|
Нет, так не поучится, потому что тип неизвестен.
(form as TForm1).Label1.Caption := 'some text' т.е в этой строке неизвестно что ставить TForm1 или TForm2088. Хочется передавать в процедуру ссылки на разные формы и у них разные компоненты. Это нужно потому что в программе есть много разных похожих форм, у на обработчиках событий компонентов этих форм одинаковый код. И такого одинакового кода 90%. Поэтому хотелось бы вынести этот код в отдельные процедуры и в эти процедуры передавать только ссылку на форму, к какой он относится. |
|
#7
|
|||
|
|||
|
http://ru.wikipedia.org/wiki/Объектн...82.D0.B8.D1.8F
конкретно - наследование |
|
#8
|
||||
|
||||
|
у меня все получилось:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyForm = class(TForm)
public
function GetLabel: TLabel; virtual; abstract;
end;
TForm1 = class(TMyForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetLabel: TLabel; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TheLost(MyForm: TMyForm);
begin
MyForm.GetLabel.Caption:='TheLost';
end;
function TForm1.GetLabel: TLabel;
begin
Result:=Label1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TheLost(Self);
end;
end. |
|
#9
|
|||
|
|||
|
NumLock спасибо! Также на Королевстве Дельфи подсказали:
Код:
procedure TForm1.MyProc(F: TForm);
begin
TLabel(F.FindComponent('Label1')).Caption := 'aaa';
end; |
|
#10
|
||||
|
||||
|
Цитата:
Цитата:
![]() |
|
#11
|
|||
|
|||
|
А разве нельзя было просто подключить модуль первой формы ко второй?
Код:
implementation uses frm2_Unit; Если такой метод не правелен скажите почему, просто я часто к этому пербегаю. |